home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / ClassDict.pas < prev    next >
Pascal/Delphi Source File  |  1997-05-02  |  5KB  |  281 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.     inherited Destroy;
  75. end;
  76.  
  77. function TClassDictElem.getKey: Variant;
  78. begin
  79.     getKey := key;
  80. end;
  81.  
  82.  
  83. procedure TClassDictElem.setObj(newObj: Pointer);
  84. begin
  85.     obj := newObj;
  86. end;
  87.  
  88.  
  89. procedure TClassDictElem.setKey(newKey: Variant);
  90. begin
  91.     key := newKey;
  92. end;
  93.  
  94.  
  95. function TClassDictElem.getObj: Pointer;
  96. begin
  97.     getObj := obj;
  98. end;
  99.  
  100.  
  101.  
  102. constructor TClassDict.Create;
  103.     // Start user section
  104.     // End user section
  105. begin
  106.     inherited Create;
  107.  
  108.     elemSet := TList.Create;
  109.     // Start user section
  110.     // End user section
  111. end;
  112.  
  113.  
  114. destructor TClassDict.Destroy;
  115.     // Start user section
  116.     // End user section
  117. begin
  118.     // Start user section
  119.     // End user section
  120.     elemSet.Destroy;
  121.     inherited Destroy;
  122. end;
  123.  
  124.  
  125. procedure TClassDict.Remove(obj: Pointer);
  126. var
  127.     tmpElem: TClassDictElem;
  128.     Index: integer;
  129.     NrOfElems: integer;
  130.         Found: boolean;
  131.  
  132. begin
  133.     NrOfElems := elemSet.Count;
  134.     Index := 0;
  135.     Found := False;
  136.     while (Index <> NrOfElems) and (not(Found)) do
  137.     begin
  138.         tmpElem := elemSet.Items[Index];
  139.         if tmpElem.getObj() = obj then
  140.         begin
  141.             removeElem(tmpElem);
  142.             tmpElem.Destroy();
  143.             Found := True;
  144.         end;
  145.                 inc(Index);
  146.     end;
  147. end;
  148.  
  149.  
  150. function TClassDict.Count: Integer;
  151. begin
  152.     Count := elemSet.Count;
  153. end;
  154.  
  155.  
  156. procedure TClassDict.RemoveUsingKey(key: Variant);
  157. var
  158.     tmpElem: TClassDictElem;
  159.     Index: integer;
  160.     NrOfElems: integer;
  161.     Found: boolean;
  162.  
  163. begin
  164.     NrOfElems := elemSet.Count;
  165.     Index := 0;
  166.         Found := False;
  167.     while (Index <> NrOfElems) and (not(Found)) do
  168.     begin
  169.         tmpElem := elemSet.Items[Index];
  170.         if (tmpElem.getKey() = key) then
  171.         begin
  172.             removeElem(tmpElem);
  173.             tmpElem.Destroy();
  174.             Found := True;
  175.         end;
  176.                 inc(Index);
  177.     end;
  178. end;
  179.  
  180.  
  181. function TClassDict.FirstKey: Variant;
  182. var
  183.     tmpElem: TClassDictElem;
  184.  
  185. begin
  186.     tmpElem := elemSet.First();
  187.     FirstKey := tmpElem.getKey();
  188. end;
  189.  
  190.  
  191. function TClassDict.Last: Pointer;
  192. var
  193.     tmpElem: TClassDictElem;
  194.  
  195. begin
  196.     tmpElem := elemSet.Last();
  197.     Last := tmpElem.getObj();
  198. end;
  199.  
  200.  
  201. function TClassDict.Item(key: Variant): Pointer;
  202. var
  203.     tmpElem: TClassDictElem;
  204.     Index: integer;
  205.     NrOfElems: integer;
  206.     Found: boolean;
  207.  
  208. begin
  209.     NrOfElems := elemSet.Count;
  210.     Index := 0;
  211.     Found := False;
  212.     while (Index <> NrOfElems) and (not(Found)) do
  213.     begin
  214.         tmpElem := elemSet.Items[Index];
  215.         if (tmpElem.getKey() = key) then
  216.         begin
  217.             Item := tmpElem.getObj();
  218.             Found := True;
  219.         end;
  220.                 inc(Index);
  221.     end;
  222.     if not(Found) then
  223.            Item := NIL;
  224. end;
  225.  
  226.  
  227. procedure TClassDict.Add(key: Variant; obj: Pointer);
  228. var
  229.     tmpElem: TClassDictElem;
  230.  
  231. begin
  232.     tmpElem := TClassDictElem.Create;
  233.     tmpElem.setKey(key);
  234.     tmpElem.setObj(obj);
  235.     addElem(tmpElem);
  236. end;
  237.  
  238.  
  239. function TClassDict.First: Pointer;
  240. var
  241.     tmpElem: TClassDictElem;
  242.  
  243. begin
  244.     tmpElem := elemSet.First;
  245.     First := tmpElem.getObj;
  246. end;
  247.  
  248.  
  249. function TClassDict.LastKey: Variant;
  250. var
  251.     tmpElem: TClassDictElem;
  252.  
  253. begin
  254.     tmpElem := elemSet.Last;
  255.     LastKey := tmpElem.getKey;
  256. end;
  257.  
  258.  
  259. procedure TClassDict.addElem(newTClassDictElem: TClassDictElem);
  260. begin
  261.     if (elemSet.IndexOf(newTClassDictElem) = -1) then
  262.     begin
  263.         elemSet.Add(newTClassDictElem);
  264.     end;
  265. end;
  266.  
  267.  
  268. function TClassDict.getElem: TList;
  269. begin
  270.     getElem := elemSet;
  271. end;
  272.  
  273.  
  274. procedure TClassDict.removeElem(oldTClassDictElem: TClassDictElem);
  275. begin
  276.     elemSet.Remove(oldTClassDictElem);
  277. end;
  278.  
  279.  
  280. end.
  281.