+ provide IValueData's ExtractRawData(NoCopy)() in TValue (and also implement it for non-heap types)

git-svn-id: trunk@40693 -
This commit is contained in:
svenbarth 2018-12-29 19:20:54 +00:00
parent bef1b84d63
commit 17c3354f9c

View File

@ -125,6 +125,8 @@ type
function IsType(ATypeInfo: PTypeInfo): boolean; inline;
function TryAsOrdinal(out AResult: int64): boolean;
function GetReferenceToRawData: Pointer;
procedure ExtractRawData(ABuffer: Pointer);
procedure ExtractRawDataNoCopy(ABuffer: Pointer);
class operator := (const AValue: String): TValue; inline;
class operator := (AValue: LongInt): TValue; inline;
class operator := (AValue: Single): TValue; inline;
@ -2303,6 +2305,22 @@ begin
end;
end;
procedure TValue.ExtractRawData(ABuffer: Pointer);
begin
if Assigned(FData.FValueData) then
FData.FValueData.ExtractRawData(ABuffer)
else if Assigned(FData.FTypeInfo) then
Move((@FData.FAsPointer)^, ABuffer^, DataSize);
end;
procedure TValue.ExtractRawDataNoCopy(ABuffer: Pointer);
begin
if Assigned(FData.FValueData) then
FData.FValueData.ExtractRawDataNoCopy(ABuffer)
else if Assigned(FData.FTypeInfo) then
Move((@FData.FAsPointer)^, ABuffer^, DataSize);
end;
class operator TValue.:=(const AValue: String): TValue;
begin
Make(@AValue, System.TypeInfo(AValue), Result);