git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@16 c37d764d-f447-7644-a108-883140d013fb
443 lines
13 KiB
ObjectPascal
443 lines
13 KiB
ObjectPascal
unit HashingExampleMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF WIN32}
|
|
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
QForms, QControls, QStdCtrls,
|
|
{$ENDIF}
|
|
SysUtils, Classes;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
btnIntfIntfHashMap: TButton;
|
|
btnIntfHashSet: TButton;
|
|
btnHashMap: TButton;
|
|
btnHashSet: TButton;
|
|
btnAnsiStrIntfHashMap: TButton;
|
|
btnIntfArraySet: TButton;
|
|
btnArraySet: TButton;
|
|
btnAnsiStrAnsiStrHashMap: TButton;
|
|
btnAnsiStrHashMap: TButton;
|
|
btnAnsiStrHashSet: TButton;
|
|
btnAnsiStrArraySet: TButton;
|
|
memResult: TListBox;
|
|
btnWideStrIntfHashMap: TButton;
|
|
btnWideStrWideStrHashMap: TButton;
|
|
btnWideStrHashSet: TButton;
|
|
btnWideStrArraySet: TButton;
|
|
btnWideStrHashMap: TButton;
|
|
procedure btnIntfIntfHashMapClick(Sender: TObject);
|
|
procedure btnAnsiStrIntfHashMapClick(Sender: TObject);
|
|
procedure btnWideStrIntfHashMapClick(Sender: TObject);
|
|
procedure btnHashMapClick(Sender: TObject);
|
|
procedure btnIntfHashSetClick(Sender: TObject);
|
|
procedure btnHashSetClick(Sender: TObject);
|
|
procedure btnIntfArraySetClick(Sender: TObject);
|
|
procedure btnArraySetClick(Sender: TObject);
|
|
procedure btnAnsiStrAnsiStrHashMapClick(Sender: TObject);
|
|
procedure btnWideStrWideStrHashMapClick(Sender: TObject);
|
|
procedure btnAnsiStrHashMapClick(Sender: TObject);
|
|
procedure btnWideStrHashMapClick(Sender: TObject);
|
|
procedure btnAnsiStrHashSetClick(Sender: TObject);
|
|
procedure btnWideStrHashSetClick(Sender: TObject);
|
|
procedure btnAnsiStrArraySetClick(Sender: TObject);
|
|
procedure btnWideStrArraySetClick(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
IIntfMyObject = interface
|
|
['{B2CB604F-4F5F-44D8-A86F-6138CD329B42}']
|
|
function GetInt: Integer;
|
|
function GetStr: string;
|
|
procedure SetInt(Value: Integer);
|
|
procedure SetStr(const Value: string);
|
|
property Int: Integer read GetInt write SetInt;
|
|
property Str: string read GetStr write SetStr;
|
|
end;
|
|
|
|
TIntfMyObject = class(TInterfacedObject, IIntfMyObject)
|
|
private
|
|
FInt: Integer;
|
|
FStr: string;
|
|
protected
|
|
{ IIntfMyObject }
|
|
function GetInt: Integer;
|
|
function GetStr: string;
|
|
procedure SetInt(Value: Integer);
|
|
procedure SetStr(const Value: string);
|
|
end;
|
|
|
|
TMyObject = class(TObject)
|
|
private
|
|
FInt: Integer;
|
|
FStr: string;
|
|
public
|
|
property Int: Integer read FInt write FInt;
|
|
property Str: string read FStr write FStr;
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses JclContainerIntf, JclHashMaps, JclHashSets, JclArraySets;
|
|
|
|
{ TIntfMyObject }
|
|
|
|
function TIntfMyObject.GetInt: Integer;
|
|
begin
|
|
Result := FInt;
|
|
end;
|
|
|
|
function TIntfMyObject.GetStr: string;
|
|
begin
|
|
Result := FStr;
|
|
end;
|
|
|
|
procedure TIntfMyObject.SetInt(Value: Integer);
|
|
begin
|
|
FInt := Value;
|
|
end;
|
|
|
|
procedure TIntfMyObject.SetStr(const Value: string);
|
|
begin
|
|
FStr := Value;
|
|
end;
|
|
|
|
procedure TMainForm.btnIntfIntfHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclIntfIntfMap;
|
|
MyObject: IIntfMyObject;
|
|
KeyObject: TInterfacedObject;
|
|
It: IJclIntfIterator;
|
|
begin
|
|
Map := TJclIntfIntfHashMap.Create(DefaultContainerCapacity);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
KeyObject := TInterfacedObject.Create;
|
|
Map.PutValue(KeyObject, MyObject);
|
|
MyObject := IIntfMyObject(Map.GetValue(KeyObject));
|
|
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
|
|
|
It := Map.Values.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(IIntfMyObject(It.Next).Str);
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnAnsiStrIntfHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclAnsiStrIntfMap;
|
|
MyObject: IIntfMyObject;
|
|
begin
|
|
Map := TJclAnsiStrIntfHashMap.Create(DefaultContainerCapacity);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
Map.PutValue('MyKey', MyObject);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 43;
|
|
MyObject.Str := 'AnotherString';
|
|
Map.PutValue('MyKey2', MyObject);
|
|
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
|
|
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnWideStrIntfHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclWideStrIntfMap;
|
|
MyObject: IIntfMyObject;
|
|
begin
|
|
Map := TJclWideStrIntfHashMap.Create(DefaultContainerCapacity);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
Map.PutValue('MyKey', MyObject);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 43;
|
|
MyObject.Str := 'AnotherString';
|
|
Map.PutValue('MyKey2', MyObject);
|
|
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
|
|
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclMap;
|
|
MyObject: TMyObject;
|
|
KeyObject: TObject;
|
|
It: IJclIterator;
|
|
begin
|
|
Map := TJclHashMap.Create(DefaultContainerCapacity, False, False);
|
|
MyObject := TMyObject.Create;
|
|
KeyObject := TObject.Create;
|
|
try
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
Map.PutValue(KeyObject, MyObject);
|
|
MyObject := TMyObject(Map.GetValue(KeyObject));
|
|
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
|
It := Map.Values.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(TMyObject(It.Next).Str);
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
finally
|
|
MyObject.Free;
|
|
KeyObject.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.btnIntfHashSetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclIntfSet;
|
|
MyObject: IIntfMyObject;
|
|
It: IJclIntfIterator;
|
|
begin
|
|
MySet := TJclIntfHashSet.Create(DefaultContainerCapacity);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
MySet.Add(MyObject);
|
|
MySet.Add(MyObject);
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(IIntfMyObject(It.Next).Str);
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnHashSetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclSet;
|
|
MyObject: TMyObject;
|
|
It: IJclIterator;
|
|
begin
|
|
MySet := TJclHashSet.Create(DefaultContainerCapacity, False);
|
|
MyObject := TMyObject.Create;
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
MySet.Add(MyObject);
|
|
MySet.Add(MyObject);
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(TMyObject(It.Next).Str);
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnIntfArraySetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclIntfSet;
|
|
MyObject: IIntfMyObject;
|
|
It: IJclIntfIterator;
|
|
begin
|
|
MySet := TJclIntfArraySet.Create(DefaultContainerCapacity);
|
|
MyObject := TIntfMyObject.Create;
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
MySet.Add(MyObject);
|
|
MySet.Add(MyObject);
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(IIntfMyObject(It.Next).Str);
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnArraySetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclSet;
|
|
MyObject: TMyObject;
|
|
It: IJclIterator;
|
|
begin
|
|
MySet := TJclArraySet.Create(DefaultContainerCapacity, False);
|
|
MyObject := TMyObject.Create;
|
|
try
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
MySet.Add(MyObject);
|
|
MySet.Add(MyObject);
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(TMyObject(It.Next).Str);
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
finally
|
|
MyObject.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.btnAnsiStrAnsiStrHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclAnsiStrAnsiStrMap;
|
|
It: IJclAnsiStrIterator;
|
|
begin
|
|
Map := TJclAnsiStrAnsiStrHashMap.Create(DefaultContainerCapacity);
|
|
Map.PutValue('MyKey1', 'MyString1');
|
|
Map.PutValue('MyKey2', 'MyString2');
|
|
Map.PutValue('MyKey3', 'MyString3');
|
|
It := Map.KeySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(string(It.Next));
|
|
It := Map.Values.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(string(It.Next));
|
|
Map.PutValue('MyKey2', 'AnotherString2');
|
|
memResult.Items.Add(string(Map.GetValue('MyKey2')));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnWideStrWideStrHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclWideStrWideStrMap;
|
|
It: IJclWideStrIterator;
|
|
begin
|
|
Map := TJclWideStrWideStrHashMap.Create(DefaultContainerCapacity);
|
|
Map.PutValue('MyKey1', 'MyString1');
|
|
Map.PutValue('MyKey2', 'MyString2');
|
|
Map.PutValue('MyKey3', 'MyString3');
|
|
It := Map.KeySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(It.Next);
|
|
It := Map.Values.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(It.Next);
|
|
Map.PutValue('MyKey2', 'AnotherString2');
|
|
memResult.Items.Add(Map.GetValue('MyKey2'));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnAnsiStrHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclAnsiStrMap;
|
|
MyObject: TMyObject;
|
|
It: IJclAnsiStrIterator;
|
|
begin
|
|
Map := TJclAnsiStrHashMap.Create(DefaultContainerCapacity, False);
|
|
MyObject := TMyObject.Create;
|
|
try
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
|
|
Map.PutValue('MyKey1', MyObject);
|
|
MyObject := TMyObject(Map.GetValue('MyKey1'));
|
|
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
|
It := Map.KeySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(string(It.Next));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
finally
|
|
MyObject.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.btnWideStrHashMapClick(Sender: TObject);
|
|
var
|
|
Map: IJclWideStrMap;
|
|
MyObject: TMyObject;
|
|
It: IJclWideStrIterator;
|
|
begin
|
|
Map := TJclWideStrHashMap.Create(DefaultContainerCapacity, False);
|
|
MyObject := TMyObject.Create;
|
|
try
|
|
MyObject.Int := 42;
|
|
MyObject.Str := 'MyString';
|
|
|
|
Map.PutValue('MyKey1', MyObject);
|
|
MyObject := TMyObject(Map.GetValue('MyKey1'));
|
|
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
|
|
It := Map.KeySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(It.Next);
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
finally
|
|
MyObject.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.btnAnsiStrHashSetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclAnsiStrSet;
|
|
It: IJclAnsiStrIterator;
|
|
begin
|
|
MySet := TJclAnsiStrHashSet.Create(DefaultContainerCapacity);
|
|
MySet.Add('MyString');
|
|
MySet.Add('MyString');
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(string(It.Next));
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnWideStrHashSetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclWideStrSet;
|
|
It: IJclWideStrIterator;
|
|
begin
|
|
MySet := TJclWideStrHashSet.Create(DefaultContainerCapacity);
|
|
MySet.Add('MyString');
|
|
MySet.Add('MyString');
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(It.Next);
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnAnsiStrArraySetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclAnsiStrSet;
|
|
It: IJclAnsiStrIterator;
|
|
I: Integer;
|
|
begin
|
|
MySet := TJclAnsiStrArraySet.Create(DefaultContainerCapacity);
|
|
for I := 1 to 8 do
|
|
MySet.Add(AnsiString(IntToStr(I)));
|
|
for I := 8 downto 1 do
|
|
MySet.Add(AnsiString(IntToStr(I)));
|
|
MySet.Add('MyString');
|
|
MySet.Add('MyString');
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(string(It.Next));
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
procedure TMainForm.btnWideStrArraySetClick(Sender: TObject);
|
|
var
|
|
MySet: IJclWideStrSet;
|
|
It: IJclWideStrIterator;
|
|
I: Integer;
|
|
begin
|
|
MySet := TJclWideStrArraySet.Create(DefaultContainerCapacity);
|
|
for I := 1 to 8 do
|
|
MySet.Add(IntToStr(I));
|
|
for I := 8 downto 1 do
|
|
MySet.Add(IntToStr(I));
|
|
MySet.Add('MyString');
|
|
MySet.Add('MyString');
|
|
It := MySet.First;
|
|
while It.HasNext do
|
|
memResult.Items.Add(It.Next);
|
|
memResult.Items.Add(IntToStr(MySet.Size));
|
|
memResult.Items.Add('--------------------------------------------------------');
|
|
end;
|
|
|
|
end.
|
|
|