"Goto" hin oder her, wenn statische voll Arrays wegen der stets max. Speichergöße ausfallen, dann würde ich mit 2 zusätzlichen IndexPointerArrays arbeiten, welche beim Update der Daten in "RenewData(Map);" mit erzeugt werden... das Resultat ist dann schon "etwas schöner" und auch schneller
Nachfolgendes nur mal so als PyseudoCode, weil ev. ein paar "End" oder Pointer noch noch falsch
Code:
function RaiseAlert(): Boolean;
var
liMap,liCha: Integer;
pMapIdx,pChaIdx: ^<DataType>;
label
GotoLabel;
begin
GotoLabel:
while (ThrottleLoop) and not (Terminated) do
begin
pMapIdx:=@MapIdx[0];
for liMap := 0 to Length(MapIdx) - 1 do
begin
pChaIdx:=@CharacteristicsIdx[0];
for liCha := 0 to Length(CharacteristicsIdx) - 1 do
begin
if pChaIdx^ = pMapIdx^ then
begin
if (InjectionPass) then
begin
InjectionPass := false;
Goto GotoLabel;
end else begin
Result := true;
Exit;
end;
end;
end;
inc(pChaIdx);
end;
inc(pMapIdx);
end;
end;
RenewData(Map);
end;
Result := false;
end;