{...}
PItem = ^TItem;
TItem =
packed record
Data: TFloatingPoint;
Next: PItem;
end;
procedure TGestureList.Add(APoint: TFloatingPoint; pos: integer = -1);
var
cur_item, new_item: PItem;
begin
GetMem(new_item, SizeOf(TItem));
new_item^.Data := APoint;
if pos = -1
then
pos := ItemCount;
if pos = 0
then begin
cur_item := StartItem;
new_item^.next := cur_item;
StartItem := new_item;
Inc(ItemCount);
end
else
if pos <= ItemCount
then begin
cur_item := GetItem(pos-1);
new_item^.next := cur_item^.next;
cur_item^.next := new_item;
Inc(ItemCount);
end else Dispose(new_item);
end;
procedure TGestureList.Delete(Pos: integer);
var
del_item, cur_item: PItem;
begin
if StartItem <>
nil then
if pos = 0
then begin
del_item := StartItem;
StartItem := StartItem^.Next;
Dispose(del_item);
Dec(ItemCount);
end else
if pos < ItemCount
then begin
cur_item := GetItem(pos-1);
del_item := cur_item^.Next;
cur_item^.Next := del_item^.Next;
Dispose(del_item);
Dec(ItemCount);
end;
end;
procedure TGestureList.DelAllFromItem(
var Item: PItem);
begin
if Item <>
nil then begin
if Item^.Next <>
nil then DelAllFromItem(Item^.Next);
//Rekursion!
FreeMem(Item, SizeOf(TItem));
Item :=
nil;
end;
end;
{...}