diff options
-rw-r--r-- | packages/rtl-objpas/src/inc/rtti.pp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/packages/rtl-objpas/src/inc/rtti.pp b/packages/rtl-objpas/src/inc/rtti.pp index a325eed278..96f05e585b 100644 --- a/packages/rtl-objpas/src/inc/rtti.pp +++ b/packages/rtl-objpas/src/inc/rtti.pp @@ -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); |