From e9fcae46d9c00ead067399467606c37afb8e36ba Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sat, 28 Feb 2009 17:08:47 +0000 Subject: [PATCH] * replaced "tvardata" with "variant" in the interface for streaming variants (without pulling in the variants unit) git-svn-id: trunk@12824 - --- rtl/objpas/classes/classesh.inc | 8 ++--- rtl/objpas/classes/reader.inc | 52 ++++++++++----------------------- rtl/objpas/classes/writer.inc | 47 ++++++++++------------------- 3 files changed, 35 insertions(+), 72 deletions(-) diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc index 8ee5b93b3f..6283b3fcfc 100644 --- a/rtl/objpas/classes/classesh.inc +++ b/rtl/objpas/classes/classesh.inc @@ -1123,7 +1123,7 @@ type procedure ReadListBegin; procedure ReadListEnd; function ReadRootComponent(ARoot: TComponent): TComponent; - function ReadVariant: tvardata; + function ReadVariant: Variant; function ReadString: string; function ReadWideString: WideString; function ReadUnicodeString: UnicodeString; @@ -1175,7 +1175,7 @@ type procedure WriteIdent(const Ident: string); virtual; abstract; procedure WriteInteger(Value: Int64); virtual; abstract; procedure WriteUInt64(Value: QWord); virtual; abstract; - procedure WriteVariant(const Value: tvardata); virtual; abstract; + procedure WriteVariant(const Value: Variant); virtual; abstract; procedure WriteMethodName(const Name: String); virtual; abstract; procedure WriteSet(Value: LongInt; SetType: Pointer); virtual; abstract; procedure WriteString(const Value: String); virtual; abstract; @@ -1233,7 +1233,7 @@ type procedure WriteString(const Value: String); override; procedure WriteWideString(const Value: WideString); override; procedure WriteUnicodeString(const Value: UnicodeString); override; - procedure WriteVariant(const VarValue: tvardata);override; + procedure WriteVariant(const VarValue: Variant);override; end; TTextObjectWriter = class(TAbstractObjectWriter) @@ -1304,7 +1304,7 @@ type procedure WriteString(const Value: string); procedure WriteWideString(const Value: WideString); procedure WriteUnicodeString(const Value: UnicodeString); - procedure WriteVariant(const VarValue: tvardata); + procedure WriteVariant(const VarValue: Variant); property RootAncestor: TComponent read FRootAncestor write FRootAncestor; property OnFindAncestor: TFindAncestorEvent read FOnFindAncestor write FOnFindAncestor; property OnWriteMethodProperty: TWriteMethodPropertyEvent read FOnWriteMethodProperty write FOnWriteMethodProperty; diff --git a/rtl/objpas/classes/reader.inc b/rtl/objpas/classes/reader.inc index fa3139a32b..f8bd74b9f7 100644 --- a/rtl/objpas/classes/reader.inc +++ b/rtl/objpas/classes/reader.inc @@ -1075,7 +1075,7 @@ begin CheckValue(vaNull); end; -function TReader.ReadVariant: tvardata; +function TReader.ReadVariant: variant; var nv: TValueType; begin @@ -1089,72 +1089,53 @@ begin case nv of vaNil: begin - Result.vtype:=varEmpty; + Result:=system.unassigned; end; vaNull: begin - Result.vtype:=varNull; + Result:=system.null; end; { all integer sizes must be split for big endian systems } - vaInt8: + vaInt8,vaInt16,vaInt32: begin - Result.vtype:=varShortInt; - Result.vShortInt:=ReadInteger; - end; - vaInt16: - begin - Result.vtype:=varSmallInt; - Result.vSmallInt:=ReadInteger; - end; - vaInt32: - begin - Result.vtype:=varInteger; - Result.vInteger:=ReadInteger; + Result:=ReadInteger; end; vaInt64: begin - Result.vtype:=varInt64; - Result.vInt64:=ReadInt64; + Result:=ReadInt64; end; vaQWord: begin - Result.vtype:=varQWord; - Result.vInt64:=ReadInt64; + Result:=QWord(ReadInt64); end; vaFalse,vaTrue: begin - Result.vtype:=varBoolean; - Result.vBoolean:=(nv<>vaFalse); + Result:=(nv<>vaFalse); end; vaCurrency: begin - Result.vtype:=varCurrency; - Result.vCurrency:=ReadCurrency; + Result:=ReadCurrency; end; {$ifndef fpunone} vaSingle: begin - Result.vtype:=varSingle; - Result.vSingle:=ReadSingle; + Result:=ReadSingle; end; vaExtended: begin - Result.vtype:=varDouble; - Result.vDouble:=ReadFloat; + Result:=ReadFloat; end; vaDate: begin - Result.vtype:=varDate; - Result.vDate:=ReadDate; + Result:=ReadDate; end; {$endif fpunone} vaWString,vaUString,vaUTF8String: begin - Result.vtype:=varOlestr; - WideString(Pointer(Result.volestr)):=ReadWideString; + Result:=ReadWideString; end; else - raise EReadError.CreateFmt(SUnsupportedPropertyVariantType, [Ord(Result.vtype)]); + raise EReadError.CreateFmt(SUnsupportedPropertyVariantType, [Ord(nv)]); end; end; @@ -1274,7 +1255,6 @@ var Method: TMethod; Handled: Boolean; TmpStr: String; - VarTemp: tvardata; begin if not Assigned(PPropInfo(PropInfo)^.SetProc) then raise EReadError.Create(SReadOnlyProperty); @@ -1346,9 +1326,7 @@ begin SetWideStrProp(Instance,PropInfo,ReadWideString); tkVariant: begin - { can't use variant() typecast, pulls in variant unit } - VarTemp:=ReadVariant; - SetVariantProp(Instance,PropInfo,PVariant(@VarTemp)^); + SetVariantProp(Instance,PropInfo,ReadVariant); end; tkClass: case FDriver.NextValue of diff --git a/rtl/objpas/classes/writer.inc b/rtl/objpas/classes/writer.inc index 331ec0551d..27ded2f4d1 100644 --- a/rtl/objpas/classes/writer.inc +++ b/rtl/objpas/classes/writer.inc @@ -373,9 +373,9 @@ begin end; end; -procedure TBinaryObjectWriter.WriteVariant(const VarValue: tvardata); +procedure TBinaryObjectWriter.WriteVariant(const VarValue: variant); begin - case VarValue.vtype of + case tvardata(VarValue).vtype of varEmpty: begin WriteValue(vaNil); @@ -385,58 +385,42 @@ begin WriteValue(vaNull); end; { all integer sizes must be split for big endian systems } - varShortInt: + varShortInt,varSmallInt,varInteger,varInt64: begin - WriteInteger(VarValue.vshortint); - end; - varSmallInt: - begin - WriteInteger(VarValue.vsmallint); - end; - varInteger: - begin - WriteInteger(VarValue.vinteger); - end; - varInt64: - begin - WriteInteger(VarValue.vint64); + WriteInteger(VarValue); end; varQWord: begin - WriteUInt64(qword(VarValue.vint64)); + WriteUInt64(VarValue); end; varBoolean: begin - WriteBoolean(VarValue.vboolean); + WriteBoolean(VarValue); end; varCurrency: begin - WriteCurrency(VarValue.vcurrency); + WriteCurrency(VarValue); end; {$ifndef fpunone} varSingle: begin - WriteSingle(VarValue.vsingle); + WriteSingle(VarValue); end; varDouble: begin - WriteFloat(VarValue.vdouble); + WriteFloat(VarValue); end; varDate: begin - WriteDate(VarValue.vdate); + WriteDate(VarValue); end; {$endif fpunone} - varOleStr: + varOleStr,varString: begin - WriteWideString(widestring(pointer(VarValue.volestr))); - end; - varString: - begin - WriteWideString(AnsiString(VarValue.vstring)); + WriteWideString(VarValue); end; else - raise EWriteError.CreateFmt(SUnsupportedPropertyVariantType, [Ord(VarValue.vtype)]); + raise EWriteError.CreateFmt(SUnsupportedPropertyVariantType, [Ord(tvardata(VarValue).vtype)]); end; end; @@ -818,7 +802,7 @@ begin Driver.WriteInteger(Value); end; -procedure TWriter.WriteVariant(const VarValue: tvardata); +procedure TWriter.WriteVariant(const VarValue: Variant); begin Driver.WriteVariant(VarValue); end; @@ -1038,7 +1022,8 @@ begin if (CompareByte(VarValue,DefVarValue,sizeof(VarValue)) <> 0) then begin Driver.BeginProperty(FPropPath + PPropInfo(PropInfo)^.Name); - WriteVariant(VarValue); + { can't use variant() typecast, pulls in variants unit } + WriteVariant(pvariant(@VarValue)^); Driver.EndProperty; end; end;