Componentes.Terceros.jcl/official/1.104/examples/common/containers/hashing/HashingExampleMain.pas
2009-02-27 12:18:04 +00:00

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.