[haiku-commits] r33901 - in haiku/trunk: headers/private/shared src/kits/shared

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 5 Nov 2009 18:24:58 +0100 (CET)

Author: bonefish
Date: 2009-11-05 18:24:58 +0100 (Thu, 05 Nov 2009)
New Revision: 33901
Changeset: http://dev.haiku-os.org/changeset/33901/haiku

Modified:
   haiku/trunk/headers/private/shared/Variant.h
   haiku/trunk/src/kits/shared/Variant.cpp
Log:
Added methods AddToMessage() and SetFromMessage() to add the value of the
variant as a field to a message, respectively initialize the variant from
one.


Modified: haiku/trunk/headers/private/shared/Variant.h
===================================================================
--- haiku/trunk/headers/private/shared/Variant.h        2009-11-05 17:22:14 UTC 
(rev 33900)
+++ haiku/trunk/headers/private/shared/Variant.h        2009-11-05 17:24:58 UTC 
(rev 33901)
@@ -19,6 +19,9 @@
 };
 
 
+class BMessage;
+
+
 class BVariant {
 public:
        inline                                          BVariant();
@@ -95,6 +98,11 @@
                                                                        // has 
effect only on scalar types (pointer
                                                                        // 
counting as scalar, not string, though)
 
+                       status_t                        AddToMessage(BMessage& 
message,
+                                                                       const 
char* fieldName) const;
+                       status_t                        SetFromMessage(const 
BMessage& message,
+                                                                       const 
char* fieldName);
+
        static  size_t                          SizeOfType(type_code type);
        static  bool                            TypeIsNumber(type_code type);
        static  bool                            TypeIsInteger(type_code type,

Modified: haiku/trunk/src/kits/shared/Variant.cpp
===================================================================
--- haiku/trunk/src/kits/shared/Variant.cpp     2009-11-05 17:22:14 UTC (rev 
33900)
+++ haiku/trunk/src/kits/shared/Variant.cpp     2009-11-05 17:24:58 UTC (rev 
33901)
@@ -10,6 +10,7 @@
 #include <string.h>
 
 #include <ByteOrder.h>
+#include <Message.h>
 
 
 template<typename NumberType>
@@ -356,6 +357,65 @@
 }
 
 
+status_t
+BVariant::AddToMessage(BMessage& message, const char* fieldName) const
+{
+       switch (fType) {
+               case B_BOOL_TYPE:
+                       return message.AddBool(fieldName, fBool);
+               case B_INT8_TYPE:
+                       return fInt8 != 0;
+                       return message.AddInt8(fieldName, fInt8);
+               case B_UINT8_TYPE:
+                       return message.AddUInt8(fieldName, fUInt8);
+               case B_INT16_TYPE:
+                       return message.AddInt16(fieldName, fInt16);
+               case B_UINT16_TYPE:
+                       return message.AddUInt16(fieldName, fUInt16);
+               case B_INT32_TYPE:
+                       return message.AddInt32(fieldName, fInt32);
+               case B_UINT32_TYPE:
+                       return message.AddUInt32(fieldName, fUInt32);
+               case B_INT64_TYPE:
+                       return message.AddInt64(fieldName, fInt64);
+               case B_UINT64_TYPE:
+                       return message.AddUInt64(fieldName, fUInt64);
+               case B_FLOAT_TYPE:
+                       return message.AddFloat(fieldName, fFloat);
+               case B_DOUBLE_TYPE:
+                       return message.AddDouble(fieldName, fDouble);
+               case B_POINTER_TYPE:
+                       return message.AddPointer(fieldName, fPointer);
+               case B_STRING_TYPE:
+                       return message.AddString(fieldName, fString);
+               default:
+                       return B_UNSUPPORTED;
+       }
+}
+
+
+status_t
+BVariant::SetFromMessage(const BMessage& message, const char* fieldName)
+{
+       // get the message field info
+       type_code type;
+       int32 count;
+       status_t error = message.GetInfo(fieldName, &type, &count);
+       if (error != B_OK)
+               return error;
+
+       // get the data
+       const void* data;
+       ssize_t numBytes;
+       error = message.FindData(fieldName, type, &data, &numBytes);
+       if (error != B_OK)
+               return error;
+
+       // init the object
+       return SetToTypedData(data, type);
+}
+
+
 /*static*/ size_t
 BVariant::SizeOfType(type_code type)
 {


Other related posts:

  • » [haiku-commits] r33901 - in haiku/trunk: headers/private/shared src/kits/shared - ingo_weinhold