Ver Fonte

* replaced "tvardata" with "variant" in the interface for streaming
variants (without pulling in the variants unit)

git-svn-id: trunk@12824 -

Jonas Maebe há 16 anos atrás
pai
commit
e9fcae46d9

+ 4 - 4
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;

+ 15 - 37
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:
-      begin
-        Result.vtype:=varShortInt;
-        Result.vShortInt:=ReadInteger;
-      end;
-    vaInt16:
-      begin
-        Result.vtype:=varSmallInt;
-        Result.vSmallInt:=ReadInteger;
-      end;
-    vaInt32:
+    vaInt8,vaInt16,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

+ 16 - 31
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:
-      begin
-        WriteWideString(widestring(pointer(VarValue.volestr)));
-      end;
-    varString:
+    varOleStr,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;