File: THashMapCaseInsensitive.lpr

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (55 lines) | stat: -rw-r--r-- 1,867 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Generic types for FreeSparta.com and FreePascal!
// by Maciej Izak (hnb), 2014

program THashMapCaseInsensitive;

{$MODE DELPHI}
{$APPTYPE CONSOLE}

uses
  Generics.Collections, Generics.Defaults;

var
  StringMap: THashMap<String, TEmptyRecord>;
  AnsiStringMap: THashMap<AnsiString, TEmptyRecord>;
  UnicodeStringMap: THashMap<UnicodeString, TEmptyRecord>;
  AdvancedHashMapWithBigLoadFactor: TCuckooD6<RawByteString, TEmptyRecord>;
  k: String;
begin
  WriteLn('Working with case insensitive THashMap');
  WriteLn;
  // example constructors for different string types
  StringMap := THashMap<String, TEmptyRecord>.Create(TIStringComparer.Ordinal);
  StringMap.Free;
  AnsiStringMap := THashMap<AnsiString, TEmptyRecord>.Create(TIAnsiStringComparer.Ordinal);
  AnsiStringMap.Free;
  UnicodeStringMap := THashMap<UnicodeString, TEmptyRecord>.Create(TIUnicodeStringComparer.Ordinal);
  UnicodeStringMap.Free;

  // standard TI*Comparer is dedicated for MAX_HASHLIST_COUNT = 4 and lower. For example DArrayCuckoo where D = 6
  // we need to create extra specialized TGIStringComparer type
  AdvancedHashMapWithBigLoadFactor := TCuckooD6<RawByteString, TEmptyRecord>.Create(
    TGIStringComparer<RawByteString, TDelphiSixfoldHashFactory>.Ordinal);
  AdvancedHashMapWithBigLoadFactor.Free;

  // ok lets start
  // another way to create case insensitive hash map
  StringMap := THashMap<String, TEmptyRecord>.Create(TGIStringComparer<String>.Ordinal);

  WriteLn('Add Cat and Dog');
  StringMap.Add('Cat', EmptyRecord);
  StringMap.Add('Dog', EmptyRecord);

  //
  WriteLn('Contains CAT = ', StringMap.ContainsKey('CAT'));
  WriteLn('Contains dOG = ', StringMap.ContainsKey('dOG'));
  WriteLn('Contains Fox = ', StringMap.ContainsKey('Fox'));

  WriteLn('Enumerate all keys :');
  for k in StringMap.Keys do
    WriteLn(' > ', k);

  ReadLn;
  StringMap.Free;
end.