Started integration of Variants into InputStreamr
authorPhilip Rauwolf <rauwolf@itestra.de>
Wed, 16 Jan 2013 12:48:54 +0000 (13:48 +0100)
committerPhilip Rauwolf <rauwolf@itestra.de>
Wed, 16 Jan 2013 12:48:59 +0000 (13:48 +0100)
src/CommonAPI/DBus/DBusInputStream.cpp
src/CommonAPI/DBus/DBusInputStream.h
src/CommonAPI/DBus/DBusOutputStream.h

index a5f729a..afed173 100644 (file)
@@ -112,6 +112,15 @@ void DBusInputStream::beginReadSerializableStruct(const SerializableStruct& seri
 
 void DBusInputStream::endReadSerializableStruct(const SerializableStruct& serializableStruct) { }
 
+void DBusInputStream::readSerializableVariant(SerializableVariant& serializableVariant) {
+    alignToBoundary(8);
+    uint8_t containedTypeIndex;
+    readValue(containedTypeIndex);
+    skipOverSignature();
+
+    serializableVariant.readFromInputStream(containedTypeIndex, *this);
+}
+
 
 void DBusInputStream::beginReadBoolVector() {
     beginReadGenericVector();
index 5b9ed71..1c54aca 100644 (file)
@@ -68,6 +68,8 @@ class DBusInputStream: public InputStream {
        virtual void beginReadSerializableStruct(const SerializableStruct& serializableStruct);
        virtual void endReadSerializableStruct(const SerializableStruct& serializableStruct);
 
+    virtual void readSerializableVariant(SerializableVariant& serializableVariant);
+
     virtual void beginReadBoolVector();
     virtual void beginReadInt8Vector();
     virtual void beginReadInt16Vector();
@@ -190,6 +192,12 @@ class DBusInputStream: public InputStream {
         bytesToRead_.push(vectorByteSize);
     }
 
+    inline void skipOverSignature() {
+        uint8_t length;
+        readValue(length);
+        assert(length < 256);
+    }
+
     char* dataBegin_;
     position_t currentDataPosition_;
     size_t dataLength_;
index ca13fb2..928fc29 100644 (file)
@@ -411,7 +411,7 @@ class DBusOutputStream: public OutputStream {
         writeBasicTypeValue((uint32_t) 0);
     }
 
-    inline void writeSignature(std::string signature) {
+    inline void writeSignature(const std::string& signature) {
         uint8_t length = (uint8_t) signature.length();
         assert(length < 256);
         *this << length;