home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / ClassDict.pas < prev    next >
Pascal/Delphi Source File  |  1997-08-08  |  5KB  |  282 lines

  1. unit ClassDict;
  2.  
  3. interface
  4.  
  5. uses
  6.   // Start user include section
  7.   // End user include section
  8.   Classes;
  9.  
  10. type
  11.   TClassDictElem = class
  12.   private
  13.     // User defined attributes
  14.     obj: Pointer;
  15.     key: Variant;
  16.  
  17.   published
  18.     // User defined methods
  19.     constructor Create;
  20.     destructor Destroy; override;
  21.  
  22.     // Access methods
  23.     function getKey: Variant;
  24.     procedure setObj(newObj: Pointer);
  25.     procedure setKey(newKey: Variant);
  26.     function getObj: Pointer;
  27.   end;
  28.  
  29.  
  30.   TClassDict = class
  31.   private
  32.     // Association attributes
  33.     elemSet: TList;
  34.     published
  35.     // User defined methods
  36.     constructor Create;
  37.     destructor Destroy; override;
  38.     procedure Remove(obj: Pointer);
  39.     function Count: Integer;
  40.     procedure RemoveUsingKey(key: Variant);
  41.     function FirstKey: Variant;
  42.     function Last: Pointer;
  43.     function Item(key: Variant): Pointer;
  44.     procedure Add(key: Variant; obj: Pointer);
  45.     function First: Pointer;
  46.     function LastKey: Variant;
  47.  
  48.     // Access methods
  49.     procedure addElem(newTClassDictElem: TClassDictElem);
  50.     function getElem: TList;
  51.     procedure removeElem(oldTClassDictElem: TClassDictElem);
  52.   end;
  53.  
  54.  
  55. implementation
  56.  
  57. constructor TClassDictElem.Create;
  58.   // Start user section
  59.   // End user section
  60. begin
  61.   inherited Create;
  62.  
  63.   // Start user section
  64.   // End user section
  65. end;
  66.  
  67.  
  68. destructor TClassDictElem.Destroy;
  69.   // Start user section
  70.   // End user section
  71. begin
  72.   // Start user section
  73.   // End user section
  74.  
  75.   inherited Destroy;
  76. end;
  77.  
  78. function TClassDictElem.getKey: Variant;
  79. begin
  80.   getKey := key;
  81. end;
  82.  
  83.  
  84. procedure TClassDictElem.setObj(newObj: Pointer);
  85. begin
  86.   obj := newObj;
  87. end;
  88.  
  89.  
  90. procedure TClassDictElem.setKey(newKey: Variant);
  91. begin
  92.   key := newKey;
  93. end;
  94.  
  95.  
  96. function TClassDictElem.getObj: Pointer;
  97. begin
  98.   getObj := obj;
  99. end;
  100.  
  101.  
  102.  
  103. constructor TClassDict.Create;
  104.   // Start user section
  105.   // End user section
  106. begin
  107.   inherited Create;
  108.  
  109.   elemSet := TList.Create;
  110.   // Start user section
  111.   // End user section
  112. end;
  113.  
  114.  
  115. destructor TClassDict.Destroy;
  116.   // Start user section
  117.   // End user section
  118. begin
  119.   // Start user section
  120.   // End user section
  121.   elemSet.Destroy;
  122.  
  123.   inherited Free;
  124. end;
  125.  
  126.  
  127. procedure TClassDict.Remove(obj: Pointer);
  128. var
  129.   tmpElem: TClassDictElem;
  130.   Index: integer;
  131.   NrOfElems: integer;
  132.   Found: boolean;
  133.  
  134. begin
  135.   NrOfElems := elemSet.Count;
  136.   Index := 0;
  137.   Found := False;
  138.   while (Index <> NrOfElems) and (not(Found)) do
  139.   begin
  140.     tmpElem := elemSet.Items[Index];
  141.     if tmpElem.getObj() = obj then
  142.     begin
  143.       removeElem(tmpElem);
  144.       tmpElem.Destroy();
  145.       Found := True;
  146.     end;
  147.     inc(Index);
  148.   end;
  149. end;
  150.  
  151.  
  152. function TClassDict.Count: Integer;
  153. begin
  154.   Count := elemSet.Count;
  155. end;
  156.  
  157.  
  158. procedure TClassDict.RemoveUsingKey(key: Variant);
  159. var
  160.   tmpElem: TClassDictElem;
  161.   Index: integer;
  162.   NrOfElems: integer;
  163.   Found: boolean;
  164.  
  165. begin
  166.   NrOfElems := elemSet.Count;
  167.   Index := 0;
  168.   Found := False;
  169.   while (Index <> NrOfElems) and (not(Found)) do
  170.   begin
  171.     tmpElem := elemSet.Items[Index];
  172.     if (tmpElem.getKey() = key) then
  173.     begin
  174.       removeElem(tmpElem);
  175.       tmpElem.Destroy();
  176.       Found := True;
  177.     end;
  178.     inc(Index);
  179.   end;
  180. end;
  181.  
  182.  
  183. function TClassDict.FirstKey: Variant;
  184. var
  185.   tmpElem: TClassDictElem;
  186.  
  187. begin
  188.   tmpElem := elemSet.First();
  189.   FirstKey := tmpElem.getKey();
  190. end;
  191.  
  192.  
  193. function TClassDict.Last: Pointer;
  194. var
  195.   tmpElem: TClassDictElem;
  196.  
  197. begin
  198.   tmpElem := elemSet.Last();
  199.   Last := tmpElem.getObj();
  200. end;
  201.  
  202.  
  203. function TClassDict.Item(key: Variant): Pointer;
  204. var
  205.   tmpElem: TClassDictElem;
  206.   Index: integer;
  207.   NrOfElems: integer;
  208.   Found: boolean;
  209.  
  210. begin
  211.   NrOfElems := elemSet.Count;
  212.   Index := 0;
  213.   Found := False;
  214.   Item := NIL;
  215.   while (Index <> NrOfElems) and (not(Found)) do
  216.   begin
  217.     tmpElem := elemSet.Items[Index];
  218.     if (tmpElem.getKey() = key) then
  219.     begin
  220.       Item := tmpElem.getObj();
  221.       Found := True;
  222.     end;
  223.     inc(Index);
  224.   end;
  225. end;
  226.  
  227.  
  228. procedure TClassDict.Add(key: Variant; obj: Pointer);
  229. var
  230.   tmpElem: TClassDictElem;
  231.  
  232. begin
  233.   tmpElem := TClassDictElem.Create;
  234.   tmpElem.setKey(key);
  235.   tmpElem.setObj(obj);
  236.   addElem(tmpElem);
  237. end;
  238.  
  239.  
  240. function TClassDict.First: Pointer;
  241. var
  242.   tmpElem: TClassDictElem;
  243.  
  244. begin
  245.   tmpElem := elemSet.First;
  246.   First := tmpElem.getObj;
  247. end;
  248.  
  249.  
  250. function TClassDict.LastKey: Variant;
  251. var
  252.   tmpElem: TClassDictElem;
  253.  
  254. begin
  255.   tmpElem := elemSet.Last;
  256.   LastKey := tmpElem.getKey;
  257. end;
  258.  
  259.  
  260. procedure TClassDict.addElem(newTClassDictElem: TClassDictElem);
  261. begin
  262.   if (elemSet.IndexOf(newTClassDictElem) = -1) then
  263.   begin
  264.     elemSet.Add(newTClassDictElem);
  265.   end;
  266. end;
  267.  
  268.  
  269. function TClassDict.getElem: TList;
  270. begin
  271.   getElem := elemSet;
  272. end;
  273.  
  274.  
  275. procedure TClassDict.removeElem(oldTClassDictElem: TClassDictElem);
  276. begin
  277.   elemSet.Remove(oldTClassDictElem);
  278. end;
  279.  
  280.  
  281. end.
  282.