* Result ist irgendwie verständlicher, als soein Funktionsname. (vorallem kann man da auch Lesend drauf zugreifen)
* booked vor dem New setzen, da es bei OutOfMemory nie hinzugezählt würde, aber im Except wir immer abgezogen.
Delphi-Quellcode:
function AddSpark(aData : TSpark) : EList;
var
help : PSparkList;
begin
help :=
nil;
try
Inc(booked);
New(help);
help^.Data := aData;
help^.pNext := pRoot;
pRoot := help;
Result := LOK;
except
on EOutOfMemory
do
Result := LNoMemory
else
Result := LUndefined;
if Assigned(help)
then
begin
Dec(booked);
Dispose(help);
end;
end;
end;
Aber im Prinzip seh ich hier nur eine Exceptionquelle.
Das Andere sind wohl alles nur "harmlose" Typen/Variablen.
Delphi-Quellcode:
function AddSpark(aData : TSpark) : EList;
var
help : PSparkList;
begin
try
New(help);
Inc(booked);
help^.Data := aData;
help^.pNext := pRoot;
pRoot := help;
Result := LOK;
except
Result := LNoMemory;
end;
end;
// oder von mir aus auch so
function AddSpark(aData : TSpark) : EList;
var
help : PSparkList;
begin
try
New(help);
except
Exit(LNoMemory); // Result := LNoMemory; Exit;
end;
Inc(booked);
help^.Data := aData;
help^.pNext := pRoot;
pRoot := help;
Result := LOK;
end;
Standardmäßig braucht man bei help^.Data nicht manuell dereferenzieren. (Delphi macht es bei help.Data von alleine)