contit.pp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. {$MODE OBJFPC}
  2. {$H+}
  3. {$C+}
  4. program test;
  5. uses
  6. contnrs,
  7. sysutils;
  8. const
  9. KEYS: array [0..5] of string = (
  10. 'a',
  11. 'b',
  12. 'c',
  13. 'd',
  14. 'e',
  15. 'f'
  16. );
  17. TERMINATE_KEY_ID = 2;
  18. procedure DataStaticIterator(Item: Pointer; const Key: string; var Continue: Boolean);
  19. begin
  20. Assert(Key = String(Item^));
  21. Continue := TRUE;
  22. end;
  23. procedure DataStaticIteratorTerminated(Item: Pointer; const Key: string; var Continue: Boolean);
  24. begin
  25. Continue := Key <> KEYS[TERMINATE_KEY_ID];
  26. end;
  27. procedure StringStaticIterator(Item: String; const Key: string; var Continue: Boolean);
  28. begin
  29. Assert(Key = Item);
  30. Continue := TRUE;
  31. end;
  32. procedure StringStaticIteratorTerminated(Item: String; const Key: string; var Continue: Boolean);
  33. begin
  34. Continue := Key <> KEYS[TERMINATE_KEY_ID];
  35. end;
  36. type
  37. TTestObject = class
  38. private
  39. FStr: string;
  40. public
  41. constructor Create(const S: string);
  42. property Str: string read FStr;
  43. end;
  44. constructor TTestObject.Create(const S: string);
  45. begin
  46. FStr := S;
  47. end;
  48. procedure ObjectStaticIterator(Item: TObject; const Key: string; var Continue: Boolean);
  49. begin
  50. Assert(Key = TTestObject(Item).Str);
  51. Continue := TRUE;
  52. end;
  53. procedure ObjectStaticIteratorTerminated(Item: TObject; const Key: string; var Continue: Boolean);
  54. begin
  55. Continue := Key <> KEYS[TERMINATE_KEY_ID];
  56. end;
  57. var
  58. i: integer;
  59. data_hash_table: TFPDataHashTable;
  60. last_data: pointer;
  61. string_hash_table: TFPStringHashTable;
  62. last_string: string;
  63. object_hash_table: TFPObjectHashTable;
  64. last_object: TTestObject;
  65. begin
  66. data_hash_table := TFPDataHashTable.Create;
  67. for i := 0 to High(KEYS) do
  68. data_hash_table.Add(KEYS[i], @KEYS[i]);
  69. last_data := data_hash_table.Iterate(@DataStaticIterator);
  70. Assert(last_data = NIL);
  71. last_data := data_hash_table.Iterate(@DataStaticIteratorTerminated);
  72. Assert(last_data = @KEYS[TERMINATE_KEY_ID]);
  73. data_hash_table.Free;
  74. string_hash_table := TFPStringHashTable.Create;
  75. for i := 0 to High(KEYS) do
  76. string_hash_table.Add(KEYS[i], KEYS[i]);
  77. last_string := string_hash_table.Iterate(@StringStaticIterator);
  78. Assert(last_string = '');
  79. last_string := string_hash_table.Iterate(@StringStaticIteratorTerminated);
  80. Assert(last_string = KEYS[TERMINATE_KEY_ID]);
  81. string_hash_table.Free;
  82. object_hash_table := TFPObjectHashTable.Create(TRUE);
  83. for i := 0 to High(KEYS) do
  84. object_hash_table.Add(KEYS[i], TTestObject.Create(KEYS[i]));
  85. last_object := TTestObject(object_hash_table.Iterate(@ObjectStaticIterator));
  86. Assert(last_object = NIL);
  87. last_object := TTestObject(object_hash_table.Iterate(@ObjectStaticIteratorTerminated));
  88. Assert(last_object.Str = KEYS[TERMINATE_KEY_ID]);
  89. object_hash_table.Free;
  90. WriteLn('All is OK');
  91. end.