|
@@ -1,30 +1,30 @@
|
|
{$mode objfpc}
|
|
{$mode objfpc}
|
|
|
|
|
|
type
|
|
type
|
|
- generic PListItem<_T>=^specialize TListItem<_T>;
|
|
|
|
- generic TListItem<_T>=record
|
|
|
|
- data : _T;
|
|
|
|
- next : specialize PListItem<_T>;
|
|
|
|
- end;
|
|
|
|
-
|
|
|
|
generic TList<_T>=class(TObject)
|
|
generic TList<_T>=class(TObject)
|
|
- first : specialize PListItem<_T>;
|
|
|
|
|
|
+ type
|
|
|
|
+ PListItem = ^TListItem;
|
|
|
|
+ TListItem = record
|
|
|
|
+ data : _T;
|
|
|
|
+ next : PListItem;
|
|
|
|
+ end;
|
|
|
|
+ var
|
|
|
|
+ first : PListItem;
|
|
procedure Add(item: _T);
|
|
procedure Add(item: _T);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TList.Add(data: _T);
|
|
|
|
|
|
+procedure TList.Add(item: _T);
|
|
var
|
|
var
|
|
- newitem : specialize PListItem<_T>;
|
|
|
|
|
|
+ newitem : PListItem;
|
|
begin
|
|
begin
|
|
new(newitem);
|
|
new(newitem);
|
|
- newitem.data:=data;
|
|
|
|
- newitem.next:=first;
|
|
|
|
|
|
+ newitem^.data:=item;
|
|
|
|
+ newitem^.next:=first;
|
|
end;
|
|
end;
|
|
|
|
|
|
type
|
|
type
|
|
TMyIntList = specialize TList<integer>;
|
|
TMyIntList = specialize TList<integer>;
|
|
TMyStringList = specialize TList<string>;
|
|
TMyStringList = specialize TList<string>;
|
|
-
|
|
|
|
var
|
|
var
|
|
ilist : TMyIntList;
|
|
ilist : TMyIntList;
|
|
slist : TMyStringList;
|
|
slist : TMyStringList;
|
|
@@ -35,16 +35,17 @@ begin
|
|
ilist.Add(someInt);
|
|
ilist.Add(someInt);
|
|
ilist.Add(someInt+1);
|
|
ilist.Add(someInt+1);
|
|
writeln(ilist.first^.data);
|
|
writeln(ilist.first^.data);
|
|
- if ilist.data<>10 then
|
|
|
|
|
|
+ if ilist.first^.data<>10 then
|
|
halt(1);
|
|
halt(1);
|
|
writeln(ilist.first^.next^.data);
|
|
writeln(ilist.first^.next^.data);
|
|
- if ilist.data<>11 then
|
|
|
|
|
|
+ if ilist.first^.data<>11 then
|
|
halt(1);
|
|
halt(1);
|
|
|
|
|
|
slist := TMyStringList.Create;
|
|
slist := TMyStringList.Create;
|
|
slist.Add('Test1');
|
|
slist.Add('Test1');
|
|
slist.Add('Test2');
|
|
slist.Add('Test2');
|
|
- writeln(slist.data);
|
|
|
|
- if slist.data<>'Test1' then
|
|
|
|
|
|
+ writeln(slist.first^.data);
|
|
|
|
+ if slist.first^.data<>'Test1' then
|
|
halt(1);
|
|
halt(1);
|
|
|
|
+ writeln('ok');
|
|
end.
|
|
end.
|