File: tarrayexample.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (81 lines) | stat: -rw-r--r-- 1,902 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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: Tarray;
  ex: TArrayExampleClass;

begin
  FCols := TArray.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.