1
unit LUX.Data.Tree.Node;
3
interface //#################################################################### ■
5
uses LUX.Data.Tree.core;
7
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
14
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
16
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
18
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeRoot
20
TTreeRoot = class( TTreeItem )
22
FLinks :TArray<TTreeItem>;
27
function Get_Links( const I_:Integer ) :TTreeItem; override;
28
procedure Set_Links( const I_:Integer; const Link_:TTreeItem ); override;
29
function Get_LinksN :Integer; override;
30
procedure Set_LinksN( const LinksN_:Integer ); override;
31
function Get_ChildsN :Integer; override;
32
procedure Set_ChildsN( const ChildsN_:Integer ); override;
33
function Get_MaxOrder :Integer; override;
34
procedure Set_MaxOrder( const MaxOrder_:Integer ); override;
36
constructor Create; overload; virtual;
37
procedure BeforeDestruction; override;
38
destructor Destroy; override;
41
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeZero
43
TTreeZero = class( TTreeItem )
49
function Get_Prev :TTreeItem; override;
50
procedure Set_Prev( const Prev_:TTreeItem ); override;
51
function Get_Next :TTreeItem; override;
52
procedure Set_Next( const Next_:TTreeItem ); override;
54
constructor Create; overload; virtual;
57
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeNode
59
TTreeNode = class( TTreeZero )
63
FLinks :TArray<TTreeItem>;
68
function Get_Parent :TTreeItem; override;
69
procedure Set_Parent( const Parent_:TTreeItem ); override;
70
function Get_Order :Integer; override;
71
procedure Set_Order( const Order_:Integer ); override;
72
function Get_Links( const I_:Integer ) :TTreeItem; override;
73
procedure Set_Links( const I_:Integer; const Link_:TTreeItem ); override;
74
function Get_LinksN :Integer; override;
75
procedure Set_LinksN( const LinksN_:Integer ); override;
76
function Get_ChildsN :Integer; override;
77
procedure Set_ChildsN( const ChildsN_:Integer ); override;
78
function Get_MaxOrder :Integer; override;
79
procedure Set_MaxOrder( const MaxOrder_:Integer ); override;
81
constructor Create; overload; override;
82
constructor Create( const Parent_:TTreeItem ); overload; virtual;
83
procedure BeforeDestruction; override;
84
destructor Destroy; override;
87
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeLeaf
89
TTreeLeaf = class( TTreeZero )
95
function Get_Parent :TTreeItem; override;
96
procedure Set_Parent( const Parent_:TTreeItem ); override;
97
function Get_Order :Integer; override;
98
procedure Set_Order( const Order_:Integer ); override;
100
constructor Create; overload; override;
101
constructor Create( const Parent_:TTreeItem ); overload; virtual;
102
procedure BeforeDestruction; override;
103
destructor Destroy; override;
106
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
108
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
110
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
112
implementation //############################################################### ■
114
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
116
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
118
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeRoot
120
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
122
/////////////////////////////////////////////////////////////////////// アクセス
124
function TTreeRoot.Get_Links( const I_:Integer ) :TTreeItem;
126
Result := FLinks[ 1 + I_ ];
129
procedure TTreeRoot.Set_Links( const I_:Integer; const Link_:TTreeItem );
131
FLinks[ 1 + I_ ] := Link_;
134
function TTreeRoot.Get_LinksN :Integer;
136
Result := Length( FLinks ) - 1;
139
procedure TTreeRoot.Set_LinksN( const LinksN_:Integer );
141
SetLength( FLinks, 1 + LinksN_ );
144
function TTreeRoot.Get_ChildsN :Integer;
149
procedure TTreeRoot.Set_ChildsN( const ChildsN_:Integer );
151
FChildsN := ChildsN_;
154
function TTreeRoot.Get_MaxOrder :Integer;
159
procedure TTreeRoot.Set_MaxOrder( const MaxOrder_:Integer );
161
FMaxOrder := MaxOrder_;
164
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
166
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
168
constructor TTreeRoot.Create;
176
_Zero := TTreeZero.Create;
181
procedure TTreeRoot.BeforeDestruction;
188
destructor TTreeRoot.Destroy;
195
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeZero
197
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
199
/////////////////////////////////////////////////////////////////////// アクセス
201
function TTreeZero.Get_Prev :TTreeItem;
206
procedure TTreeZero.Set_Prev( const Prev_:TTreeItem );
211
function TTreeZero.Get_Next :TTreeItem;
216
procedure TTreeZero.Set_Next( const Next_:TTreeItem );
221
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
223
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
225
constructor TTreeZero.Create;
233
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeNode
235
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
237
/////////////////////////////////////////////////////////////////////// アクセス
239
function TTreeNode.Get_Parent :TTreeItem;
244
procedure TTreeNode.Set_Parent( const Parent_:TTreeItem );
249
function TTreeNode.Get_Order :Integer;
254
procedure TTreeNode.Set_Order( const Order_:Integer );
259
function TTreeNode.Get_Links( const I_:Integer ) :TTreeItem;
261
Result := FLinks[ 1 + I_ ];
264
procedure TTreeNode.Set_Links( const I_:Integer; const Link_:TTreeItem );
266
FLinks[ 1 + I_ ] := Link_;
269
function TTreeNode.Get_LinksN :Integer;
271
Result := Length( FLinks ) - 1;
274
procedure TTreeNode.Set_LinksN( const LinksN_:Integer );
276
SetLength( FLinks, 1 + LinksN_ );
279
function TTreeNode.Get_ChildsN :Integer;
284
procedure TTreeNode.Set_ChildsN( const ChildsN_:Integer );
286
FChildsN := ChildsN_;
289
function TTreeNode.Get_MaxOrder :Integer;
294
procedure TTreeNode.Set_MaxOrder( const MaxOrder_:Integer );
296
FMaxOrder := MaxOrder_;
299
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
301
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
303
constructor TTreeNode.Create;
315
_Zero := TTreeZero.Create;
320
constructor TTreeNode.Create( const Parent_:TTreeItem );
324
Parent_._InsertTail( Self );
327
procedure TTreeNode.BeforeDestruction;
336
destructor TTreeNode.Destroy;
343
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeLeaf
345
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
347
/////////////////////////////////////////////////////////////////////// アクセス
349
function TTreeLeaf.Get_Parent :TTreeItem;
354
procedure TTreeLeaf.Set_Parent( const Parent_:TTreeItem );
359
function TTreeLeaf.Get_Order :Integer;
364
procedure TTreeLeaf.Set_Order( const Order_:Integer );
369
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
371
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
373
constructor TTreeLeaf.Create;
382
constructor TTreeLeaf.Create( const Parent_:TTreeItem );
386
Parent_._InsertTail( Self );
389
procedure TTreeLeaf.BeforeDestruction;
396
destructor TTreeLeaf.Destroy;
402
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
404
end. //######################################################################### ■