TS_PointerSafe

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

Purpose

Place holder for pointers

Syntax

oPointerSafe:=TS_PointerSafe{ [oOwner], 10, _SIZEOF( _WinGUID ) }

Arguments

uoOwner
NIL, OBJECT
dwItemMax
DWORD
dwItemSize
DWORD

Access methods

ItemPTR - Get a pointer to the current item
ItemCount - Get the 'ItemCount'
ItemIndex - Get the 'ItemIndex'
BytesAllocated - Get the number of bytes allocated
BytesPointer - Get the pointer
ItemMax - Get the number of items allocated
ItemSize - Get the item size
MemFree - Test the 'MemFree' flag

Assign methods

ItemCount - Set the 'ItemCount'
ItemIndex - Set the 'ItemIndex'
MemFree - Set the 'MemFree' flag

Methods

TSTraceInfo -
ItemAddIfNew - Add a new item if not already existing
ItemAdd - Add a new item
ItemDel - Delete a item
ItemLocate - Locate a item
ItemNext - Get a pointer to the next item
ItemPrevious - Get a pointer to the previous item
ItemFirst - Get a pointer to the first item
ItemLast - Get a pointer to the last item
Destroy - CALLBACK: It is adviced to use 'oObject:Axit()'
INIT - Create a 'TS_PointerSafe' instance
NEW - CALLBACK: New ( OnInited event )
ReAlloc - Change the size of the allocated memory
ItemPointer - Get a pointer to an item

Description

The object can be used to dynamicly un-allocate static allocated memory. When the 'TS_PointerSafe' object is no longer accessable then the memory allocated will be freed.

Inherits from

TS_Root1

Example

METHOD UsingThePointerSafe( ) CLASS MyObject
   oPointerSafe:=TS_PointerSafe{ oOwner, 10, _SIZEOF( _WinGUID ) }
   FOR X:=1 UPTO 10
      pGUID:=oPointerSafe:ItemPointer( X )
//    Do something with the GUID-pointer
      ... 
   NEXT
RETURN SELF

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

CLASS TS_PointerSafe INHERIT TS_Root1
   DECLARE ACCESS BytesAllocated
   DECLARE ACCESS BytesPointer
   DECLARE ACCESS ItemCount
   DECLARE ACCESS ItemIndex
   DECLARE ACCESS ItemMax
   DECLARE ACCESS ItemPTR
   DECLARE ACCESS ItemSize
   DECLARE ACCESS MemFree
   DECLARE ASSIGN ItemCount
   DECLARE ASSIGN ItemIndex
   DECLARE ASSIGN MemFree
   DECLARE METHOD ItemAdd
   DECLARE METHOD ItemAddIfNew
   DECLARE METHOD ItemDel
   DECLARE METHOD ItemFirst
   DECLARE METHOD ItemLast
   DECLARE METHOD ItemLocate
   DECLARE METHOD ItemNext
   DECLARE METHOD ItemPointer
   DECLARE METHOD ItemPrevious
   DECLARE METHOD ReAlloc