[Overview][Types][Classes][Index] Reference for unit 'DynamicArray' (#lazutils)

TPointerPointerArray.SetLength

Sets the dimensions for the array to the specified number of columns and rows.

Declaration

Source position: dynamicarray.pas line 44

public procedure TPointerPointerArray.SetLength(

  Cols: Integer;

  Rows: Integer

);

Arguments

Cols

  

Number of columns for the two-dimensional array.

Rows

  

Number of rows for the two-dimensional array.

Description

SetLength ensures that columns and/or rows are adjusted when the the new size values are smaller than the existing dimensions for the array. The OnDestroyItem event handler is signalled (when assigned) to perform actions needed for Pointers removed from the array elements.

Cols contains the new number of columns for the array.

Rows contains the new number of rows for the array.

See also

TPointerPointerArray.OnDestroyItem

  

Performs actions needed when the Pointer in an array element is removed from the array.

TPointerPointerArray.Arr

  

Provides indexed access Pointer values in the elements for the array.

TFPList

Example

program tarrayexample;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes,
  strings,
  DynamicArray;
  
type
  TArrayExampleClass = class
  private
    procedure doDestroyItem(Sender: Tobject; Col,Row: Integer;var Item: Pointer);
  end;

procedure TArrayExampleClass.doDestroyItem(Sender: Tobject; Col,Row: Integer;
  var Item: Pointer);
begin
  StrDispose(Item);
end;


var
  FCols: TPointerPointerArray;
  ex: TArrayExampleClass;

begin
  FCols := TPointerPointerArray.Create;
  ex    := TArrayExampleClass.Create;
  FCols.OnDestroyItem := @ex.doDestroyItem;

  FCols.SetLength(8,8);
  FCols.arr[0,0] := StrNew('string1');
  FCols.arr[4,7] := StrNew('string2');
  FCols.arr[4,3] := StrNew('string3');

  writeln('0,0:' + Pchar(FCols.arr[0,0]));
  writeln('4,7:' + Pchar(FCols.arr[4,7]));

  FCols.MoveColRow(True,4,5);
  writeln('after moving column 4 to 5');
  writeln('5,7:' + Pchar(FCols.arr[5,7]));
  writeln('before exchanging row 7 and 3:');
  writeln('5,3:' + Pchar(FCols.arr[5,3]));
  writeln('5,7:' + Pchar(FCols.arr[5,7]));

  FCols.ExchangeColRow(False,7,3);
  writeln('after exchanging row 7 and 3:');
  writeln('5,3:' + Pchar(FCols.arr[5,3]));
  writeln('5,7:' + Pchar(FCols.arr[5,7]));

  FCols.DeleteColRow(true,5);
  writeln('after deleting column 5:');

  try
    writeln('5,3:' + Pchar(FCols.arr[5,3])); //this raises an exception
  except
    writeln ('An exception has taken place be because 5,3 does not exist.');
  end;

  try
    writeln('5,7:' + Pchar(FCols.arr[5,7])); //this raises an exception
  except
    writeln ('An exception has taken place be because 5,7 does not exist.');
  end;

  FCols.Clear; writeln('after clear:');
  try
    writeln('4,7:' + Pchar(FCols.arr[4,7])); //this raises an exception
  except
    writeln ('An exception has taken place be because 4,7 does not exist.');
  end;

  FCols.Destroy;
  ex.Destroy;
  readln;
end.

Version 4.0 Generated 2025-05-03 Home