ItemAdd

 (Available in 00 TS Tools(Base) - TS_Tools_PointerSafe)

Purpose

Add a new item

Syntax

lAdded:=oPointerSafe:ItemAdd( pItem[ , LOGIC ] )

Arguments

pAddItem
PTR, Pointer to the data-item to add.
lAutoSize
[LOGIC], If TRUE the the size of the data-store will be re-sized, by adding space for 10 data-items, when needed.

Description

Add a new item, This method is provided for the application programmer and is used to add data-items to the data-store. The data-item is added to the end of the data-store and the number of data-items is incremented.

Returns

lAdded = LOGIC

Example

METHOD UsingThePointerSafe( ) CLASS MyObject
LOCAL oPointerSafe AS TS_PointerSafe
LOCAL pItem AS PTR
   oPointerSafe:=TS_PointerSafe{ SELF, 10, _SIZEOF( _WinGUID ) }
   oPointerSafe:ItemAdd( TS_GUID_IDispatch( ) )
   oPointerSafe:ItemAdd( TS_GUID_IUnknown( ) )
   oPointerSafe:ItemAdd( TS_GUID_ITypeInfo( ) )
   IF oPointerSafe:ItemLocate( TS_GUID_ITypeInfo( ) )
      oPointerSafe:ItemDel( oPointerSafe:ItemIndex )
   END
   IF !oPointerSafe:ItemLocate( TS_GUID_ITypeInfo( ) )
      oPointerSafe:ItemAdd( oPointerSafe:ItemIndex )
   END
   oPointerSafe:ItemFirst( )
   WHILE pItem<>NULL_PTR
      IF pItem<>NULL_PTR
         SELF:UseItem( pItem )
      END
      pItem:=oPointerSafe:ItemNext( )
   END
   oPointerSafe:ItemLast( )
   WHILE pItem<>NULL_PTR
      IF pItem<>NULL_PTR
         SELF:UseItem( pItem )
      END
      pItem:=oPointerSafe:ItemPrevious( )
   END
   oPointerSafe:ItemFirst( TRUE )
   WHILE oPointerSafe:ItemNext( )<>NULL_PTR
      SELF:UseItem( oPointerSafe:ItemPTR )
   END
   oPointerSafe:ItemLast( TRUE )
   WHILE oPointerSafe:ItemPrevious( )<>NULL_PTR
      SELF:UseItem( oPointerSafe:ItemPTR )
   END
RETURN SELF

Source

METHOD ItemAdd( pAddItem AS PTR, lAutoSize:=FALSE AS LOGIC ) AS LOGIC PASCAL CLASS  ; ...
...TS_PointerSafe
LOCAL lAdded AS LOGIC
   TSTrace Enter
   DO CASE
   CASE pAddItem==NULL_PTR
      TSTrace Warning "pAddItem==NULL_PTR"
      lAdded:=FALSE
   CASE IsBadReadPtr( pAddItem, SELF:_ItemSize )
      TSTrace Warning "IsBadReadPtr(pAddItem,SELF:_ItemSize)"
      lAdded:=FALSE
   CASE SELF:_BytesPointer==NULL_PTR .OR. SELF:_BytesAllocated ; ...
  ... ==0U
      TSTrace Warning "SELF:_BytesPointer==NULL_PTR .OR. SELF:_BytesAllocated==0U"
      lAdded:=FALSE
   CASE SELF:_ItemCount<SELF:_ItemMax
      lAdded:=TRUE
   CASE lAutoSize
      lAdded:=SELF:ReAlloc( SELF:_ItemMax ; ...
     ... +SELF:_ItemStepSize )
   OTHERWISE
      lAdded:=FALSE
   END
   IF lAdded
      MemCopy( SELF:_BytesPointer+( SELF:_ItemSize ; ...
     ... *SELF:_ItemCount ), pAddItem, SELF:_ItemSize  ; ...
     ... )
      SELF:_ItemCount+=1
   END
   TSTrace Leave
RETURN lAdded