mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 23:19:24 +02:00
+ add TValue.DataSize property
git-svn-id: trunk@36965 -
This commit is contained in:
parent
ceb982930c
commit
cd73a46313
@ -65,6 +65,7 @@ type
|
||||
TValue = record
|
||||
private
|
||||
FData: TValueData;
|
||||
function GetDataSize: SizeInt;
|
||||
function GetTypeDataProp: PTypeData; inline;
|
||||
function GetTypeInfo: PTypeInfo; inline;
|
||||
function GetTypeKind: TTypeKind; inline;
|
||||
@ -87,6 +88,7 @@ type
|
||||
function ToString: String;
|
||||
function IsType(ATypeInfo: PTypeInfo): boolean; inline;
|
||||
function TryAsOrdinal(out AResult: int64): boolean;
|
||||
property DataSize: SizeInt read GetDataSize;
|
||||
property Kind: TTypeKind read GetTypeKind;
|
||||
property TypeData: PTypeData read GetTypeDataProp;
|
||||
property TypeInfo: PTypeInfo read GetTypeInfo;
|
||||
@ -573,6 +575,89 @@ begin
|
||||
result := GetTypeData(FData.FTypeInfo);
|
||||
end;
|
||||
|
||||
function TValue.GetDataSize: SizeInt;
|
||||
begin
|
||||
if IsEmpty then
|
||||
Result := 0
|
||||
else if Assigned(FData.FValueData) then
|
||||
Result := FData.FValueData.GetDataSize
|
||||
else begin
|
||||
Result := 0;
|
||||
case Kind of
|
||||
tkEnumeration,
|
||||
tkBool,
|
||||
tkInt64,
|
||||
tkQWord,
|
||||
tkInteger:
|
||||
case TypeData^.OrdType of
|
||||
otSByte,
|
||||
otUByte:
|
||||
Result := SizeOf(Byte);
|
||||
otSWord,
|
||||
otUWord:
|
||||
Result := SizeOf(Word);
|
||||
otSLong,
|
||||
otULong:
|
||||
Result := SizeOf(LongWord);
|
||||
otSQWord,
|
||||
otUQWord:
|
||||
Result := SizeOf(QWord);
|
||||
end;
|
||||
tkChar:
|
||||
Result := SizeOf(AnsiChar);
|
||||
tkFloat:
|
||||
case TypeData^.FloatType of
|
||||
ftSingle:
|
||||
Result := SizeOf(Single);
|
||||
ftDouble:
|
||||
Result := SizeOf(Double);
|
||||
ftExtended:
|
||||
Result := SizeOf(Extended);
|
||||
ftComp:
|
||||
Result := SizeOf(Comp);
|
||||
ftCurr:
|
||||
Result := SizeOf(Currency);
|
||||
end;
|
||||
tkSet:
|
||||
{ ToDo }
|
||||
Result := 0;
|
||||
tkMethod:
|
||||
{ ? }
|
||||
Result := SizeOf(TMethod);
|
||||
tkSString:
|
||||
Result := SizeOf(ShortString);
|
||||
tkVariant:
|
||||
Result := SizeOf(Variant);
|
||||
tkProcVar:
|
||||
Result := SizeOf(CodePointer);
|
||||
tkWChar:
|
||||
Result := SizeOf(WideChar);
|
||||
tkUChar:
|
||||
Result := SizeOf(UnicodeChar);
|
||||
tkFile:
|
||||
{ ToDo }
|
||||
Result := SizeOf(TTextRec);
|
||||
tkClass,
|
||||
tkHelper,
|
||||
tkClassRef,
|
||||
tkPointer:
|
||||
Result := SizeOf(Pointer);
|
||||
tkUnknown,
|
||||
tkLString,
|
||||
tkAString,
|
||||
tkWString,
|
||||
tkUString,
|
||||
tkObject,
|
||||
tkArray,
|
||||
tkRecord,
|
||||
tkInterface,
|
||||
tkDynArray,
|
||||
tkInterfaceRaw:
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TValue.GetTypeInfo: PTypeInfo;
|
||||
begin
|
||||
result := FData.FTypeInfo;
|
||||
|
Loading…
Reference in New Issue
Block a user