ItemLocate

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

Purpose

Locate a item

Syntax

lFound:=oPointerSafe:ItemLocate( pItemToLocate )

Arguments

pLocateItem
PTR, Item to locate

Description

Locate a item, This method is provided for the application programmer and is used to locate data-items in the data-store. The 'ItemIndex' of is updated to the found item ( if found <g> ).

Returns

lFound = 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 ItemLocate( pLocateItem AS PTR ) AS LOGIC PASCAL CLASS TS_PointerSafe
// LOCAL pCurrentItem AS BYTE PTR
LOCAL dwItemIndex AS DWORD
LOCAL lFound AS LOGIC
   TSTrace Enter
   DO CASE
   CASE pLocateItem==NULL_PTR
      TSTrace Warning "pLocateItem==NULL_PTR"
      SELF:_ItemIndex:=0U
      lFound:=FALSE
   CASE IsBadReadPtr( pLocateItem, SELF:_ItemSize )
      TSTrace Warning "IsBadReadPtr(pLocateItem,SELF:_ItemSize)"
      SELF:_ItemIndex:=0U
      lFound:=FALSE
   CASE SELF:_BytesPointer==NULL_PTR .OR. SELF:_BytesAllocated ; ...
  ... ==0U
      TSTrace Warning "SELF:_BytesPointer==NULL_PTR .OR. SELF:_BytesAllocated==0U"
      SELF:_ItemIndex:=0U
      lFound:=FALSE
   OTHERWISE
      dwItemIndex:=MemScan( SELF:_BytesPointer, SELF:_ItemCount ; ...
     ... , pLocateItem, SELF:_ItemSize )
      IF LOGIC( _CAST, dwItemIndex )
         SELF:_ItemIndex:=dwItemIndex
         lFound:=TRUE
      ELSE
         SELF:_ItemIndex:=0U
         lFound:=FALSE
      END
   END
   TSTrace Leave
RETURN lFound