mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-07 07:16:30 +02:00
lazutils: started new TStringToPointerTree
git-svn-id: trunk@34233 -
This commit is contained in:
parent
ce9ccb1092
commit
c9cb54bcab
@ -108,11 +108,10 @@ type
|
|||||||
FTree: TAVLTree;// tree of PStringMapItem
|
FTree: TAVLTree;// tree of PStringMapItem
|
||||||
FCaseSensitive: boolean;
|
FCaseSensitive: boolean;
|
||||||
function GetCompareItemsFunc: TListSortCompare;
|
function GetCompareItemsFunc: TListSortCompare;
|
||||||
function FindNode(const s: string): TAVLTreeNode;
|
|
||||||
protected
|
protected
|
||||||
procedure DisposeItem(p: Pointer); virtual;
|
procedure DisposeItem(p: PStringMapItem); virtual;
|
||||||
function ItemsAreEqual(p1, p2: Pointer): boolean; virtual;
|
function ItemsAreEqual(p1, p2: PStringMapItem): boolean; virtual;
|
||||||
procedure AssignItem(Src, Dest: Pointer); virtual;
|
function CreateCopy(Src: PStringMapItem): PStringMapItem; virtual;
|
||||||
public
|
public
|
||||||
constructor Create(TheCaseSensitive: boolean);
|
constructor Create(TheCaseSensitive: boolean);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -124,6 +123,7 @@ type
|
|||||||
procedure Remove(const Name: string); virtual;
|
procedure Remove(const Name: string); virtual;
|
||||||
property CaseSensitive: boolean read FCaseSensitive;
|
property CaseSensitive: boolean read FCaseSensitive;
|
||||||
property Tree: TAVLTree read FTree; // tree of PStringMapItem
|
property Tree: TAVLTree read FTree; // tree of PStringMapItem
|
||||||
|
function FindNode(const s: string): TAVLTreeNode;
|
||||||
function Equals(OtherTree: TStringMap): boolean; reintroduce;
|
function Equals(OtherTree: TStringMap): boolean; reintroduce;
|
||||||
procedure Assign(Source: TStringMap); virtual; abstract;
|
procedure Assign(Source: TStringMap); virtual; abstract;
|
||||||
procedure WriteDebugReport; virtual;
|
procedure WriteDebugReport; virtual;
|
||||||
@ -158,15 +158,14 @@ type
|
|||||||
function GetStrings(const s: string): string;
|
function GetStrings(const s: string): string;
|
||||||
procedure SetStrings(const s: string; const AValue: string);
|
procedure SetStrings(const s: string; const AValue: string);
|
||||||
protected
|
protected
|
||||||
procedure DisposeItem(p: Pointer); override;
|
procedure DisposeItem(p: PStringMapItem); virtual;
|
||||||
function ItemsAreEqual(p1, p2: Pointer): boolean; override;
|
function ItemsAreEqual(p1, p2: PStringMapItem): boolean; virtual;
|
||||||
procedure AssignItem(Src, Dest: Pointer); override;
|
function CreateCopy(Src: PStringMapItem): PStringMapItem; virtual;
|
||||||
public
|
public
|
||||||
function GetString(const Name: string; out Value: string): boolean;
|
function GetString(const Name: string; out Value: string): boolean;
|
||||||
procedure Add(const Name, Value: string); virtual;
|
procedure Add(const Name, Value: string); virtual;
|
||||||
property Strings[const s: string]: string read GetStrings write SetStrings; default;
|
property Strings[const s: string]: string read GetStrings write SetStrings; default;
|
||||||
function AsText: string;
|
function AsText: string;
|
||||||
procedure Assign(Source: TStringMap); override;
|
|
||||||
procedure WriteDebugReport; override;
|
procedure WriteDebugReport; override;
|
||||||
function CalcMemSize: PtrUint; override;
|
function CalcMemSize: PtrUint; override;
|
||||||
function GetEnumerator: TStringToStringTreeEnumerator;
|
function GetEnumerator: TStringToStringTreeEnumerator;
|
||||||
@ -197,9 +196,9 @@ type
|
|||||||
function GetItems(const s: string): Pointer;
|
function GetItems(const s: string): Pointer;
|
||||||
procedure SetItems(const s: string; AValue: Pointer);
|
procedure SetItems(const s: string; AValue: Pointer);
|
||||||
protected
|
protected
|
||||||
procedure DisposeItem(p: Pointer); override;
|
procedure DisposeItem(p: PStringMapItem); override;
|
||||||
function ItemsAreEqual(p1, p2: Pointer): boolean; override;
|
function ItemsAreEqual(p1, p2: PStringMapItem): boolean; override;
|
||||||
procedure AssignItem(Src, Dest: Pointer); override;
|
function CreateCopy(Src: PStringMapItem): PStringMapItem; override;
|
||||||
public
|
public
|
||||||
function GetItem(const Name: string; out Value: Pointer): boolean;
|
function GetItem(const Name: string; out Value: Pointer): boolean;
|
||||||
procedure Add(const Name: string; const Value: Pointer); virtual;
|
procedure Add(const Name: string; const Value: Pointer); virtual;
|
||||||
@ -512,7 +511,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStringToPointerTree.DisposeItem(p: Pointer);
|
procedure TStringToPointerTree.DisposeItem(p: PStringMapItem);
|
||||||
var
|
var
|
||||||
Item: PStringToPointerTreeItem absolute p;
|
Item: PStringToPointerTreeItem absolute p;
|
||||||
begin
|
begin
|
||||||
@ -521,7 +520,7 @@ begin
|
|||||||
Dispose(Item);
|
Dispose(Item);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TStringToPointerTree.ItemsAreEqual(p1, p2: Pointer): boolean;
|
function TStringToPointerTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean;
|
||||||
var
|
var
|
||||||
Item1: PStringToPointerTreeItem absolute p1;
|
Item1: PStringToPointerTreeItem absolute p1;
|
||||||
Item2: PStringToPointerTreeItem absolute p2;
|
Item2: PStringToPointerTreeItem absolute p2;
|
||||||
@ -530,13 +529,13 @@ begin
|
|||||||
and (Item1^.Value=Item2^.Value);
|
and (Item1^.Value=Item2^.Value);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStringToPointerTree.AssignItem(Src, Dest: Pointer);
|
function TStringToPointerTree.CreateCopy(Src: PStringMapItem): PStringMapItem;
|
||||||
var
|
var
|
||||||
SrcItem: PStringToPointerTreeItem absolute Src;
|
SrcItem: PStringToPointerTreeItem absolute Src;
|
||||||
DestItem: PStringToPointerTreeItem absolute Dest;
|
|
||||||
begin
|
begin
|
||||||
DestItem^.Name:=SrcItem^.Name;
|
New(Result);
|
||||||
DestItem^.Value:=SrcItem^.Value;
|
Result^.Name:=SrcItem^.Name;
|
||||||
|
Result^.Value:=SrcItem^.Value;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TStringToPointerTree.GetItem(const Name: string; out Value: Pointer
|
function TStringToPointerTree.GetItem(const Name: string; out Value: Pointer
|
||||||
@ -614,27 +613,20 @@ begin
|
|||||||
Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc);
|
Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStringMap.DisposeItem(p: Pointer);
|
procedure TStringMap.DisposeItem(p: PStringMapItem);
|
||||||
var
|
|
||||||
Item: PStringMapItem absolute p;
|
|
||||||
begin
|
begin
|
||||||
Dispose(Item);
|
Dispose(p);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TStringMap.ItemsAreEqual(p1, p2: Pointer): boolean;
|
function TStringMap.ItemsAreEqual(p1, p2: PStringMapItem): boolean;
|
||||||
var
|
|
||||||
Item1: PStringMapItem absolute p1;
|
|
||||||
Item2: PStringMapItem absolute p2;
|
|
||||||
begin
|
begin
|
||||||
Result:=Item1^.Name=Item2^.Name;
|
Result:=p1^.Name=p2^.Name;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStringMap.AssignItem(Src, Dest: Pointer);
|
function TStringMap.CreateCopy(Src: PStringMapItem): PStringMapItem;
|
||||||
var
|
|
||||||
SrcItem: PStringMapItem absolute Src;
|
|
||||||
DestItem: PStringMapItem absolute Dest;
|
|
||||||
begin
|
begin
|
||||||
DestItem^.Name:=SrcItem^.Name;
|
New(Result);
|
||||||
|
Result^.Name:=Src^.Name;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TStringMap.Create(TheCaseSensitive: boolean);
|
constructor TStringMap.Create(TheCaseSensitive: boolean);
|
||||||
@ -835,14 +827,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStringToStringTree.DisposeItem(p: Pointer);
|
procedure TStringToStringTree.DisposeItem(p: PStringMapItem);
|
||||||
var
|
var
|
||||||
Item: PStringToStringTreeItem absolute p;
|
Item: PStringToStringTreeItem absolute p;
|
||||||
begin
|
begin
|
||||||
Dispose(Item);
|
Dispose(Item);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TStringToStringTree.ItemsAreEqual(p1, p2: Pointer): boolean;
|
function TStringToStringTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean;
|
||||||
var
|
var
|
||||||
Item1: PStringToStringTreeItem absolute p1;
|
Item1: PStringToStringTreeItem absolute p1;
|
||||||
Item2: PStringToStringTreeItem absolute p2;
|
Item2: PStringToStringTreeItem absolute p2;
|
||||||
@ -851,13 +843,11 @@ begin
|
|||||||
and (Item1^.Value=Item2^.Value);
|
and (Item1^.Value=Item2^.Value);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStringToStringTree.AssignItem(Src, Dest: Pointer);
|
function TStringToStringTree.CreateCopy(Src: PStringMapItem): PStringMapItem;
|
||||||
var
|
|
||||||
SrcItem: PStringToStringTreeItem absolute Src;
|
|
||||||
DestItem: PStringToStringTreeItem absolute Dest;
|
|
||||||
begin
|
begin
|
||||||
DestItem^.Name:=SrcItem^.Name;
|
New(Result);
|
||||||
DestItem^.Value:=SrcItem^.Value;
|
Result^.Name:=Src^.Name;
|
||||||
|
Result^.Value:=Src^.Value;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TStringToStringTree.GetString(const Name: string; out Value: string
|
function TStringToStringTree.GetString(const Name: string; out Value: string
|
||||||
|
@ -200,11 +200,10 @@ type
|
|||||||
FTree: TAvgLvlTree;// tree of PStringMapItem
|
FTree: TAvgLvlTree;// tree of PStringMapItem
|
||||||
FCaseSensitive: boolean;
|
FCaseSensitive: boolean;
|
||||||
function GetCompareItemsFunc: TListSortCompare;
|
function GetCompareItemsFunc: TListSortCompare;
|
||||||
function FindNode(const s: string): TAvgLvlTreeNode;
|
|
||||||
protected
|
protected
|
||||||
procedure DisposeItem(p: Pointer); virtual;
|
procedure DisposeItem(p: PStringMapItem); virtual;
|
||||||
function ItemsAreEqual(p1, p2: Pointer): boolean; virtual;
|
function ItemsAreEqual(p1, p2: PStringMapItem): boolean; virtual;
|
||||||
procedure AssignItem(Src, Dest: Pointer); virtual;
|
function CreateCopy(Src: PStringMapItem): PStringMapItem; virtual;
|
||||||
public
|
public
|
||||||
constructor Create(TheCaseSensitive: boolean);
|
constructor Create(TheCaseSensitive: boolean);
|
||||||
constructor Create(const ACompareItems, ACompareNameWithItem: TListSortCompare;
|
constructor Create(const ACompareItems, ACompareNameWithItem: TListSortCompare;
|
||||||
@ -216,9 +215,10 @@ type
|
|||||||
procedure Remove(const Name: string); virtual;
|
procedure Remove(const Name: string); virtual;
|
||||||
property CaseSensitive: boolean read FCaseSensitive;
|
property CaseSensitive: boolean read FCaseSensitive;
|
||||||
property Tree: TAvgLvlTree read FTree; // tree of PStringMapItem
|
property Tree: TAvgLvlTree read FTree; // tree of PStringMapItem
|
||||||
|
function FindNode(const s: string): TAvgLvlTreeNode;
|
||||||
function Count: integer; inline;
|
function Count: integer; inline;
|
||||||
function Equals(OtherTree: TCustomStringMap): boolean; reintroduce;
|
function Equals(OtherTree: TCustomStringMap): boolean; reintroduce;
|
||||||
procedure Assign(Source: TCustomStringMap); virtual; abstract;
|
procedure Assign(Source: TCustomStringMap); virtual;
|
||||||
property CompareItemsFunc: TListSortCompare read GetCompareItemsFunc;
|
property CompareItemsFunc: TListSortCompare read GetCompareItemsFunc;
|
||||||
property CompareKeyItemFunc: TListSortCompare read FCompareKeyItemFunc;
|
property CompareKeyItemFunc: TListSortCompare read FCompareKeyItemFunc;
|
||||||
procedure SetCompareFuncs(
|
procedure SetCompareFuncs(
|
||||||
@ -251,8 +251,6 @@ type
|
|||||||
end;
|
end;
|
||||||
PStringToStringItem = ^TStringToStringItem;
|
PStringToStringItem = ^TStringToStringItem;
|
||||||
|
|
||||||
TStringToStringTree = class;
|
|
||||||
|
|
||||||
{ TStringToStringTreeEnumerator }
|
{ TStringToStringTreeEnumerator }
|
||||||
|
|
||||||
TStringToStringTreeEnumerator = class(TCustomStringMapEnumerator)
|
TStringToStringTreeEnumerator = class(TCustomStringMapEnumerator)
|
||||||
@ -269,13 +267,13 @@ type
|
|||||||
function GetValues(const s: string): string;
|
function GetValues(const s: string): string;
|
||||||
procedure SetValues(const s: string; const AValue: string);
|
procedure SetValues(const s: string; const AValue: string);
|
||||||
protected
|
protected
|
||||||
procedure DisposeItem(p: Pointer); override;
|
procedure DisposeItem(p: PStringMapItem); override;
|
||||||
function ItemsAreEqual(p1, p2: Pointer): boolean; override;
|
function ItemsAreEqual(p1, p2: PStringMapItem): boolean; override;
|
||||||
procedure AssignItem(Src, Dest: Pointer); override;
|
function CreateCopy(Src: PStringMapItem): PStringMapItem; override;
|
||||||
function GetNode(Node: TAvgLvlTreeNode; out Name, Value: string): Boolean;
|
function GetNode(Node: TAvgLvlTreeNode; out Name, Value: string): Boolean;
|
||||||
public
|
public
|
||||||
function GetString(const Name: string; out Value: string): boolean;
|
function GetString(const Name: string; out Value: string): boolean;
|
||||||
procedure Add(const Name, Value: string); virtual;
|
procedure Add(const Name, Value: string); inline;
|
||||||
procedure Add(const Name, Value, Delimiter: string);
|
procedure Add(const Name, Value, Delimiter: string);
|
||||||
procedure AddNameValues(List: TStrings);
|
procedure AddNameValues(List: TStrings);
|
||||||
procedure AddValues(List: TStrings); inline; deprecated;
|
procedure AddValues(List: TStrings); inline; deprecated;
|
||||||
@ -326,6 +324,39 @@ type
|
|||||||
property CompareNameWithItem: TListSortCompare read FCompareNameWithItem;
|
property CompareNameWithItem: TListSortCompare read FCompareNameWithItem;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TStringToPointerTree - Associative array }
|
||||||
|
|
||||||
|
TStringToPointerItem = record
|
||||||
|
Name: string;
|
||||||
|
Value: Pointer;
|
||||||
|
end;
|
||||||
|
PStringToPointerItem = ^TStringToPointerItem;
|
||||||
|
|
||||||
|
{ TStringToPointerTreeEnumerator }
|
||||||
|
|
||||||
|
TStringToPointerTreeEnumerator = class(TCustomStringMapEnumerator)
|
||||||
|
private
|
||||||
|
function GetCurrent: PStringToPointerItem; inline;
|
||||||
|
public
|
||||||
|
property Current: PStringToPointerItem read GetCurrent;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TStringToPointerTree = class(TCustomStringMap)
|
||||||
|
private
|
||||||
|
FFreeValues: boolean;
|
||||||
|
function GetValues(const s: string): Pointer;
|
||||||
|
procedure SetValues(const s: string; const AValue: Pointer);
|
||||||
|
protected
|
||||||
|
procedure DisposeItem(p: PStringMapItem); override;
|
||||||
|
function ItemsAreEqual(p1, p2: PStringMapItem): boolean; override;
|
||||||
|
function CreateCopy(Src: PStringMapItem): PStringMapItem; override;
|
||||||
|
public
|
||||||
|
function GetData(const Name: string; out Value: Pointer): boolean;
|
||||||
|
property Values[const s: string]: Pointer read GetValues write SetValues; default;
|
||||||
|
function GetEnumerator: TStringToPointerTreeEnumerator;
|
||||||
|
property FreeValues: boolean read FFreeValues write FFreeValues;
|
||||||
|
end;
|
||||||
|
|
||||||
function CompareStringToStringItems(Data1, Data2: Pointer): integer;
|
function CompareStringToStringItems(Data1, Data2: Pointer): integer;
|
||||||
function ComparePAnsiStringWithStrToStrItem(Key, Data: Pointer): Integer;
|
function ComparePAnsiStringWithStrToStrItem(Key, Data: Pointer): Integer;
|
||||||
function CompareStringToStringItemsI(Data1, Data2: Pointer): integer;
|
function CompareStringToStringItemsI(Data1, Data2: Pointer): integer;
|
||||||
@ -375,6 +406,89 @@ begin
|
|||||||
Result:=CompareText(PAnsiString(Key)^,PStringMapItem(Data)^.Name);
|
Result:=CompareText(PAnsiString(Key)^,PStringMapItem(Data)^.Name);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TStringToPointerTree.GetValues(const s: string): Pointer;
|
||||||
|
var
|
||||||
|
Node: TAvgLvlTreeNode;
|
||||||
|
begin
|
||||||
|
Node:=FindNode(s);
|
||||||
|
if Node<>nil then
|
||||||
|
Result:=PStringToPointerItem(Node.Data)^.Value
|
||||||
|
else
|
||||||
|
Result:=nil
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TStringToPointerTree.SetValues(const s: string; const AValue: Pointer
|
||||||
|
);
|
||||||
|
var
|
||||||
|
Node: TAvgLvlTreeNode;
|
||||||
|
NewItem: PStringToPointerItem;
|
||||||
|
begin
|
||||||
|
Node:=FindNode(s);
|
||||||
|
if Node<>nil then begin
|
||||||
|
PStringToPointerItem(Node.Data)^.Value:=AValue;
|
||||||
|
end else begin
|
||||||
|
New(NewItem);
|
||||||
|
NewItem^.Name:=s;
|
||||||
|
NewItem^.Value:=AValue;
|
||||||
|
FTree.Add(NewItem);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TStringToPointerTree.DisposeItem(p: PStringMapItem);
|
||||||
|
var
|
||||||
|
Item: PStringToPointerItem absolute p;
|
||||||
|
begin
|
||||||
|
if FreeValues then
|
||||||
|
TObject(Item^.Value).Free;
|
||||||
|
Dispose(Item);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TStringToPointerTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean;
|
||||||
|
var
|
||||||
|
Item1: PStringToPointerItem absolute p1;
|
||||||
|
Item2: PStringToPointerItem absolute p2;
|
||||||
|
begin
|
||||||
|
Result:=(Item1^.Name=Item2^.Name)
|
||||||
|
and (Item1^.Value=Item2^.Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TStringToPointerTree.CreateCopy(Src: PStringMapItem): PStringMapItem;
|
||||||
|
var
|
||||||
|
SrcItem: PStringToPointerItem absolute Src;
|
||||||
|
NewItem: PStringToPointerItem;
|
||||||
|
begin
|
||||||
|
New(NewItem);
|
||||||
|
NewItem^.Name:=SrcItem^.Name;
|
||||||
|
NewItem^.Value:=SrcItem^.Value;
|
||||||
|
Result:=PStringMapItem(NewItem);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TStringToPointerTree.GetData(const Name: string; out Value: Pointer
|
||||||
|
): boolean;
|
||||||
|
var
|
||||||
|
Node: TAvgLvlTreeNode;
|
||||||
|
begin
|
||||||
|
Node:=FindNode(Name);
|
||||||
|
if Node<>nil then begin
|
||||||
|
Value:=PStringToPointerItem(Node.Data)^.Value;
|
||||||
|
Result:=true;
|
||||||
|
end else begin
|
||||||
|
Result:=false;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TStringToPointerTree.GetEnumerator: TStringToPointerTreeEnumerator;
|
||||||
|
begin
|
||||||
|
Result:=TStringToPointerTreeEnumerator.Create(FTree);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TStringToPointerTreeEnumerator }
|
||||||
|
|
||||||
|
function TStringToPointerTreeEnumerator.GetCurrent: PStringToPointerItem;
|
||||||
|
begin
|
||||||
|
Result:=PStringToPointerItem(FCurrent.Data);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TNewStringToStringTree }
|
{ TNewStringToStringTree }
|
||||||
|
|
||||||
function TNewStringToStringTree.GetValues(const s: string): string;
|
function TNewStringToStringTree.GetValues(const s: string): string;
|
||||||
@ -405,14 +519,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TNewStringToStringTree.DisposeItem(p: Pointer);
|
procedure TNewStringToStringTree.DisposeItem(p: PStringMapItem);
|
||||||
var
|
var
|
||||||
Item: PStringToStringItem absolute p;
|
Item: PStringToStringItem absolute p;
|
||||||
begin
|
begin
|
||||||
Dispose(Item);
|
Dispose(Item);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TNewStringToStringTree.ItemsAreEqual(p1, p2: Pointer): boolean;
|
function TNewStringToStringTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean;
|
||||||
var
|
var
|
||||||
Item1: PStringToStringItem absolute p1;
|
Item1: PStringToStringItem absolute p1;
|
||||||
Item2: PStringToStringItem absolute p2;
|
Item2: PStringToStringItem absolute p2;
|
||||||
@ -421,13 +535,15 @@ begin
|
|||||||
and (Item1^.Value=Item2^.Value);
|
and (Item1^.Value=Item2^.Value);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TNewStringToStringTree.AssignItem(Src, Dest: Pointer);
|
function TNewStringToStringTree.CreateCopy(Src: PStringMapItem): PStringMapItem;
|
||||||
var
|
var
|
||||||
SrcItem: PStringToStringItem absolute Src;
|
SrcItem: PStringToStringItem absolute Src;
|
||||||
DestItem: PStringToStringItem absolute Dest;
|
NewItem: PStringToStringItem;
|
||||||
begin
|
begin
|
||||||
DestItem^.Name:=SrcItem^.Name;
|
New(NewItem);
|
||||||
DestItem^.Value:=SrcItem^.Value;
|
NewItem^.Name:=SrcItem^.Name;
|
||||||
|
NewItem^.Value:=SrcItem^.Value;
|
||||||
|
Result:=PStringMapItem(NewItem);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TNewStringToStringTree.GetNode(Node: TAvgLvlTreeNode; out Name,
|
function TNewStringToStringTree.GetNode(Node: TAvgLvlTreeNode; out Name,
|
||||||
@ -2037,27 +2153,20 @@ begin
|
|||||||
Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc);
|
Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomStringMap.DisposeItem(p: Pointer);
|
procedure TCustomStringMap.DisposeItem(p: PStringMapItem);
|
||||||
var
|
|
||||||
Item: PStringMapItem absolute p;
|
|
||||||
begin
|
begin
|
||||||
Dispose(Item);
|
Dispose(p);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomStringMap.ItemsAreEqual(p1, p2: Pointer): boolean;
|
function TCustomStringMap.ItemsAreEqual(p1, p2: PStringMapItem): boolean;
|
||||||
var
|
|
||||||
Item1: PStringMapItem absolute p1;
|
|
||||||
Item2: PStringMapItem absolute p2;
|
|
||||||
begin
|
begin
|
||||||
Result:=Item1^.Name=Item2^.Name;
|
Result:=p1^.Name=p2^.Name;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomStringMap.AssignItem(Src, Dest: Pointer);
|
function TCustomStringMap.CreateCopy(Src: PStringMapItem): PStringMapItem;
|
||||||
var
|
|
||||||
SrcItem: PStringMapItem absolute Src;
|
|
||||||
DestItem: PStringMapItem absolute Dest;
|
|
||||||
begin
|
begin
|
||||||
DestItem^.Name:=SrcItem^.Name;
|
New(Result);
|
||||||
|
Result^.Name:=Src^.Name;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TCustomStringMap.Create(TheCaseSensitive: boolean);
|
constructor TCustomStringMap.Create(TheCaseSensitive: boolean);
|
||||||
@ -2156,6 +2265,22 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomStringMap.Assign(Source: TCustomStringMap);
|
||||||
|
var
|
||||||
|
SrcNode: TAvgLvlTreeNode;
|
||||||
|
SrcItem: PStringMapItem;
|
||||||
|
begin
|
||||||
|
if (Source=nil) or (Source.ClassType<>ClassType) then
|
||||||
|
raise Exception.Create('invalid class');
|
||||||
|
Clear;
|
||||||
|
SrcNode:=Source.Tree.FindLowest;
|
||||||
|
while SrcNode<>nil do begin
|
||||||
|
SrcItem:=PStringMapItem(SrcNode.Data);
|
||||||
|
Tree.Add(CreateCopy(SrcItem));
|
||||||
|
SrcNode:=Source.Tree.FindSuccessor(SrcNode);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomStringMap.SetCompareFuncs(const NewCompareItemsFunc,
|
procedure TCustomStringMap.SetCompareFuncs(const NewCompareItemsFunc,
|
||||||
NewCompareKeyItemFunc: TListSortCompare; NewCaseSensitive: boolean);
|
NewCompareKeyItemFunc: TListSortCompare; NewCaseSensitive: boolean);
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user