Class TContainer (unit Containr) |
Inherits from
TStreamable
constructor Load(S: TFilter);
- Stores wheter container is able to sort or not.
function Add(Item: Pointer): Integer;
Sets FOnChange to nil, preventing change message's to
be send during destruction, then calls FreeDataStructire and inherited Destroy
procedure Assign(Container: TContainer);
Checkes for duplicates and sorting order, then calls ListInsert to
insert item at correct position.
procedure BeginUpdate;
List is cleared.
procedure Clear;
Increments UpdateCount and calls SetupdateState(True).
procedure Delete(Index: Integer);
Clears all items in container.
procedure DeleteItem(Item: Pointer);
Deletes item at Index from container, calls FreeItem if OwnesItem is
True not sorted
destructor Destroy;
Loads properties from S and then reads items calling GetItem.
procedure EndUpdate;
Exchages items at Index1 and Index2.
procedure Exchange(Index1, Index2: Integer);
Deletes item from container, uses Find to locate it, then calls Delete
function Find(Item: Pointer; var Index: Integer): Boolean;
returns pointer to first item or nil if no such item exists
function FindKey(Key: Pointer; var Index: Integer): Boolean;
Returns FindKey(KeyOf(Item)
function First: Pointer;
Decrements the UpdateCounter.
function IndexOf(Item: Pointer): Integer;
Returns True if Item is found.
function Insert(Index: Integer; Item: Pointer): Integer;
Calls Find and returns index of Item, or -1 if it was not found
function Last: Pointer;
Checkes for sorting order and duplicates, then inserts item calling
ListInsert.
procedure Move(CurIndex, NewIndex: Integer);
returns pointer to last item or nil if no such item exists
procedure Remove(Index: Integer);
Moves the item at CurIndex to NewIndex.
procedure RemoveAll;
Removes the item from the container without destroying it even if
OwnesItems is true.
procedure RemoveItem(Item: Pointer);
Removes all items by iterating over container and calling Remove
procedure Sort;
Stores properties to S.
procedure Store(S: TFilter);
Removes Item by calling Find and Remove, does not destroy the item
function ValidIndex(Index: Integer): Boolean;
Calls quicksort if nessecary
procedure Changed;
function CheckNewKey(CurKey, NewKey: Pointer): Boolean;
Called whenever the list is changed.
function Compare(Key1, Key2: Pointer): Integer;
Could be called by items in a duplicate restricted list in order to
validate a change of their key.
procedure FreeDataStructure;
Called whenever an owned item has to be disposed of.
procedure FreeDuplicate(Item: Pointer);
Called form Destroy ONLY.
procedure FreeItem(Item: Pointer);
Returns 0 if Key1 = Key2.
function Get(Index: Integer): Pointer;
Called if an attempt was made to insert a duplicate item, in dupDestroy
mode.
function GetCount: Integer;
Should give acces to indexed property Items
function GetItem(S: TFilter): Pointer;
Should returns number of items in container
function GetString(Index: Integer): String;
Used to retrieve stored items from S.
function KeyOf(Item: Pointer): Pointer;
Should give acces to string representation of Items[Index], this
could e.
procedure ListInsert(Index: Integer; Item: Pointer);
Returns Key for Comparison.
procedure ListPut(Index: Integer; Item: Pointer);
Performs actual insertion in container called by Add and Insert after
duplicates and sorting order have been checked
procedure ListRemove(Index: Integer);
Should put Item at Index.
procedure Put(Index: Integer; Item: Pointer);
Should remove item from container without destroying it.
procedure PutItem(Item: Pointer; S: TFilter);
Gives acces to indexed property Items.
procedure SetOwnesItems(Value: Boolean);
Used to store items to stream.
procedure SetUpdateState(Updating: Boolean);
Simply sets FOwnesItems to Value
procedure StyleChanged;
Calls Changed if Updating is False
function CheckDuplicates(Item: Pointer): Pointer;
procedure DeleteDuplicates;
This items being removed might have caused related items to be removed.
procedure QuickSort(L, R: Integer);
procedure SetCanSort(Value: Boolean);
procedure SetDuplicates(Value: TContainerDuplicates);
procedure SetSorted(Value: Boolean);
property Count : Integer
Returns True if Index in range of [0.
property Duplicates : TContainerDuplicates
returns number of items
property Items : Pointer
Controls duplicates behavior
property OwnesItems : Boolean
Dispatched each time the list style (sorted etc) changes
property Sorted : Boolean
Controls ownership of items in list.
property Strings : String
Controls the sorting behavior.
property CanSort : Boolean
Calls FOnStyleChanged if it is assigned
event OnChange : TNotifyEvent
Items in containr , default property
event OnStyleChange : TNotifyEvent
Dispatched each time the list container changes
FCanSort : Boolean;
FDuplicates : TContainerDuplicates;
FOnChange : TNotifyEvent;
FOnStyleChange : TNotifyEvent;
FOwnesItems : Boolean;
FSorted : Boolean;
FUpdateCount : Integer;
constructor Load(S: TFilter);
Stores wheter container is able to sort or not. To be set by Create
function Add(Item: Pointer): Integer;
Sets FOnChange to nil, preventing change message's to
be send during destruction, then calls FreeDataStructire and inherited Destroy
procedure Assign(Container: TContainer);
Checkes for duplicates and sorting order, then calls ListInsert to
insert item at correct position. Add returns the position at which the
item was added or -1 if it was not added at all
procedure BeginUpdate;
List is cleared. Adds all items in Container by repeatedly calling Add.
If Container = nil, list is cleared anyway
procedure Clear;
Increments UpdateCount and calls SetupdateState(True). Locking
mechanism. Always lock and unlock updates with pairs of BeginUpdate and
EndUpdate method calls
procedure Delete(Index: Integer);
Clears all items in container. Disposes of items if OwnedItems is True.
Clear is identical to 'DeleteAll'
procedure DeleteItem(Item: Pointer);
Deletes item at Index from container, calls FreeItem if OwnesItem is
True
not sorted
destructor Destroy;
Loads properties from S and then reads items calling GetItem. Add is
used to add items to container. Note: Descendants should therefore make
sure that the data structure in which items are stored is initialised
before inherited load is called, See TCollection.Load. Inherited Load
should ALWAYS be called before any loading from s is done however.
procedure EndUpdate;
Exchages items at Index1 and Index2. Safe when container is Sorted.
procedure Exchange(Index1, Index2: Integer);
Deletes item from container, uses Find to locate it, then calls Delete
function Find(Item: Pointer; var Index: Integer): Boolean;
returns pointer to first item or nil if no such item exists
function FindKey(Key: Pointer; var Index: Integer): Boolean;
Returns FindKey(KeyOf(Item)
function First: Pointer;
Decrements the UpdateCounter. Update locking mechanism.
If EndUpdate hits UpdateCount = 0, SetUpdateState(False) is called
function IndexOf(Item: Pointer): Integer;
Returns True if Item is found. Index then contains the index at which
Key was found. If False is returned Index containes the value at which
Key would be inserted
function Insert(Index: Integer; Item: Pointer): Integer;
Calls Find and returns index of Item, or -1 if it was not found
function Last: Pointer;
Checkes for sorting order and duplicates, then inserts item calling
ListInsert. Note: if Sorted is True, calling Insert has the same result
as calling Add. Insert always returns the position at which the item was
inserted or -1 if it was not inserted at all
procedure Move(CurIndex, NewIndex: Integer);
returns pointer to last item or nil if no such item exists
procedure Remove(Index: Integer);
Moves the item at CurIndex to NewIndex. Implemented with Remove and
Insert methods. Also safe for sorted containers in which case nothing
will happen (except when duplicates are accepted in which case the
order of the duplicate items might be changed
procedure RemoveAll;
Removes the item from the container without destroying it even if
OwnesItems is true. Implemented as calling ListRemove.
procedure RemoveItem(Item: Pointer);
Removes all items by iterating over container and calling Remove
procedure Sort;
Stores properties to S. Then stores each item to S calling PutItem
procedure Store(S: TFilter);
Removes Item by calling Find and Remove, does not destroy the item
function ValidIndex(Index: Integer): Boolean;
Calls quicksort if nessecary
procedure Changed;
function CheckNewKey(CurKey, NewKey: Pointer): Boolean;
Called whenever the list is changed. Calls FOnChanged if it is assigned
Change mechanism is locked when FUpdateCount > 0. Note: Changed does NOT
check for changes in the contents of the list. Changes in items should
be reflected by replacing them in the Container using the Put method.
This will also take care of correct sorting if a key field was changed
function Compare(Key1, Key2: Pointer): Integer;
Could be called by items in a duplicate restricted list in order to
validate a change of their key.
procedure FreeDataStructure;
Called whenever an owned item has to be disposed of. Assumes Item to be
a TObject descendnat and calls it's Free method
procedure FreeDuplicate(Item: Pointer);
Called form Destroy ONLY. Calls Clear if FOwnesItems is True else RemoveAll.
Descendants should free their data structure and also free their items
if FOwnesItems = True
procedure FreeItem(Item: Pointer);
Returns 0 if Key1 = Key2. Descendants should override this method
in order to create some sorting order if required
function Get(Index: Integer): Pointer;
Called if an attempt was made to insert a duplicate item, in dupDestroy
mode. Implemented as calling FreeItem. Descendants could generate an
appropriate error / warning
function GetCount: Integer;
Should give acces to indexed property Items
function GetItem(S: TFilter): Pointer;
Should returns number of items in container
function GetString(Index: Integer): String;
Used to retrieve stored items from S. Assumes TStreamable descendants
to be stored on S and calls S.Get to retrive it
function KeyOf(Item: Pointer): Pointer;
Should give acces to string representation of Items[Index], this
could e.g. be used in displaying the container in a TListBox object
procedure ListInsert(Index: Integer; Item: Pointer);
Returns Key for Comparison. Duplicate handling and sorting is based on
the KeyOf / Compare methods. Implemented as returning Item
procedure ListPut(Index: Integer; Item: Pointer);
Performs actual insertion in container called by Add and Insert after
duplicates and sorting order have been checked
procedure ListRemove(Index: Integer);
Should put Item at Index. All checking has been done
procedure Put(Index: Integer; Item: Pointer);
Should remove item from container without destroying it. Called by
Delete and Remove methods
procedure PutItem(Item: Pointer; S: TFilter);
Gives acces to indexed property Items. Calls Remove and Insert to
implement behaviour. Also safe for sorted containers
procedure SetOwnesItems(Value: Boolean);
Used to store items to stream. assumes Item to be a TStreamable
descendant and Put's it on S. Descendants could override this method in
order to store items different, e.g. when items are strings
procedure SetUpdateState(Updating: Boolean);
Simply sets FOwnesItems to Value
procedure StyleChanged;
Calls Changed if Updating is False
function CheckDuplicates(Item: Pointer): Pointer;
procedure DeleteDuplicates;
This items being removed might have caused related items to be removed.
Therefore do not count on Index here anymore, but instead refer to item
procedure QuickSort(L, R: Integer);
procedure SetCanSort(Value: Boolean);
procedure SetDuplicates(Value: TContainerDuplicates);
procedure SetSorted(Value: Boolean);
property Count : Integer
Returns True if Index in range of [0.. Count>
property Duplicates : TContainerDuplicates
returns number of items
property Items : Pointer
Controls duplicates behavior
property OwnesItems : Boolean
Dispatched each time the list style (sorted etc) changes
property Sorted : Boolean
Controls ownership of items in list. If set True FreeItem is called
whenever an item is Deleted from the list
property Strings : String
Controls the sorting behavior. If Sorted is set from False to True
the container will (re-) sort it's contents
property CanSort : Boolean
Calls FOnStyleChanged if it is assigned
event OnChange : TNotifyEvent
Items in containr , default property
event OnStyleChange : TNotifyEvent
Dispatched each time the list container changes
FCanSort : Boolean;
FDuplicates : TContainerDuplicates;
FOnChange : TNotifyEvent;
FOnStyleChange : TNotifyEvent;
FOwnesItems : Boolean;
FSorted : Boolean;
FUpdateCount : Integer;