home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / delphi / tstrclas.lzh / CONTAINR.INT < prev    next >
Text File  |  1995-11-11  |  10KB  |  241 lines

  1. UNIT Containr;
  2.  
  3. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  4.  
  5. { Version 1.4 }
  6.  
  7. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  8.  
  9. INTERFACE
  10.  
  11. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  12.  
  13. USES
  14.  
  15.   Classes,
  16.   SysUtils,
  17.   WinTypes,
  18.   WinProcs;
  19.  
  20. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  21.  
  22. CONST
  23.  
  24.    ce_OK                  = 0;   { status OK }
  25.    ce_IdxLtZero           = 1;   { Index parameter value less than zero }
  26.    ce_IdxGtCount          = 2;   { Index parameter value greater than count }
  27.    ce_Empty               = 3;   { trying to put or del an item in
  28.                                     an empty container }
  29.    ce_NewCapacLTCount     = 4;   { new capacity less than count }
  30.    ce_GlobalAllocFailed   = 5;   { global alloc failed }
  31.    ce_GlobalReAllocFailed = 6;   { globalrealloc failed }
  32.    ce_GlobalLockFailed    = 7;   { globallock failed }
  33.    ce_IdxExceedsCapac     = 8;   { idx exceeds pre-defined capacity }
  34.    ce_AddFailedOnSort     = 9;
  35.    ce_PutOnSort           = 10;
  36.    ce_DuplicateItem       = 11;
  37.    ce_InvalidItemRange    = 12;
  38.    ce_InvalidNewCount     = 13;
  39.    ce_SortInPlace         = 14;
  40.    ce_SearchError         = 15;
  41.    ce_Last                = ce_SearchError;
  42.  
  43. TYPE
  44.  
  45.    TCompareFunc = FUNCTION(VAR Ptr1,Ptr2) : INTEGER;
  46.  
  47.    PBigByteArray = ^TBigByteArray;
  48.    TBigByteArray = array[0..65519] of BYTE;
  49.  
  50.    TContainerSortType = (sortNone,sortAscending,sortDescending);
  51.  
  52.    TBaseContainer = CLASS(TObject)
  53.       PRIVATE
  54.          FLocal          : PBigByteArray;   { for mem < 64K }
  55.          FMemH           : THandle;      { for mem > 64K }
  56.          FAddress        : Pointer;      { for mem > 64K }
  57.          FCount          : LONGINT;      { number of items in container }
  58.          FCapacity       : LONGINT;      { current capacity }
  59.          FDelta          : LONGINT;      { capacity increase }
  60.          FGrowAsRequired : BOOLEAN;      { allow capacity to grow }
  61.          FSort           : TContainerSortType;    { sorting? }
  62.          FDuplicates     : TDuplicates;
  63.          FItemSize       : WORD;         { size of item in list mem block }
  64.          FCompareFunc    : TCompareFunc;
  65.          { private methods }
  66.          FUNCTION AddItem(VAR Item) : LONGINT;
  67.          PROCEDURE FillItem(Idx : LONGINT; B : BYTE);
  68.          FUNCTION FindItem(Idx : LONGINT; VAR Item) : BOOLEAN;
  69.          FUNCTION GetItemAddress(Idx : LONGINT) : POINTER;
  70.          FUNCTION ItemIsNull(Idx : LONGINT) : BOOLEAN;
  71.          PROCEDURE MoveItem(StartIdx,TargetIdx,TotalIdx : LONGINT);
  72.          FUNCTION MemPtr(Idx: LONGINT) : POINTER;
  73.          PROCEDURE PutItem(Idx : LONGINT; VAR Item);
  74.          PROCEDURE QuickSort(L, R: LONGINT);
  75.          PROCEDURE ReportError(ErrorId : INTEGER; Idx : LONGINT);
  76.          PROCEDURE SetCapacity(NewCapacity: LONGINT);
  77.          PROCEDURE SetCount(NewCount : LONGINT);
  78.          PROCEDURE SetSort(NewSortType : TContainerSortType);
  79.          FUNCTION ValidIdx(Idx: LONGINT) : BOOLEAN;
  80.       PROTECTED
  81.          FUNCTION Compare(VAR Ptr1,Ptr2) : INTEGER; VIRTUAL;
  82.          PROCEDURE FreeItem(Item : POINTER); VIRTUAL;
  83.          PROCEDURE Grow;
  84.          PROCEDURE GrowBy(ExtraCapacity : LONGINT);
  85.          PROCEDURE GrowTo(NewCapacity : LONGINT);
  86.          FUNCTION InsertItem(Idx : LONGINT; VAR Item) : LONGINT;
  87.          FUNCTION Search(VAR AnItem; VAR Idx : LONGINT) : BOOLEAN; VIRTUAL;
  88.          PROCEDURE SortInPlace; VIRTUAL;
  89.       PUBLIC
  90.          { constructors }
  91.          CONSTRUCTOR Create; VIRTUAL;
  92.          { destructors }
  93.          DESTRUCTOR Destroy; OVERRIDE;
  94.          { methods }
  95.          PROCEDURE Clear; VIRTUAL;
  96.          PROCEDURE Delete(Idx : LONGINT); VIRTUAL;
  97.          PROCEDURE DeleteAll; VIRTUAL;
  98.          PROCEDURE DeleteBlock(SIdx,EIdx : LONGINT);
  99.          PROCEDURE Exchange(Idx1,Idx2: LONGINT); VIRTUAL;
  100.          FUNCTION InsertBlock(Idx,Number : LONGINT) : LONGINT; VIRTUAL;
  101.          PROCEDURE Move(CurIdx, NewIdx: LONGINT); VIRTUAL;
  102.          PROCEDURE Pack; VIRTUAL;
  103.          PROCEDURE RemoveAll;
  104.          { properties }
  105.          PROPERTY Capacity: LONGINT READ FCapacity WRITE SetCapacity;
  106.          PROPERTY Count: LONGINT READ FCount;
  107.          PROPERTY Delta : LONGINT READ FDelta WRITE FDelta;
  108.          PROPERTY Duplicates : TDuplicates READ FDuplicates WRITE FDuplicates;
  109.          PROPERTY GrowAsRequired : BOOLEAN READ FGrowAsRequired WRITE FGrowAsRequired;
  110.          PROPERTY Sort : TContainerSortType READ FSort WRITE SetSort;
  111.          PROPERTY CompareFunc : TCompareFunc READ FCompareFunc WRITE FCompareFunc;
  112.    END;
  113.  
  114.    TObjectContainer = CLASS(TBaseContainer)
  115.       PRIVATE
  116.          FOwn        : BOOLEAN;      { own pointer/objects }
  117.          FUNCTION GetPtr(Idx : LONGINT) : POINTER;
  118.          PROCEDURE PutPtr(Idx : LONGINT; Item : POINTER);
  119.       PROTECTED
  120.          PROCEDURE FreeItem(Item : POINTER); OVERRIDE;
  121.       PUBLIC
  122.          { constructors }
  123.          CONSTRUCTOR Create; OVERRIDE;
  124.          { methods }
  125.          FUNCTION Add(Item: POINTER): LONGINT; VIRTUAL;
  126.          FUNCTION Append(Item : POINTER) : LONGINT; VIRTUAL;
  127.          FUNCTION First: POINTER; VIRTUAL;
  128.          FUNCTION FirstThat(Test: Pointer): Pointer;
  129.          FUNCTION FirstThatIdx(Test: Pointer): Pointer;
  130.          PROCEDURE ForEach(Action: Pointer);
  131.          PROCEDURE ForEachIdx(Action: Pointer);
  132.          FUNCTION Includes(Item : POINTER; VAR Idx : LONGINT) : BOOLEAN;
  133.          FUNCTION IndexOf(Item: POINTER): LONGINT; VIRTUAL;
  134.          FUNCTION Insert(Idx: LONGINT; Item: POINTER) : LONGINT; VIRTUAL;
  135.          FUNCTION Last: POINTER;
  136.          FUNCTION LastThat(Test: Pointer): Pointer;
  137.          FUNCTION LastThatIdx(Test: Pointer): Pointer;
  138.          FUNCTION Prepend(Item : POINTER) : LONGINT; VIRTUAL;
  139.          FUNCTION Remove(Item: POINTER): LONGINT; VIRTUAL;
  140.          { properties }
  141.          PROPERTY Items[Idx : LONGINT]: POINTER READ GetPtr WRITE PutPtr;
  142.          PROPERTY Own : BOOLEAN READ Fown WRITE FOwn;
  143.    END;
  144.  
  145.    TRecordContainer = CLASS(TObjectContainer)
  146.       PRIVATE
  147.          FRecordSize  : WORD;         { item record size }
  148.       PROTECTED
  149.          PROCEDURE FreeItem(Item : POINTER); OVERRIDE;
  150.       PUBLIC
  151.          { constructors }
  152.          CONSTRUCTOR Create(ARecSize : WORD);
  153.    END;
  154.  
  155.    TPCharContainer = CLASS(TObjectContainer)
  156.       PROTECTED
  157.          PROCEDURE FreeItem(Item : POINTER); OVERRIDE;
  158.    END;
  159.  
  160.    TIntegerContainer = CLASS(TBaseContainer)
  161.       PRIVATE
  162.          FUNCTION GetInteger(Idx : LONGINT) : INTEGER;
  163.          PROCEDURE PutInteger(Idx : LONGINT; N : INTEGER);
  164.       PROTECTED
  165.          FUNCTION Compare(VAR Ptr1,Ptr2) : INTEGER; OVERRIDE;
  166.       PUBLIC
  167.          { constructors }
  168.          CONSTRUCTOR Create;
  169.          { methods }
  170.          FUNCTION Add(Item: INTEGER): LONGINT; VIRTUAL;
  171.          FUNCTION Append(Item : INTEGER) : LONGINT; VIRTUAL;
  172.          FUNCTION First: INTEGER; VIRTUAL;
  173.          FUNCTION Includes(Item : INTEGER; VAR Idx : LONGINT) : BOOLEAN;
  174.          FUNCTION Insert(Idx: LONGINT; Item: INTEGER) : LONGINT; VIRTUAL;
  175.          FUNCTION Last: INTEGER;
  176.          FUNCTION Prepend(Item : INTEGER) : LONGINT; VIRTUAL;
  177.          FUNCTION Remove(Item: INTEGER): LONGINT; VIRTUAL;
  178.          { properties }
  179.          PROPERTY Items[Idx : LONGINT]: INTEGER READ GetInteger WRITE PutInteger;
  180.    END;
  181.  
  182.    TWordContainer = CLASS(TBaseContainer)
  183.       PRIVATE
  184.          FUNCTION GetWord(Idx : LONGINT) : WORD;
  185.          PROCEDURE PutWord(Idx : LONGINT; N : WORD);
  186.       PROTECTED
  187.          FUNCTION Compare(VAR Ptr1,Ptr2) : INTEGER; OVERRIDE;
  188.       PUBLIC
  189.          { constructors }
  190.          CONSTRUCTOR Create;
  191.          { methods }
  192.          FUNCTION Add(Item: WORD): LONGINT; VIRTUAL;
  193.          FUNCTION Append(Item : WORD) : LONGINT; VIRTUAL;
  194.          FUNCTION First: WORD; VIRTUAL;
  195.          FUNCTION Includes(Item : WORD; VAR Idx : LONGINT) : BOOLEAN;
  196.          FUNCTION Insert(Idx: LONGINT; Item: WORD) : LONGINT; VIRTUAL;
  197.          FUNCTION Last: WORD;
  198.          FUNCTION Prepend(Item : WORD) : LONGINT; VIRTUAL;
  199.          FUNCTION Remove(Item: WORD): LONGINT; VIRTUAL;
  200.          { properties }
  201.          PROPERTY Items[Idx : LONGINT]: WORD READ GetWord WRITE PutWord;
  202.    END;
  203.  
  204.    TLongIntContainer = CLASS(TBaseContainer)
  205.       PRIVATE
  206.          FUNCTION GetLongInt(Idx : LONGINT) : LONGINT;
  207.          PROCEDURE PutLongInt(Idx : LONGINT; N : LONGINT);
  208.       PROTECTED
  209.          FUNCTION Compare(VAR Ptr1,Ptr2) : INTEGER; OVERRIDE;
  210.       PUBLIC
  211.          { constructors }
  212.          CONSTRUCTOR Create;
  213.          { methods }
  214.          FUNCTION Add(Item: LONGINT): LONGINT; VIRTUAL;
  215.          FUNCTION Append(Item : LONGINT) : LONGINT; VIRTUAL;
  216.          FUNCTION First: LONGINT; VIRTUAL;
  217.          FUNCTION Includes(Item : LONGINT; VAR Idx : LONGINT) : BOOLEAN;
  218.          FUNCTION Insert(Idx: LONGINT; Item: LONGINT) : LONGINT; VIRTUAL;
  219.          FUNCTION Last: LONGINT;
  220.          FUNCTION Prepend(Item : LONGINT) : LONGINT; VIRTUAL;
  221.          FUNCTION Remove(Item: LONGINT): LONGINT; VIRTUAL;
  222.          { properties }
  223.          PROPERTY Items[Idx : LONGINT]: LONGINT READ GetLongInt WRITE PutLongInt;
  224.    END;
  225.  
  226.    TCustomTypeContainer = CLASS(TBaseContainer)
  227.       PUBLIC
  228.          { constructors }
  229.          CONSTRUCTOR Create(CustomTypeLen : WORD);
  230.          { methods }
  231.          FUNCTION Add(VAR Item): LONGINT; VIRTUAL;
  232.          FUNCTION Append(VAR Item) : LONGINT; VIRTUAL;
  233.          FUNCTION Insert(Idx: LONGINT; VAR Item) : LONGINT; VIRTUAL;
  234.          FUNCTION Prepend(VAR Item) : LONGINT; VIRTUAL;
  235.          FUNCTION Retrieve(Idx : LONGINT; VAR Item) : BOOLEAN;
  236.    END;
  237.  
  238.  
  239. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  240.  
  241.