mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 11:06:19 +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
|
TValue = record
|
||||||
private
|
private
|
||||||
FData: TValueData;
|
FData: TValueData;
|
||||||
|
function GetDataSize: SizeInt;
|
||||||
function GetTypeDataProp: PTypeData; inline;
|
function GetTypeDataProp: PTypeData; inline;
|
||||||
function GetTypeInfo: PTypeInfo; inline;
|
function GetTypeInfo: PTypeInfo; inline;
|
||||||
function GetTypeKind: TTypeKind; inline;
|
function GetTypeKind: TTypeKind; inline;
|
||||||
@ -87,6 +88,7 @@ type
|
|||||||
function ToString: String;
|
function ToString: String;
|
||||||
function IsType(ATypeInfo: PTypeInfo): boolean; inline;
|
function IsType(ATypeInfo: PTypeInfo): boolean; inline;
|
||||||
function TryAsOrdinal(out AResult: int64): boolean;
|
function TryAsOrdinal(out AResult: int64): boolean;
|
||||||
|
property DataSize: SizeInt read GetDataSize;
|
||||||
property Kind: TTypeKind read GetTypeKind;
|
property Kind: TTypeKind read GetTypeKind;
|
||||||
property TypeData: PTypeData read GetTypeDataProp;
|
property TypeData: PTypeData read GetTypeDataProp;
|
||||||
property TypeInfo: PTypeInfo read GetTypeInfo;
|
property TypeInfo: PTypeInfo read GetTypeInfo;
|
||||||
@ -573,6 +575,89 @@ begin
|
|||||||
result := GetTypeData(FData.FTypeInfo);
|
result := GetTypeData(FData.FTypeInfo);
|
||||||
end;
|
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;
|
function TValue.GetTypeInfo: PTypeInfo;
|
||||||
begin
|
begin
|
||||||
result := FData.FTypeInfo;
|
result := FData.FTypeInfo;
|
||||||
|
Loading…
Reference in New Issue
Block a user