ItemDel

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

Purpose

Delete a item

Syntax

lDeleted:=oPointerSafe:ItemDel( pItem )

Arguments

dwItemIndex
DWORD, Index of the data-item to delete.

Description

Delete a item, This method is provided for the application programmer and is used to delete data-items from the data-store. The number of data-items is decremented.

Returns

lDeleted = 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 ItemDel( dwItemIndex AS DWORD ) AS LOGIC PASCAL CLASS TS_PointerSafe
LOCAL lDeleted AS LOGIC
   TSTrace Enter
   IF SELF:_BytesPointer<>NULL_PTR .AND. SELF:_BytesAllocated ; ...
  ... <>0
      IF Between( dwItemIndex, 1, SELF:_ItemCount )
         IF SELF:_ItemCount>dwItemIndex
            MemMove( SELF:_BytesPointer+( SELF:_ItemSize ; ...
           ... *( dwItemIndex-1 ) ), SELF:_BytesPointer+( SELF:_ItemSize ; ...
           ... *dwItemIndex ), SELF:_ItemSize*( SELF:_ItemCount ; ...
           ... -dwItemIndex ) )
         END
         SELF:_ItemCount-=1
         IF SELF:_ItemIndex>dwItemIndex
            SELF:_ItemIndex-=1
         END
         lDeleted:=TRUE
      ELSE
         TSTrace Warning "!Between(dwItemIndex,1,SELF:_ItemCount)"
         lDeleted:=FALSE
      END
   ELSE
      TSTrace Warning "!(SELF:_BytesPointer<>NULL_PTR .AND. SELF:_BytesAllocated<>0)"
      lDeleted:=FALSE
   END
   TSTrace Leave
RETURN lDeleted