Ciao a tutti.
class procedure TSystem.arrayCopy(const src:PChar; srcOffset: Integer; var dst:PChar; dstOffset: integer; count: Integer); overload;
var
psrc : PChar;
pdst : PChar;
begin
psrc := src;
inc(psrc, srcOffset);
pdst := dst;
inc(pdst, dstOffset);
move(psrc,pdst,count);
end;
class procedure TSystem.arrayCopy(const src: PChar; srcOffset: Integer; var dst: TCharDynArray; dstOffset: integer; count: Integer);
begin
arrayCopy(src,srcOffset,PChar(dst), dstOffset, count);
end;
i vari offset sono a 0, per cui nell'incremento non influenzano nulla...
Qualcuno mi sa spiegare (debug docet) per quale motivo non mi copia una cippalippa da un puntatore all'altro?
dst rimane intonso ... era un PChar a stringa vuota e rimane un pchar a stringa vuota...
Stilgar
Modificato il codice. Ora falliscono gli unit test per altre cose ;)
class procedure TSystem.arrayCopy(const src: PChar; srcOffset: integer; var dst: PChar; dstOffset: integer; Count: integer); overload;
var
psrc: PChar;
begin
psrc := src;
psrc := psrc + PtrInt(srcOffset);
dst := dst + PtrInt(dstOffset);
move(psrc^, dst^, Count * SizeOf(char));
dst := dst - PtrInt(dstOffset);
end;
class procedure TSystem.arrayCopy(const src: PChar; srcOffset: integer; var dst: TCharDynArray; dstOffset: integer; Count: integer);
var
pdst: PChar absolute dst;
begin
arrayCopy(src, srcOffset, pdst, dstOffset, Count);
end;