Changeset 324 for trunk/Packages/TemplateGenerics/Generic/GenericMatrix.inc
- Timestamp:
- Jun 25, 2024, 11:04:00 AM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Packages/TemplateGenerics/Generic/GenericMatrix.inc
r109 r324 23 23 function GetItem(Index: TIndex): TGMatrixItem; 24 24 function GetCapacity: TIndex; 25 function GetLast: TGMatrixItem;26 function GetFirst: TGMatrixItem;27 25 procedure SetCapacity(const AValue: TIndex); 28 procedure SetLast(AValue: TGMatrixItem);29 procedure SetFirst(AValue: TGMatrixItem);30 26 procedure PutItemXY(X: TGMatrixIndexX; Y: TGMatrixIndexY; const AValue: TGMatrixItem); virtual; 31 27 procedure PutItem(Index: TIndex; const AValue: TGMatrixItem); virtual; 32 28 procedure SetCount(const AValue: TIndex); 33 29 public 34 function Add(Item: TGMatrixItem): TIndex;35 procedure AddMatrix(Values: array of TRow);36 procedure AddList(List: TGMatrix);37 30 procedure Assign(Source: TGMatrix); 38 31 procedure Clear; virtual; 39 32 procedure Contract; 40 33 function CreateIndex(X: TGMatrixIndexY; Y: TGMatrixIndexX): TIndex; 41 procedure Delete(Index: TIndex); virtual;42 procedure DeleteItems(Index, Count: TIndex);43 function EqualTo(List: TGMatrix): Boolean;44 34 procedure Expand; 45 function Extract(Item: TGMatrixItem): TGMatrixItem;46 35 procedure Exchange(Index1, Index2: TIndex); 47 property First: TGMatrixItem read GetFirst write SetFirst;48 36 procedure FillAll(Value: TGMatrixItem); 49 37 procedure Fill(Start, Count: TIndex; Value: TGMatrixItem); 50 38 function Implode(RowSeparator, ColSeparator: string; Converter: TToStringConverter): string; 51 procedure Explode(Text, Separator: string; Converter: TFromStringConverter; SlicesCount: Integer = -1);52 function IndexOf(Item: TGMatrixItem; Start: TIndex): TIndex;53 function IndexOfList(List: TGMatrix; Start: TIndex): TIndex;54 procedure Insert(Index: TIndex; Item: TGMatrixItem);55 procedure InsertList(Index: TIndex; List: TGMatrix);56 procedure InsertArray(Index: TIndex; Values: array of TGMatrixItem);57 procedure Move(CurIndex, NewIndex: TIndex);58 procedure MoveItems(CurIndex, NewIndex, Count: TIndex);59 39 procedure Merge(Index: TIndex; Source: TGMatrix; Proc: TMerge); 60 40 procedure Replace(Index: TIndex; Source: TGMatrix); 61 function Remove(Item: TGMatrixItem): TIndex;62 41 procedure Reverse; 63 42 procedure ReverseHorizontal; 64 43 procedure ReverseVertical; 65 procedure Sort(Compare: TSortCompare);66 procedure SetArray(Values: array of TGMatrixItem);67 44 property Count: TIndex read FCount write SetCount; 68 45 property Capacity: TIndex read GetCapacity write SetCapacity; … … 71 48 property Items[Index: TIndex]: TGMatrixItem 72 49 read GetItem write PutItem; 73 property Last: TGMatrixItem read GetLast write SetLast;74 50 end; 75 51 … … 78 54 79 55 {$IFDEF IMPLEMENTATION_USES} 80 81 uses82 RtlConsts;83 56 84 57 resourcestring … … 137 110 138 111 procedure TGMatrix.SetCapacity(const AValue: TIndex); 139 var140 Y: TGMatrixIndexY;141 112 begin 142 113 if (Capacity.X <> AValue.X) and (Capacity.Y <> AValue.Y) then begin 143 (* SetLength(FItems, AValue.Y);144 Y := 0;145 while Y < Length(FItems) do begin146 SetLength(FItems[Y], AValue.X);147 Y := Y + 1;148 end;149 end;150 *)151 114 SetLength(FItems, AValue.Y, AValue.X); 152 115 end; … … 244 207 end; 245 208 246 function TGMatrix.Extract(Item: TGMatrixItem): TGMatrixItem;247 var248 I: TIndex;249 begin250 (* I := IndexOf(Item);251 if I >= 0 then begin252 Result := Item;253 Delete(I);254 end else255 raise EListError.CreateFmt(SListIndexError, [0]);256 *)257 end;258 259 function TGMatrix.IndexOf(Item: TGMatrixItem; Start: TIndex): TIndex;260 begin261 (* Result := Start;262 while (Result < FCount) and263 not CompareMem(Addr(FItems[Result]), Addr(Item), SizeOf(TGMatrixItem)) do264 Result := Result + 1;265 if Result = FCount then Result := -1;266 *)267 end;268 269 procedure TGMatrix.Insert(Index: TIndex; Item: TGMatrixItem);270 begin271 (* if (Index < 0) or (Index > FCount ) then272 raise EListError.CreateFmt(SListIndexError, [Index]);273 if FCount = Capacity then Expand;274 if Index < FCount then275 System.Move(FItems[Index], FItems[Index + 1], (FCount - Index) * SizeOf(TGMatrixItem));276 FItems[Index] := Item;277 FCount := FCount + 1;278 *)279 end;280 281 procedure TGMatrix.InsertList(Index: TIndex; List: TGMatrix);282 var283 I: TIndex;284 begin285 (* I := 0;286 while (I < List.Count) do begin287 Insert(Index + I, List[I]);288 I := I + 1;289 end;290 *)291 end;292 293 function TGMatrix.IndexOfList(List: TGMatrix; Start: TIndex): TIndex;294 var295 I: TIndex;296 begin297 (* if List.Count > 0 then begin298 Result := IndexOf(List[0], Start);299 if Result <> -1 then begin300 I := 1;301 while I < List.Count do begin302 if not CompareMem(Addr(FItems[Result + I]), Addr(List.FItems[I]), SizeOf(TGMatrixItem)) then begin303 Result := -1;304 Break;305 end;306 I := I + 1;307 end;308 end;309 end else Result := -1;310 *)311 end;312 313 function TGMatrix.GetLast: TGMatrixItem;314 begin315 (* if FCount = 0 then316 raise EListError.CreateFmt(SListIndexError, [0])317 else318 Result := Items[FCount - 1];319 *)320 end;321 322 procedure TGMatrix.SetLast(AValue: TGMatrixItem);323 begin324 (* if FCount = 0 then325 raise EListError.CreateFmt(SListIndexError, [0])326 else327 Items[FCount - 1] := AValue;328 *)329 end;330 331 function TGMatrix.GetFirst: TGMatrixItem;332 begin333 (* if FCount = 0 then334 raise EListError.CreateFmt(SListIndexError, [0])335 else336 Result := Items[0];337 *)338 end;339 340 procedure TGMatrix.SetFirst(AValue: TGMatrixItem);341 begin342 (* if FCount = 0 then343 raise EListError.CreateFmt(SListIndexError, [0])344 else345 Items[0] := AValue;346 *)347 end;348 349 procedure TGMatrix.Move(CurIndex, NewIndex: TIndex);350 var351 Temp: TGMatrixItem;352 begin353 (* if ((CurIndex < 0) or (CurIndex > Count - 1)) then354 raise EListError.CreateFmt(SListIndexError, [CurIndex]);355 if ((NewIndex < 0) or (NewIndex > Count -1)) then356 raise EListError.CreateFmt(SlistIndexError, [NewIndex]);357 Temp := FItems[CurIndex];358 if NewIndex > CurIndex then begin359 System.Move(FItems[CurIndex + 1], FItems[CurIndex], (NewIndex - CurIndex) * SizeOf(TGMatrixItem));360 end else361 if NewIndex < CurIndex then begin362 System.Move(FItems[NewIndex], FItems[NewIndex + 1], (CurIndex - NewIndex) * SizeOf(TGMatrixItem));363 end;364 FItems[NewIndex] := Temp;365 //Delete(CurIndex);366 //Insert(NewIndex, Temp);*)367 end;368 369 procedure TGMatrix.MoveItems(CurIndex, NewIndex, Count: TIndex);370 var371 S: Integer;372 D: Integer;373 begin374 (* if CurIndex < NewIndex then begin375 S := CurIndex + Count - 1;376 D := NewIndex + Count - 1;377 while S >= CurIndex do begin378 Move(S, D);379 S := S - 1;380 D := D - 1;381 end;382 end else383 if CurIndex > NewIndex then begin384 S := CurIndex;385 D := NewIndex;386 while S < (CurIndex + Count) do begin387 Move(S, D);388 S := S + 1;389 D := D + 1;390 end;391 end;*)392 end;393 394 function TGMatrix.Remove(Item: TGMatrixItem): TIndex;395 begin396 (* Result := IndexOf(Item);397 if Result <> -1 then398 Delete(Result); *)399 end;400 401 function TGMatrix.EqualTo(List: TGMatrix): Boolean;402 var403 I: TIndex;404 begin405 (* Result := Count = List.Count;406 if Result then begin407 I := 0;408 while I < Count do begin409 if not CompareMem(Addr(FItems[I]), Addr(List.FItems[I]), SizeOf(TGMatrixItem)) then begin410 Result := False;411 Break;412 end;413 I := I + 1;414 end;415 end; *)416 end;417 418 209 procedure TGMatrix.Reverse; 419 210 var … … 464 255 end; 465 256 466 procedure TGMatrix.Sort(Compare: TSortCompare);467 begin468 (* if FCount > 1 then469 QuickSort(0, FCount - 1, Compare); *)470 end;471 472 procedure TGMatrix.AddMatrix(Values: array of TRow);473 var474 I: TIndex;475 begin476 (* I := 0;477 while I <= High(Values) do begin478 Add(Values[I]);479 I := I + 1;480 end; *)481 end;482 483 procedure TGMatrix.SetArray(Values: array of TGMatrixItem);484 var485 I: TIndex;486 begin487 (* Clear;488 I := 0;489 while I <= High(Values) do begin490 Add(Values[I]);491 I := I + 1;492 end; *)493 end;494 495 procedure TGMatrix.InsertArray(Index: TIndex; Values: array of TGMatrixItem);496 var497 I: TIndex;498 begin499 (* I := 0;500 while I <= High(Values) do begin501 Insert(Index + I, Values[I]);502 I := I + 1;503 end; *)504 end;505 506 257 function TGMatrix.Implode(RowSeparator, ColSeparator: string; Converter: TToStringConverter): string; 507 258 var … … 525 276 end; 526 277 527 procedure TGMatrix.Explode(Text, Separator: string; Converter: TFromStringConverter; SlicesCount: Integer = -1);528 begin529 (* Clear;530 while (Pos(Separator, Text) > 0) and531 ((Count < (SlicesCount - 1)) or (SlicesCount = -1)) do begin532 Add(Converter(Copy(Text, 1, Pos(Separator, Text) - 1)));533 System.Delete(Text, 1, Pos(Separator, Text) + Length(Separator) - 1);534 end;535 Add(Converter(Text)); *)536 end;537 538 function TGMatrix.Add(Item: TGMatrixItem): TIndex;539 begin540 (* if FCount = Capacity then541 Self.Expand;542 FItems[FCount] := Item;543 Result := FCount;544 FCount := FCount + 1; *)545 end;546 547 procedure TGMatrix.AddList(List: TGMatrix);548 var549 I: TIndex;550 begin551 (* I := 0;552 while I < List.Count do begin553 Add(List[I]);554 I := I + 1;555 end; *)556 end;557 558 278 procedure TGMatrix.Clear; 559 279 begin 560 280 Count := CreateIndex(0, 0); 561 281 Capacity := CreateIndex(0, 0); 562 end;563 564 procedure TGMatrix.Delete(Index: TIndex);565 begin566 (* if (Index < 0) or (Index >= FCount) then567 raise EListError.CreateFmt(SListIndexError, [Index]);568 FCount := FCount - 1;569 System.Move(FItems[Index + 1], FItems[Index], (FCount - Index) * SizeOf(TGMatrixItem));570 Contract;571 *)572 end;573 574 procedure TGMatrix.DeleteItems(Index, Count: TIndex);575 var576 I: TIndex;577 begin578 (* I := Index;579 while I < (Index + Count) do begin580 Delete(Index);581 I := I + 1;582 end;583 *)584 282 end; 585 283
Note:
See TracChangeset
for help on using the changeset viewer.