Luxophia

Форк
0
/
LUX.Data.Tree.Node.pas 
404 строки · 10.0 Кб
1
unit LUX.Data.Tree.Node;
2

3
interface //#################################################################### ■
4

5
uses LUX.Data.Tree.core;
6

7
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
8

9
     TTreeRoot   = class;
10
     TTreeZero   = class;
11
       TTreeNode = class;
12
       TTreeLeaf = class;
13

14
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
15

16
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
17

18
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeRoot
19

20
     TTreeRoot = class( TTreeItem )
21
     private
22
       FLinks    :TArray<TTreeItem>;
23
       FChildsN  :Integer;
24
       FMaxOrder :Integer;
25
     protected
26
       ///// アクセス
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;
35
     public
36
       constructor Create; overload; virtual;
37
       procedure BeforeDestruction; override;
38
       destructor Destroy; override;
39
     end;
40

41
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeZero
42

43
     TTreeZero = class( TTreeItem )
44
     private
45
       FPrev :TTreeItem;
46
       FNext :TTreeItem;
47
     protected
48
       ///// アクセス
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;
53
     public
54
       constructor Create; overload; virtual;
55
     end;
56

57
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeNode
58

59
     TTreeNode = class( TTreeZero )
60
     private
61
       FParent   :TTreeItem;
62
       FOrder    :Integer;
63
       FLinks    :TArray<TTreeItem>;
64
       FChildsN  :Integer;
65
       FMaxOrder :Integer;
66
     protected
67
       ///// アクセス
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;
80
     public
81
       constructor Create; overload; override;
82
       constructor Create( const Parent_:TTreeItem ); overload; virtual;
83
       procedure BeforeDestruction; override;
84
       destructor Destroy; override;
85
     end;
86

87
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeLeaf
88

89
     TTreeLeaf = class( TTreeZero )
90
     private
91
       FParent :TTreeItem;
92
       FOrder  :Integer;
93
     protected
94
       ///// アクセス
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;
99
     public
100
       constructor Create; overload; override;
101
       constructor Create( const Parent_:TTreeItem ); overload; virtual;
102
       procedure BeforeDestruction; override;
103
       destructor Destroy; override;
104
     end;
105

106
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
107

108
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
109

110
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
111

112
implementation //############################################################### ■
113

114
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
115

116
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
117

118
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeRoot
119

120
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
121

122
/////////////////////////////////////////////////////////////////////// アクセス
123

124
function TTreeRoot.Get_Links( const I_:Integer ) :TTreeItem;
125
begin
126
     Result := FLinks[ 1 + I_ ];
127
end;
128

129
procedure TTreeRoot.Set_Links( const I_:Integer; const Link_:TTreeItem );
130
begin
131
     FLinks[ 1 + I_ ] := Link_;
132
end;
133

134
function TTreeRoot.Get_LinksN :Integer;
135
begin
136
     Result := Length( FLinks ) - 1;
137
end;
138

139
procedure TTreeRoot.Set_LinksN( const LinksN_:Integer );
140
begin
141
     SetLength( FLinks, 1 + LinksN_ );
142
end;
143

144
function TTreeRoot.Get_ChildsN :Integer;
145
begin
146
     Result := FChildsN;
147
end;
148

149
procedure TTreeRoot.Set_ChildsN( const ChildsN_:Integer );
150
begin
151
     FChildsN := ChildsN_;
152
end;
153

154
function TTreeRoot.Get_MaxOrder :Integer;
155
begin
156
     Result := FMaxOrder;
157
end;
158

159
procedure TTreeRoot.Set_MaxOrder( const MaxOrder_:Integer );
160
begin
161
     FMaxOrder := MaxOrder_;
162
end;
163

164
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
165

166
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
167

168
constructor TTreeRoot.Create;
169
begin
170
     inherited;
171

172
     _ChildsN  := 0;
173

174
     _LinksN   := 0;
175

176
     _Zero     := TTreeZero.Create;
177

178
     _MaxOrder := -1;
179
end;
180

181
procedure TTreeRoot.BeforeDestruction;
182
begin
183
     DeleteChilds;
184

185
     inherited;
186
end;
187

188
destructor TTreeRoot.Destroy;
189
begin
190
     _Zero.Free;
191

192
     inherited;
193
end;
194

195
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeZero
196

197
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
198

199
/////////////////////////////////////////////////////////////////////// アクセス
200

201
function TTreeZero.Get_Prev :TTreeItem;
202
begin
203
     Result := FPrev;
204
end;
205

206
procedure TTreeZero.Set_Prev( const Prev_:TTreeItem );
207
begin
208
     FPrev := Prev_;
209
end;
210

211
function TTreeZero.Get_Next :TTreeItem;
212
begin
213
     Result := FNext;
214
end;
215

216
procedure TTreeZero.Set_Next( const Next_:TTreeItem );
217
begin
218
     FNext := Next_;
219
end;
220

221
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
222

223
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
224

225
constructor TTreeZero.Create;
226
begin
227
     inherited;
228

229
     FPrev := Self;
230
     FNext := Self;
231
end;
232

233
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeNode
234

235
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
236

237
/////////////////////////////////////////////////////////////////////// アクセス
238

239
function TTreeNode.Get_Parent :TTreeItem;
240
begin
241
     Result := FParent;
242
end;
243

244
procedure TTreeNode.Set_Parent( const Parent_:TTreeItem );
245
begin
246
     FParent := Parent_;
247
end;
248

249
function TTreeNode.Get_Order :Integer;
250
begin
251
     Result := FOrder;
252
end;
253

254
procedure TTreeNode.Set_Order( const Order_:Integer );
255
begin
256
     FOrder := Order_;
257
end;
258

259
function TTreeNode.Get_Links( const I_:Integer ) :TTreeItem;
260
begin
261
     Result := FLinks[ 1 + I_ ];
262
end;
263

264
procedure TTreeNode.Set_Links( const I_:Integer; const Link_:TTreeItem );
265
begin
266
     FLinks[ 1 + I_ ] := Link_;
267
end;
268

269
function TTreeNode.Get_LinksN :Integer;
270
begin
271
     Result := Length( FLinks ) - 1;
272
end;
273

274
procedure TTreeNode.Set_LinksN( const LinksN_:Integer );
275
begin
276
     SetLength( FLinks, 1 + LinksN_ );
277
end;
278

279
function TTreeNode.Get_ChildsN :Integer;
280
begin
281
     Result := FChildsN;
282
end;
283

284
procedure TTreeNode.Set_ChildsN( const ChildsN_:Integer );
285
begin
286
     FChildsN := ChildsN_;
287
end;
288

289
function TTreeNode.Get_MaxOrder :Integer;
290
begin
291
     Result := FMaxOrder;
292
end;
293

294
procedure TTreeNode.Set_MaxOrder( const MaxOrder_:Integer );
295
begin
296
     FMaxOrder := MaxOrder_;
297
end;
298

299
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
300

301
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
302

303
constructor TTreeNode.Create;
304
begin
305
     inherited;
306

307
     _Parent   := nil;
308

309
     _Order    := -1;
310

311
     _ChildsN  := 0;
312

313
     _LinksN   := 0;
314

315
     _Zero     := TTreeZero.Create;
316

317
     _MaxOrder := -1;
318
end;
319

320
constructor TTreeNode.Create( const Parent_:TTreeItem );
321
begin
322
     Create;
323

324
     Parent_._InsertTail( Self );
325
end;
326

327
procedure TTreeNode.BeforeDestruction;
328
begin
329
     Remove;
330

331
     DeleteChilds;
332

333
     inherited;
334
end;
335

336
destructor TTreeNode.Destroy;
337
begin
338
     _Zero.Free;
339

340
     inherited;
341
end;
342

343
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TTreeLeaf
344

345
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
346

347
/////////////////////////////////////////////////////////////////////// アクセス
348

349
function TTreeLeaf.Get_Parent :TTreeItem;
350
begin
351
     Result := FParent;
352
end;
353

354
procedure TTreeLeaf.Set_Parent( const Parent_:TTreeItem );
355
begin
356
     FParent := Parent_;
357
end;
358

359
function TTreeLeaf.Get_Order :Integer;
360
begin
361
     Result := FOrder;
362
end;
363

364
procedure TTreeLeaf.Set_Order( const Order_:Integer );
365
begin
366
     FOrder := Order_;
367
end;
368

369
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
370

371
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
372

373
constructor TTreeLeaf.Create;
374
begin
375
     inherited;
376

377
     _Parent   := nil;
378

379
     _Order    := -1;
380
end;
381

382
constructor TTreeLeaf.Create( const Parent_:TTreeItem );
383
begin
384
     Create;
385

386
     Parent_._InsertTail( Self );
387
end;
388

389
procedure TTreeLeaf.BeforeDestruction;
390
begin
391
     Remove;
392

393
     inherited;
394
end;
395

396
destructor TTreeLeaf.Destroy;
397
begin
398

399
     inherited;
400
end;
401

402
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
403

404
end. //######################################################################### ■
405

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.