ItemAddIfNew

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

Purpose

Add a new item if not already existing

Syntax

lAdded:=oPointerSafe:ItemAddIfNew( 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. The data item is only added if it is not already in the data store. If the item is alredy in the data store then the method returns FALSE ( not added ).

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:ItemAddIfNew( TS_GUID_IDispatch( ) )
   oPointerSafe:ItemAddIfNew( TS_GUID_IUnknown( ) )
   oPointerSafe:ItemAddIfNew( 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 ItemAddIfNew( pAddItem AS PTR, lAutoSize:=FALSE AS LOGIC ) AS LOGIC PASCAL  ; ...
...CLASS TS_PointerSafe
LOCAL lRetVal AS LOGIC
   TSTrace Enter
   DO CASE
   CASE SELF:ItemLocate( pAddItem )
      lRetVal:=FALSE
   CASE SELF:ItemAdd( pAddItem, lAutoSize )
      lRetVal:=TRUE
   OTHERWISE
      lRetVal:=FALSE
   END
   TSTrace Leave
RETURN lRetVal