Luxophia

Форк
0
/
LUX.Data.Grid.T1.pas 
619 строк · 19.9 Кб
1
unit LUX.Data.Grid.T1;
2

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

5
uses System.SysUtils,
6
     LUX,
7
     LUX.Data.Grid;
8

9
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
10

11
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
12

13
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TPosval1D<_TItem_>
14

15
     TPosval1D<_TItem_> = record
16
     private
17
     public
18
       Pos :Single;
19
       Val :_TItem_;
20
       /////
21
       constructor Create( const Pos_:Single; const Val_:_TItem_ );
22
     end;
23

24
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
25

26
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TArray1D<_TItem_>
27

28
     IArray1D = interface( ICoreArray )
29
     ['{7BF64031-75DC-4CD8-9220-78D0F556C4CB}']
30
     {protected}
31
       ///// アクセス
32
       function GetElemsX :Integer;
33
       function GetItemsX :Integer;
34
       procedure SetItemsX( const ItemsX_:Integer );
35
       function GetMargsX :Integer;
36
       procedure SetMargsX( const MargsX_:Integer );
37
       function GetItemsN :Integer;
38
       function GetItem0P :Pointer;
39
     {public}
40
       ///// プロパティ
41
       property ItemByte :Integer read GetElemByte                ;
42
       property ElemsX   :Integer read GetElemsX                  ;
43
       property ItemsX   :Integer read GetItemsX   write SetItemsX;
44
       property MargsX   :Integer read GetMargsX   write SetMargsX;
45
       property ItemsN   :Integer read GetItemsN                  ;
46
       property Item0P   :Pointer read GetItem0P                  ;
47
     end;
48

49
     //-------------------------------------------------------------------------
50

51
     TArray1D<_TItem_> = class( TCoreArray<_TItem_>, IArray1D )
52
     public type
53
       _PItem_ = TCoreArray<_TItem_>._PElem_;
54
     private
55
       ///// メソッド
56
       function ElemsI( const X_:Integer ) :Integer; inline;
57
       function ItemsI( const X_:Integer ) :Integer; inline;
58
     protected
59
       _ElemsX :Integer;
60
       _ItemsX :Integer;
61
       _MargsX :Integer;
62
       ///// アクセス
63
       function GetElemsN :Integer; override;
64
       function GetElemsX :Integer;
65
       function GetElems( const X_:Integer ) :_TItem_;
66
       procedure SetElems( const X_:Integer; const Elem_:_TItem_ );
67
       function GetElemsP( const X_:Integer ) :_PItem_;
68
       function GetItemsX :Integer; virtual;
69
       procedure SetItemsX( const ItemsX_:Integer ); virtual;
70
       function GetMargsX :Integer;
71
       procedure SetMargsX( const MargsX_:Integer );
72
       function GetItemsN :Integer; virtual;
73
       function GetItems( const X_:Integer ) :_TItem_;
74
       procedure SetItems( const X_:Integer; const Item_:_TItem_ );
75
       function GetItemsP( const X_:Integer ) :_PItem_;
76
       function GetItem0P :Pointer;
77
       ///// メソッド
78
       procedure MakeArray; override;
79
     public
80
       constructor Create; overload;
81
       constructor Create( const ItemsX_:Integer ); overload;
82
       constructor Create( const ItemsX_,MargsX_:Integer ); overload; virtual;
83
       destructor Destroy; override;
84
       ///// プロパティ
85
       property ItemByte                   :Integer read GetElemByte                ;
86
       property ElemsX                     :Integer read GetElemsX                  ;
87
       property Elems[ const X_:Integer ]  :_TItem_ read GetElems    write SetElems ;
88
       property ElemsP[ const X_:Integer ] :_PItem_ read GetElemsP                  ;
89
       property ItemsX                     :Integer read GetItemsX   write SetItemsX;
90
       property MargsX                     :Integer read GetMargsX   write SetMargsX;
91
       property ItemsN                     :Integer read GetItemsN                  ;
92
       property Items[ const X_:Integer ]  :_TItem_ read GetItems    write SetItems ; default;
93
       property ItemsP[ const X_:Integer ] :_PItem_ read GetItemsP                  ;
94
       property Item0P                     :Pointer read GetItem0P                  ;
95
       ///// メソッド
96
       procedure MakeEdgeExten; virtual;
97
       procedure MakeEdgePerio; virtual; abstract;
98
       procedure MakeEdgeMirro; virtual; abstract;
99
       function AddTail( const Item_:_TItem_ ) :Integer;
100
     end;
101

102
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TCellArray1D<_TItem_>
103

104
     ICellArray1D = interface( IArray1D )
105
     ['{970CB18E-E1DC-4393-A124-528256753896}']
106
       ///// アクセス
107
       function GetPoinsX :Integer;
108
       procedure SetPoinsX( const PoinX_:Integer );
109
       ///// プロパティ
110
       property CellsX :Integer read GetItemsX write SetItemsX;
111
       property PoinsX :Integer read GetPoinsX write SetPoinsX;
112
     end;
113

114
     //-------------------------------------------------------------------------
115

116
     TCellArray1D<_TItem_> = class( TArray1D<_TItem_>, ICellArray1D )
117
     private
118
     protected
119
       ///// アクセス
120
       function GetPoinsX :Integer;
121
       procedure SetPoinsX( const PoinsX_:Integer );
122
     public
123
       ///// プロパティ
124
       property Cells[ const X_:Integer ] :_TItem_ read GetItems  write SetItems ; default;
125
       property CellsX                    :Integer read GetItemsX write SetItemsX;
126
       property PoinsX                    :Integer read GetPoinsX write SetPoinsX;
127
       ///// メソッド
128
       procedure MakeEdgePerio; override;
129
       procedure MakeEdgeMirro; override;
130
     end;
131

132
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TPoinArray1D<_TItem_>
133

134
     IPoinArray1D = interface( IArray1D )
135
     ['{9FF11CDA-0879-41D1-8025-C4323E1D4389}']
136
       ///// アクセス
137
       function GetCellsX :Integer;
138
       procedure SetCellsX( const CellsX_:Integer );
139
       ///// プロパティ
140
       property PoinsX :Integer read GetItemsX write SetItemsX;
141
       property CellsX :Integer read GetCellsX write SetCellsX;
142
     end;
143

144
     //-------------------------------------------------------------------------
145

146
     TPoinArray1D<_TItem_> = class( TArray1D<_TItem_>, IPoinArray1D )
147
     private
148
     protected
149
       ///// アクセス
150
       function GetCellsX :Integer;
151
       procedure SetCellsX( const CellsX_:Integer );
152
     public
153
       constructor Create( const CellsX_,MargsX_:Integer ); override;
154
       destructor Destroy; override;
155
       ///// プロパティ
156
       property Poins[ const X_:Integer ] :_TItem_ read GetItems  write SetItems ; default;
157
       property PoinsX                    :Integer read GetItemsX write SetItemsX;
158
       property CellsX                    :Integer read GetCellsX write SetCellsX;
159
       ///// メソッド
160
       procedure MakeEdgePerio; override;
161
       procedure MakeEdgeMirro; override;
162
     end;
163

164
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TPoinMap1D<_TItem_>
165

166
     TPoinMap1D<_TItem_> = class( TPoinArray1D<_TItem_> )
167
     private
168
     protected
169
     public
170
     end;
171

172
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TIrreMap1D<_TItem_>
173

174
     TIrreMap1D<_TItem_> = class( TPoinMap1D<TPosval1D<_TItem_>> )
175
     private
176
     protected
177
       ///// アクセス
178
       function GetMinPosX :Single;
179
       function GetMaxPosX :Single;
180
       ///// メソッド
181
       function Interp( const G0_,G1_,G2_,G3_:_TItem_; const Id_:Single ) :_TItem_; overload; virtual; abstract;
182
       function InterpPos( const G0_,G1_,G2_,G3_:TPosval1D<_TItem_>; const Pos_:Single ) :_TItem_; overload; virtual; abstract;
183
     public
184
       ///// プロパティ
185
       property MinPos  :Single read GetMinPosX;
186
       property MinPosX :Single read GetMinPosX;
187
       property MaxPos  :Single read GetMaxPosX;
188
       property MaxPosX :Single read GetMaxPosX;
189
       ///// メソッド
190
       function Interp( const I_:Single ) :_TItem_; overload; virtual;
191
       function InterpPos( const Pos_:Single ) :_TItem_; overload; virtual;
192
       function AddTail( const Pos_:Single; const Val_:_TItem_ ) :Integer; overload;
193
       function Insert( const PV_:TPosval1D<_TItem_> ) :Integer; overload; virtual;
194
       function Insert( const Pos_:Single; const Val_:_TItem_ ) :Integer; overload; virtual;
195
     end;
196

197
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
198

199
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
200

201
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
202

203
implementation //############################################################### ■
204

205
uses System.Math;
206

207
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
208

209
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TPosval1D<_TItem_>
210

211
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
212

213
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
214

215
constructor TPosval1D<_TItem_>.Create( const Pos_:Single; const Val_:_TItem_ );
216
begin
217
     Pos := Pos_;
218
     Val := Val_;
219
end;
220

221
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
222

223
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TArray1D<_TItem_>
224

225
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
226

227
/////////////////////////////////////////////////////////////////////// メソッド
228

229
function TArray1D<_TItem_>.ElemsI( const X_:Integer ) :Integer;
230
begin
231
     Result := X_;
232
end;
233

234
function TArray1D<_TItem_>.ItemsI( const X_:Integer ) :Integer;
235
begin
236
     Result := _MargsX + X_;
237
end;
238

239
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
240

241
/////////////////////////////////////////////////////////////////////// アクセス
242

243
function TArray1D<_TItem_>.GetElemsN :Integer;
244
begin
245
     Result := _ElemsX;
246
end;
247

248
//------------------------------------------------------------------------------
249

250
function TArray1D<_TItem_>.GetElemsX :Integer;
251
begin
252
     Result := _ElemsX;
253
end;
254

255
//------------------------------------------------------------------------------
256

257
function TArray1D<_TItem_>.GetElems( const X_:Integer ) :_TItem_;
258
begin
259
     Result := _Elems[ ElemsI( X_ ) ];
260
end;
261

262
procedure TArray1D<_TItem_>.SetElems( const X_:Integer; const Elem_:_TItem_ );
263
begin
264
     _Elems[ ElemsI( X_ ) ] := Elem_;
265
end;
266

267
function TArray1D<_TItem_>.GetElemsP( const X_:Integer ) :_PItem_;
268
begin
269
     Result := @_Elems[ ElemsI( X_ ) ];
270
end;
271

272
//------------------------------------------------------------------------------
273

274
function TArray1D<_TItem_>.GetItemsX :Integer;
275
begin
276
     Result := _ItemsX;
277
end;
278

279
procedure TArray1D<_TItem_>.SetItemsX( const ItemsX_:Integer );
280
begin
281
     _ItemsX := ItemsX_;  MakeArray;
282
end;
283

284
function TArray1D<_TItem_>.GetMargsX :Integer;
285
begin
286
     Result := _MargsX;
287
end;
288

289
procedure TArray1D<_TItem_>.SetMargsX( const MargsX_:Integer );
290
begin
291
     _MargsX := MargsX_;  MakeArray;
292
end;
293

294
function TArray1D<_TItem_>.GetItemsN :Integer;
295
begin
296
     Result := _ItemsX;
297
end;
298

299
//------------------------------------------------------------------------------
300

301
function TArray1D<_TItem_>.GetItems( const X_:Integer ) :_TItem_;
302
begin
303
     Result := _Elems[ ItemsI( X_ ) ];
304
end;
305

306
procedure TArray1D<_TItem_>.SetItems( const X_:Integer; const Item_:_TItem_ );
307
begin
308
     _Elems[ ItemsI( X_ ) ] := Item_;
309
end;
310

311
function TArray1D<_TItem_>.GetItemsP( const X_:Integer ) :_PItem_;
312
begin
313
     Result := @_Elems[ ItemsI( X_ ) ];
314
end;
315

316
function TArray1D<_TItem_>.GetItem0P :Pointer;
317
begin
318
     Result := GetItemsP( 0 );
319
end;
320

321
/////////////////////////////////////////////////////////////////////// メソッド
322

323
procedure TArray1D<_TItem_>.MakeArray;
324
begin
325
     _ElemsX := _MargsX + _ItemsX + _MargsX;
326

327
     inherited;
328
end;
329

330
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
331

332
constructor TArray1D<_TItem_>.Create;
333
begin
334
     Create( 0, 0 );
335
end;
336

337
constructor TArray1D<_TItem_>.Create( const ItemsX_:Integer );
338
begin
339
     Create( ItemsX_, 0 );
340
end;
341

342
constructor TArray1D<_TItem_>.Create( const ItemsX_,MargsX_:Integer );
343
begin
344
     inherited Create;
345

346
     _OnChange := procedure begin end;
347

348
     _ItemsX := ItemsX_;
349
     _MargsX := MargsX_;
350
end;
351

352
destructor TArray1D<_TItem_>.Destroy;
353
begin
354

355
     inherited;
356
end;
357

358
/////////////////////////////////////////////////////////////////////// メソッド
359

360
procedure TArray1D<_TItem_>.MakeEdgeExten;
361
var
362
   M, H, X :Integer;
363
begin
364
     {                                    H
365
                                          |
366
         -3  -2  -1  00  +1  +2  +3  +4  +5  +6  +7  +8
367
         ○─○─○─●─●─●─●─●─●─○─○─○
368
         00  00  00  ・  ・  ・  ・  ・  ・  +5  +5  +5   }
369

370
     M := _MargsX  ;
371
     H := _ItemsX-1;
372

373
     for X := 0-M to 0-1 do Items[ X ] := Items[ 0 ];
374
     for X := H+1 to H+M do Items[ X ] := Items[ H ];
375
end;
376

377
//------------------------------------------------------------------------------
378

379
function TArray1D<_TItem_>.AddTail( const Item_:_TItem_ ) :Integer;
380
begin
381
     Result := _ItemsX;
382

383
     Inc( _ItemsX );  MakeArray;
384

385
     Items[ Result ] := Item_;
386
end;
387

388
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TCellArray1D<_TItem_>
389

390
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
391

392
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
393

394
/////////////////////////////////////////////////////////////////////// アクセス
395

396
function TCellArray1D<_TItem_>.GetPoinsX :Integer;
397
begin
398
     Result := CellsX + 1;
399
end;
400

401
procedure TCellArray1D<_TItem_>.SetPoinsX( const PoinsX_:Integer );
402
begin
403
     CellsX := PoinsX_ - 1;
404
end;
405

406
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
407

408
/////////////////////////////////////////////////////////////////////// メソッド
409

410
procedure TCellArray1D<_TItem_>.MakeEdgePerio;
411
var
412
   M, N, H, X :Integer;
413
begin
414
     //                                     H   N
415
     //                                     |   |
416
     //    -3  -2  -1  00  +1  +2  +3  +4  +5  +6  +7  +8
417
     //  ┠─╂─╂─┣━╋━╋━╋━╋━╋━┫─╂─╂─┨
418
     //    +3  +4  +5  ・  ・  ・  ・  ・  ・  00  +1  +2   }
419

420
     M := _MargsX;  N := _ItemsX;  H := _ItemsX-1;
421

422
     for X := 0-M to 0-1 do Items[ X ] := Items[ X + N ];
423
     for X := H+1 to H+M do Items[ X ] := Items[ X - N ];
424
end;
425

426
procedure TCellArray1D<_TItem_>.MakeEdgeMirro;
427
var
428
   M, N, H, X :Integer;
429
begin
430
     //                                     H   N
431
     //                                     |   |
432
     //    -3  -2  -1  00  +1  +2  +3  +4  +5  +6  +7  +8
433
     //  ┠─╂─╂─┣━╋━╋━╋━╋━╋━┫─╂─╂─┨
434
     //    +2  +1  00  ・  ・  ・  ・  ・  ・  +5  +4  +3
435

436
     M := _MargsX;  N := _ItemsX;  H := _ItemsX-1;
437

438
     for X := 0-M to 0-1 do Items[ X ] := Items[ 0 - X - 1 ];
439
     for X := H+1 to H+M do Items[ X ] := Items[ H - X + N ];
440
end;
441

442
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TPoinArray1D<_TItem_>
443

444
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
445

446
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
447

448
/////////////////////////////////////////////////////////////////////// アクセス
449

450
function TPoinArray1D<_TItem_>.GetCellsX :Integer;
451
begin
452
     Result := _ItemsX - 1;
453
end;
454

455
procedure TPoinArray1D<_TItem_>.SetCellsX( const CellsX_:Integer );
456
begin
457
     _ItemsX := CellsX_ + 1;  MakeArray;
458
end;
459

460
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
461

462
constructor TPoinArray1D<_TItem_>.Create( const CellsX_,MargsX_:Integer );
463
begin
464
     inherited Create( CellsX_+1,
465
                       MargsX_   );
466

467
end;
468

469
destructor TPoinArray1D<_TItem_>.Destroy;
470
begin
471

472
     inherited;
473
end;
474

475
/////////////////////////////////////////////////////////////////////// メソッド
476

477
procedure TPoinArray1D<_TItem_>.MakeEdgePerio;
478
var
479
   M, H, X :Integer;
480
begin
481
     //                                       H
482
     //                                       |
483
     //  -3  -2  -1  00  +1  +2  +3  +4  +5  +6  +7  +8  +9
484
     //  ┠─╂─╂─┣━╋━╋━╋━╋━╋━┫─╂─╂─┨
485
     //  +3  +4  +5  ・  ・  ・  ・  ・  ・  00  +1  +2  +3
486

487
     M := _MargsX;  H := _ItemsX-1;
488

489
     for X := 0-M to 0-1 do Items[ X ] := Items[ X + H ];
490
     for X := H+0 to H+M do Items[ X ] := Items[ X - H ];
491
end;
492

493
procedure TPoinArray1D<_TItem_>.MakeEdgeMirro;
494
var
495
   M, H, X :Integer;
496
begin
497
     //                                       H
498
     //                                       |
499
     //  -3  -2  -1  00  +1  +2  +3  +4  +5  +6  +7  +8  +9
500
     //  ┠─╂─╂─┣━╋━╋━╋━╋━╋━┫─╂─╂─┨
501
     //  +3  +2  +1  ・  ・  ・  ・  ・  ・  ・  +5  +4  +3
502

503
     M := _MargsX;  H := _ItemsX-1;
504

505
     for X := 0-M to 0-1 do Items[ X ] := Items[ -X       ];
506
     for X := H+1 to H+M do Items[ X ] := Items[ -X + 2*H ];
507
end;
508

509
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TPoinMap1D<_TItem_>
510

511
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
512

513
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
514

515
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
516

517
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TIrreMap1D<_TItem_>
518

519
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
520

521
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
522

523
/////////////////////////////////////////////////////////////////////// アクセス
524

525
function TIrreMap1D<_TItem_>.GetMinPosX :Single;
526
begin
527
     Result := Poins[ 0 ].Pos;
528
end;
529

530
function TIrreMap1D<_TItem_>.GetMaxPosX :Single;
531
begin
532
     Result := Poins[ CellsX ].Pos;
533
end;
534

535
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
536

537
/////////////////////////////////////////////////////////////////////// メソッド
538

539
function TIrreMap1D<_TItem_>.AddTail( const Pos_:Single; const Val_:_TItem_ ) :Integer;
540
begin
541
     Result := AddTail( TPosval1D<_TItem_>.Create( Pos_, Val_ ) );
542
end;
543

544
//------------------------------------------------------------------------------
545

546
function TIrreMap1D<_TItem_>.Insert( const PV_:TPosval1D<_TItem_> ) :Integer;
547
var
548
   H0, I0, I1 :Integer;
549
   G0, G1 :TPosval1D<_TItem_>;
550
begin
551
     H0 := CellsX;  CellsX := CellsX + 1;
552

553
     I1 := CellsX;
554
     for I0 := H0 downto 0 do
555
     begin
556
          G0 := Poins[ I0 ];
557

558
          if G0.Pos <= PV_.Pos then Break;
559

560
          Poins[ I1 ] := G0;
561

562
          I1 := I0;
563
     end;
564

565
     Poins[ I1 ] := PV_;
566

567
     Result := I1;
568
end;
569

570
function TIrreMap1D<_TItem_>.Insert( const Pos_:Single; const Val_:_TItem_ ) :Integer;
571
begin
572
     Result := Insert( TPosval1D<_TItem_>.Create( Pos_, Val_ ) );
573
end;
574

575
//------------------------------------------------------------------------------
576

577
function TIrreMap1D<_TItem_>.Interp( const I_:Single ) :_TItem_;
578
var
579
   I1 :Integer;
580
   Id :Single;
581
   G0, G1, G2, G3 :_TItem_;
582
begin
583
     I1 := Floor( I_ );  Id := I_ - I1;
584

585
     G0 := Poins[ I1-1 ].Val;
586
     G1 := Poins[ I1   ].Val;
587
     G2 := Poins[ I1+1 ].Val;
588
     G3 := Poins[ I1+2 ].Val;
589

590
     Result := Interp( G0, G1, G2, G3, Id );
591
end;
592

593
function TIrreMap1D<_TItem_>.InterpPos( const Pos_:Single ) :_TItem_;
594
var
595
   G0, G1, G2, G3 :TPosval1D<_TItem_>;
596
   I3 :Integer;
597
begin
598
     G1 := Poins[ -1 ];
599
     G2 := Poins[  0 ];
600
     G3 := Poins[ +1 ];
601
     for I3 := 2 to CellsX+1 do
602
     begin
603
          G0 := G1;  G1 := G2;  G2 := G3;  G3 := Poins[ I3 ];
604

605
          if Pos_ <= G2.Pos then Break;
606
     end;
607

608
     Result := InterpPos( G0, G1, G2, G3, Pos_ );
609
end;
610

611
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
612

613
//############################################################################## □
614

615
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
616

617
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
618

619
end. //######################################################################### ■
620

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

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

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

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