La funzione NameFld restituisce il nome di una proprietà come TTypeInfoFieldAccessor
.
Questo vi permette di effettuare le seguenti operazioni:
MyPropertyName:= MyPropInfo.NameFld.ToString;
if (PropInfoA.NameFld = PropInfoB.NameFld) then begin
writeln('property names are the same');
end;
I negozi TTypeInfoFieldAccessor il nome di una proprietà in un shortstring internamente.
Poiché il compilatore NextGen non supporta le sequenze brevi, viene utilizzato un tipo PByte
.
(immagino l'autore non ha voluto lettiera la fonte con ifdefs e strappato i riferimenti PShortstring)
L'ingresso di Tail
è un PBYTE che punta al campo di lunghezza del ShortString interna.
Ecco il codice sorgente per coda.
function TTypeInfoFieldAccessor.Tail: PByte;
begin
Result:=
FData //Start of the shortstring
+ FData^ + //Length of the stringData
+ 1; //Add one for the length byte itself
end;
Perché shortstrings non sono zero finale, non si può fare un semplice "ciclo fino a quando il carattere null viene trovato" tipo di ciclo.
Quindi un ciclo dall'inizio alla coda può essere utilizzato per trasferire la sequenza di stringhe in una stringa normale.
Stranamente nel codice sorgente RTL effettivo il byte di lunghezza viene utilizzato ovunque anziché la funzione tail
; quindi sembra un avanzo.
Avrebbe avuto più senso includere una funzione size
e strappare lo tail
.