mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-06 23:40:39 +01:00
+ 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:
parent
bef1b84d63
commit
17c3354f9c
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user