Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.80 KB | None | 0 0
  1. unit UMap;
  2.  
  3. interface
  4.  
  5. uses
  6.   UList;
  7.  
  8. type
  9.   TMap<T: class> = class
  10.   private type
  11.     TBlock = class
  12.     public
  13.       Key: Integer;
  14.       Value: T;
  15.       constructor Create(Key: Integer; Value: T);
  16.     end;
  17.  
  18.     TBlockList = TList<TBlock>;
  19.  
  20.   private
  21.     Map: array of TBlockList;
  22.  
  23.     function Hash(Key: Integer): Integer;
  24.   public
  25.     constructor Create(Size: Integer);
  26.     procedure Add(Key: Integer; Value: T);
  27.     function Get(Key: Integer): T;
  28.     procedure Remove(Key: Integer);
  29.   end;
  30.  
  31. implementation
  32.  
  33. { TMap<K, V> }
  34.  
  35. function TMap<T>.Hash(Key: Integer): Integer;
  36. begin
  37.   Result := Key;
  38. end;
  39.  
  40. procedure TMap<T>.Remove(Key: Integer);
  41. var
  42.   Iterator: TBlockList.TIterator;
  43.   Index: Integer;
  44.   Temp: TBlock;
  45. begin
  46.   Index := Hash(Key) mod Length(Map);
  47.   Iterator := Map[Index].GetIterator;
  48.   while Iterator.HasNext do
  49.   begin
  50.     Temp := Iterator.Next;
  51.     if Temp.Key = Key then
  52.       Map[Index].Remove(Temp);
  53.   end;
  54. end;
  55.  
  56. procedure TMap<T>.Add(Key: Integer; Value: T);
  57. var
  58.   Index: Integer;
  59. begin
  60.   Index := Hash(Key) mod Length(Map);
  61.   Map[Index].Append(TBlock.Create(Key, Value));
  62. end;
  63.  
  64. constructor TMap<T>.Create(Size: Integer);
  65. var
  66.   I: Integer;
  67. begin
  68.   SetLength(Map, Size);
  69.   for I := Low(Map) to High(Map) do
  70.     Map[I] := TList<TBlock>.Create;
  71. end;
  72.  
  73. function TMap<T>.Get(Key: Integer): T;
  74. var
  75.   Iterator: TBlockList.TIterator;
  76.   Index: Integer;
  77.   Temp: TBlock;
  78. begin
  79.   Result := Nil;
  80.   Index := Hash(Key) mod Length(Map);
  81.   Iterator := Map[Index].GetIterator;
  82.   while Iterator.HasNext do
  83.   begin
  84.     Temp := Iterator.Next;
  85.     if Temp.Key = Key then
  86.       Result := Temp.Value;
  87.   end;
  88. end;
  89.  
  90. { TMap<K, V>.TBlock }
  91.  
  92. constructor TMap<T>.TBlock.Create(Key: Integer; Value: T);
  93. begin
  94.   Self.Key := Key;
  95.   Self.Value := Value;
  96. end;
  97.  
  98. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement