Re: Fastcode CharPosRev B&V 0.6.0



some "^" forgotten

function CharPosRev_DLA_PAS_9_a(SearchChar: Char; const S: string): Integer;
var
P: PByteArray;
{ Made John's PAS_03 range checking save }
begin
Result := Length(S);
if Result > 0 then
begin
P := Pointer(Cardinal(S) + (Result - 12));
repeat

if P^[11] = Byte(SearchChar) then
Exit;
if P^[10] = Byte(SearchChar) then
begin
Dec(Result);
Break;
end;
if P^[9] = Byte(SearchChar) then
begin
Dec(Result, 2);
Break;
end;
if P^[8] = Byte(SearchChar) then
begin
Dec(Result, 3);
Break;
end;
Dec(Result, 4);
if Result <= 0 then
Break;

if P^[7] = Byte(SearchChar) then
Exit;
if P^[6] = Byte(SearchChar) then
begin
Dec(Result);
Break;
end;
if P^[5] = Byte(SearchChar) then
begin
Dec(Result, 2);
Break;
end;
if P^[4] = Byte(SearchChar) then
begin
Dec(Result, 3);
Break;
end;
Dec(Result, 4);
if Result <= 0 then
Break;

if P^[3] = Byte(SearchChar) then
Exit;
if P^[2] = Byte(SearchChar) then
begin
Dec(Result);
Break;
end;
if P^[1] = Byte(SearchChar) then
begin
Dec(Result, 2);
Break;
end;
if P^[0] = Byte(SearchChar) then
begin
Dec(Result, 3);
Break;
end;
Dec(Result, 4);
if Result <= 0 then
Break;
P := Pointer(Cardinal(P) - 12);
until False;
if Result < 0 then {Match Found before First Char}
Result := 0;
end;
end;


.


Quantcast