mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-29 04:26:12 +02:00

Two small changes were done: * Generics.Defaults.pas does not require the Contnrs unit (it wasn't used anyway and thus the units can be added as rtl-generics instead of fcl-generics) * the example files were changed to lowercase filenames git-svn-id: trunk@34229 -
56 lines
1.8 KiB
ObjectPascal
56 lines
1.8 KiB
ObjectPascal
// 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.
|
|
|