Ignore:
Timestamp:
Jun 25, 2024, 11:04:00 AM (4 months ago)
Author:
chronos
Message:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Packages/TemplateGenerics/Generic/GenericMatrix.inc

    r109 r324  
    2323    function GetItem(Index: TIndex): TGMatrixItem;
    2424    function GetCapacity: TIndex;
    25     function GetLast: TGMatrixItem;
    26     function GetFirst: TGMatrixItem;
    2725    procedure SetCapacity(const AValue: TIndex);
    28     procedure SetLast(AValue: TGMatrixItem);
    29     procedure SetFirst(AValue: TGMatrixItem);
    3026    procedure PutItemXY(X: TGMatrixIndexX; Y: TGMatrixIndexY; const AValue: TGMatrixItem); virtual;
    3127    procedure PutItem(Index: TIndex; const AValue: TGMatrixItem); virtual;
    3228    procedure SetCount(const AValue: TIndex);
    3329  public
    34     function Add(Item: TGMatrixItem): TIndex;
    35     procedure AddMatrix(Values: array of TRow);
    36     procedure AddList(List: TGMatrix);
    3730    procedure Assign(Source: TGMatrix);
    3831    procedure Clear; virtual;
    3932    procedure Contract;
    4033    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;
    4434    procedure Expand;
    45     function Extract(Item: TGMatrixItem): TGMatrixItem;
    4635    procedure Exchange(Index1, Index2: TIndex);
    47     property First: TGMatrixItem read GetFirst write SetFirst;
    4836    procedure FillAll(Value: TGMatrixItem);
    4937    procedure Fill(Start, Count: TIndex; Value: TGMatrixItem);
    5038    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);
    5939    procedure Merge(Index: TIndex; Source: TGMatrix; Proc: TMerge);
    6040    procedure Replace(Index: TIndex; Source: TGMatrix);
    61     function Remove(Item: TGMatrixItem): TIndex;
    6241    procedure Reverse;
    6342    procedure ReverseHorizontal;
    6443    procedure ReverseVertical;
    65     procedure Sort(Compare: TSortCompare);
    66     procedure SetArray(Values: array of TGMatrixItem);
    6744    property Count: TIndex read FCount write SetCount;
    6845    property Capacity: TIndex read GetCapacity write SetCapacity;
     
    7148    property Items[Index: TIndex]: TGMatrixItem
    7249      read GetItem write PutItem;
    73     property Last: TGMatrixItem read GetLast write SetLast;
    7450  end;
    7551
     
    7854
    7955{$IFDEF IMPLEMENTATION_USES}
    80 
    81 uses
    82   RtlConsts;
    8356
    8457resourcestring
     
    137110
    138111procedure TGMatrix.SetCapacity(const AValue: TIndex);
    139 var
    140   Y: TGMatrixIndexY;
    141112begin
    142113  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 begin
    146       SetLength(FItems[Y], AValue.X);
    147       Y := Y + 1;
    148     end;
    149   end;
    150   *)
    151114    SetLength(FItems, AValue.Y, AValue.X);
    152115  end;
     
    244207end;
    245208
    246 function TGMatrix.Extract(Item: TGMatrixItem): TGMatrixItem;
    247 var
    248   I: TIndex;
    249 begin
    250 (*  I := IndexOf(Item);
    251   if I >= 0 then begin
    252     Result := Item;
    253     Delete(I);
    254   end else
    255     raise EListError.CreateFmt(SListIndexError, [0]);
    256     *)
    257 end;
    258 
    259 function TGMatrix.IndexOf(Item: TGMatrixItem; Start: TIndex): TIndex;
    260 begin
    261 (*  Result := Start;
    262   while (Result < FCount) and
    263   not CompareMem(Addr(FItems[Result]), Addr(Item), SizeOf(TGMatrixItem)) do
    264     Result := Result + 1;
    265   if Result = FCount then Result := -1;
    266   *)
    267 end;
    268 
    269 procedure TGMatrix.Insert(Index: TIndex; Item: TGMatrixItem);
    270 begin
    271 (*  if (Index < 0) or (Index > FCount ) then
    272     raise EListError.CreateFmt(SListIndexError, [Index]);
    273   if FCount = Capacity then Expand;
    274   if Index < FCount then
    275     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 var
    283   I: TIndex;
    284 begin
    285 (*  I := 0;
    286   while (I < List.Count) do begin
    287     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 var
    295   I: TIndex;
    296 begin
    297 (*  if List.Count > 0 then begin
    298     Result := IndexOf(List[0], Start);
    299     if Result <> -1 then begin
    300       I := 1;
    301       while I < List.Count do begin
    302         if not CompareMem(Addr(FItems[Result + I]), Addr(List.FItems[I]), SizeOf(TGMatrixItem)) then begin
    303           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 begin
    315 (*  if FCount = 0 then
    316     raise EListError.CreateFmt(SListIndexError, [0])
    317   else
    318     Result := Items[FCount - 1];
    319     *)
    320 end;
    321 
    322 procedure TGMatrix.SetLast(AValue: TGMatrixItem);
    323 begin
    324 (*  if FCount = 0 then
    325     raise EListError.CreateFmt(SListIndexError, [0])
    326   else
    327     Items[FCount - 1] := AValue;
    328     *)
    329 end;
    330 
    331 function TGMatrix.GetFirst: TGMatrixItem;
    332 begin
    333 (*  if FCount = 0 then
    334     raise EListError.CreateFmt(SListIndexError, [0])
    335   else
    336     Result := Items[0];
    337     *)
    338 end;
    339 
    340 procedure TGMatrix.SetFirst(AValue: TGMatrixItem);
    341 begin
    342 (*  if FCount = 0 then
    343     raise EListError.CreateFmt(SListIndexError, [0])
    344   else
    345     Items[0] := AValue;
    346     *)
    347 end;
    348 
    349 procedure TGMatrix.Move(CurIndex, NewIndex: TIndex);
    350 var
    351   Temp: TGMatrixItem;
    352 begin
    353 (*  if ((CurIndex < 0) or (CurIndex > Count - 1)) then
    354     raise EListError.CreateFmt(SListIndexError, [CurIndex]);
    355   if ((NewIndex < 0) or (NewIndex > Count -1)) then
    356     raise EListError.CreateFmt(SlistIndexError, [NewIndex]);
    357   Temp := FItems[CurIndex];
    358   if NewIndex > CurIndex then begin
    359     System.Move(FItems[CurIndex + 1], FItems[CurIndex], (NewIndex - CurIndex) * SizeOf(TGMatrixItem));
    360   end else
    361   if NewIndex < CurIndex then begin
    362     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 var
    371   S: Integer;
    372   D: Integer;
    373 begin
    374 (*  if CurIndex < NewIndex then begin
    375     S := CurIndex + Count - 1;
    376     D := NewIndex + Count - 1;
    377     while S >= CurIndex do begin
    378       Move(S, D);
    379       S := S - 1;
    380       D := D - 1;
    381     end;
    382   end else
    383   if CurIndex > NewIndex then begin
    384     S := CurIndex;
    385     D := NewIndex;
    386     while S < (CurIndex + Count) do begin
    387       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 begin
    396 (*  Result := IndexOf(Item);
    397   if Result <> -1 then
    398     Delete(Result); *)
    399 end;
    400 
    401 function TGMatrix.EqualTo(List: TGMatrix): Boolean;
    402 var
    403   I: TIndex;
    404 begin
    405 (*  Result := Count = List.Count;
    406   if Result then begin
    407     I := 0;
    408     while I < Count do begin
    409       if not CompareMem(Addr(FItems[I]), Addr(List.FItems[I]), SizeOf(TGMatrixItem)) then begin
    410         Result := False;
    411         Break;
    412       end;
    413       I := I + 1;
    414     end;
    415   end; *)
    416 end;
    417 
    418209procedure TGMatrix.Reverse;
    419210var
     
    464255end;
    465256
    466 procedure TGMatrix.Sort(Compare: TSortCompare);
    467 begin
    468 (*  if FCount > 1 then
    469     QuickSort(0, FCount - 1, Compare); *)
    470 end;
    471 
    472 procedure TGMatrix.AddMatrix(Values: array of TRow);
    473 var
    474   I: TIndex;
    475 begin
    476 (*  I := 0;
    477   while I <= High(Values) do begin
    478     Add(Values[I]);
    479     I := I + 1;
    480   end; *)
    481 end;
    482 
    483 procedure TGMatrix.SetArray(Values: array of TGMatrixItem);
    484 var
    485   I: TIndex;
    486 begin
    487 (*  Clear;
    488   I := 0;
    489   while I <= High(Values) do begin
    490     Add(Values[I]);
    491     I := I + 1;
    492   end; *)
    493 end;
    494 
    495 procedure TGMatrix.InsertArray(Index: TIndex; Values: array of TGMatrixItem);
    496 var
    497   I: TIndex;
    498 begin
    499 (*  I := 0;
    500   while I <= High(Values) do begin
    501     Insert(Index + I, Values[I]);
    502     I := I + 1;
    503   end; *)
    504 end;
    505 
    506257function TGMatrix.Implode(RowSeparator, ColSeparator: string; Converter: TToStringConverter): string;
    507258var
     
    525276end;
    526277
    527 procedure TGMatrix.Explode(Text, Separator: string; Converter: TFromStringConverter; SlicesCount: Integer = -1);
    528 begin
    529 (*  Clear;
    530   while (Pos(Separator, Text) > 0) and
    531   ((Count < (SlicesCount - 1)) or (SlicesCount = -1)) do begin
    532     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 begin
    540 (*  if FCount = Capacity then
    541     Self.Expand;
    542   FItems[FCount] := Item;
    543   Result := FCount;
    544   FCount := FCount + 1; *)
    545 end;
    546 
    547 procedure TGMatrix.AddList(List: TGMatrix);
    548 var
    549   I: TIndex;
    550 begin
    551 (*  I := 0;
    552   while I < List.Count do begin
    553     Add(List[I]);
    554     I := I + 1;
    555   end; *)
    556 end;
    557 
    558278procedure TGMatrix.Clear;
    559279begin
    560280  Count := CreateIndex(0, 0);
    561281  Capacity := CreateIndex(0, 0);
    562 end;
    563 
    564 procedure TGMatrix.Delete(Index: TIndex);
    565 begin
    566 (*  if (Index < 0) or (Index >= FCount) then
    567     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 var
    576   I: TIndex;
    577 begin
    578 (*  I := Index;
    579   while I < (Index + Count) do begin
    580     Delete(Index);
    581     I := I + 1;
    582   end;
    583   *)
    584282end;
    585283
Note: See TracChangeset for help on using the changeset viewer.