From ed4ce5a098f857ee90a7bf1f08c165ec8aafc110 Mon Sep 17 00:00:00 2001 From: Philip Rauwolf Date: Tue, 15 Jan 2013 12:29:48 +0100 Subject: [PATCH] Further testing --- src/test/DBusTypeStreamTest.cpp | 99 +++++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 38 deletions(-) diff --git a/src/test/DBusTypeStreamTest.cpp b/src/test/DBusTypeStreamTest.cpp index 14b13cc..383fc24 100644 --- a/src/test/DBusTypeStreamTest.cpp +++ b/src/test/DBusTypeStreamTest.cpp @@ -189,29 +189,12 @@ class DBusTypeStream: public TypeStream { -template -struct TypeWriter { -inline static void writeType(TypeStream& typeStream) { -// if() { - _Type::writeToTypeStream(typeStream); -// } else if(std::is_base_of::value) { -// typeStream.writeVariantType(); -// } -} -}; - - - template -struct TypeWriter<_Type, typename std::enable_if::value, _Type>::type> { -inline static void writeType(TypeStream& typeStream) { - typeStream.writeVariantType(); -} -}; +struct BasicTypeWriter; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType(TypeStream& typeStream) { typeStream.writeBoolType(); } @@ -219,28 +202,28 @@ inline static void writeType(TypeStream& typeStream) { template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeInt8Type(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeInt16Type(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeInt32Type(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeInt64Type(); } @@ -248,28 +231,28 @@ inline static void writeType (TypeStream& typeStream) { template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeUInt8Type(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeUInt16Type(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeUInt32Type(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeUInt64Type(); } @@ -277,14 +260,14 @@ inline static void writeType (TypeStream& typeStream) { template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeFloatType(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeDoubleType(); } @@ -292,28 +275,28 @@ inline static void writeType (TypeStream& typeStream) { template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeStringType(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeByteBufferType(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeVersionType(); } }; template<> -struct TypeWriter { +struct BasicTypeWriter { inline static void writeType (TypeStream& typeStream) { typeStream.writeVariantType(); } @@ -321,21 +304,21 @@ inline static void writeType (TypeStream& typeStream) { template -struct TypeWriter> { +struct BasicTypeWriter> { inline static void writeType(TypeStream& typeStream) { typeStream.writeVectorType(); - TypeWriter<_VectorElementType>::writeType(typeStream); + BasicTypeWriter<_VectorElementType>::writeType(typeStream); } }; template -struct TypeWriter> { +struct BasicTypeWriter> { inline static void writeType(TypeStream& typeStream) { typeStream.beginWriteMapType(); - TypeWriter<_KeyType>::writeType(typeStream); - TypeWriter<_ValueType>::writeType(typeStream); + BasicTypeWriter<_KeyType>::writeType(typeStream); + BasicTypeWriter<_ValueType>::writeType(typeStream); typeStream.endWriteMapType(); } @@ -343,6 +326,46 @@ inline static void writeType(TypeStream& typeStream) { + +template +struct StructTypeWriter; + + +template +struct StructTypeWriter<_Type, true> { +inline static void writeType(TypeStream& typeStream) { + _Type::writeToTypeStream(typeStream); +} +}; + +template +struct StructTypeWriter<_Type, false>: public BasicTypeWriter<_Type> { +}; + + + + +template +struct VariantTypeWriter; + + +template +struct VariantTypeWriter<_Type, true> { +inline static void writeType(TypeStream& typeStream) { + typeStream.writeVariantType(); +} +}; + +template +struct VariantTypeWriter<_Type, false>: public StructTypeWriter<_Type, std::is_base_of::value> { +}; + + +template +struct TypeWriter: public VariantTypeWriter<_Type, std::is_base_of::value>{}; + + + //############################################################################################################## -- 2.7.4