Procházet zdrojové kódy

Serialization functions for fields compiling and initialization fixes.

Bart Hertog před 6 roky
rodič
revize
3f8235eb09
3 změnil soubory, kde provedl 53 přidání a 94 odebrání
  1. 11 1
      generator/Header_Template.h
  2. 41 93
      src/Fields.h
  3. 1 0
      src/WireFormatter.h

+ 11 - 1
generator/Header_Template.h

@@ -12,7 +12,17 @@ enum {{ _enum.name }}
 class {{ msg.name }} final: public ::EmbeddedProto::MessageInterface
 class {{ msg.name }} final: public ::EmbeddedProto::MessageInterface
 {
 {
   public:
   public:
-    {{ msg.name }}() = default;
+    {{ msg.name }}() :
+    {% for field in msg.fields() %}
+        {% if field.of_type_enum %}
+        {{field.variable_name}}({{field.default_value}}){{"," if not loop.last}}
+        {% else %}
+        {{field.variable_name}}(){{"," if not loop.last}}
+        {% endif %}
+    {% endfor %}
+    {
+
+    };
     ~{{ msg.name }}() override = default;
     ~{{ msg.name }}() override = default;
 
 
     {% for enum in msg.nested_enums() %}
     {% for enum in msg.nested_enums() %}

+ 41 - 93
src/Fields.h

@@ -39,100 +39,48 @@ namespace EmbeddedProto
       TYPE value_;
       TYPE value_;
   };
   };
 
 
-  class int32 : public FieldTemplate<int32_t> { };      
-  class int64 : public FieldTemplate<int64_t> { };      
-  class uint32 : public FieldTemplate<uint32_t> { };    
-  class uint64 : public FieldTemplate<uint64_t> { };    
-  class sint32 : public FieldTemplate<int32_t> { };    
-  class sint64 : public FieldTemplate<int64_t> { };    
-  class boolean : public FieldTemplate<bool> { };
+  class int32 : public FieldTemplate<int32_t> { public: int32() : FieldTemplate<int32_t>(0) {}; };     
+  class int64 : public FieldTemplate<int64_t> { public: int64() : FieldTemplate<int64_t>(0) {}; };
+  class uint32 : public FieldTemplate<uint32_t> { public: uint32() : FieldTemplate<uint32_t>(0) {}; };
+  class uint64 : public FieldTemplate<uint64_t> { public: uint64() : FieldTemplate<uint64_t>(0) {}; };
+  class sint32 : public FieldTemplate<int32_t> { public: sint32() : FieldTemplate<int32_t>(0) {}; };
+  class sint64 : public FieldTemplate<int64_t> { public: sint64() : FieldTemplate<int64_t>(0) {}; };
+  class boolean : public FieldTemplate<bool> { public: boolean() : FieldTemplate<bool>(false) {}; };
   // TODO enum
   // TODO enum
-  class fixed32 : public FieldTemplate<uint32_t> { };   
-  class fixed64 : public FieldTemplate<uint64_t> { };   
-  class sfixed32 : public FieldTemplate<int32_t> { };   
-  class sfixed64 : public FieldTemplate<int64_t> { };   
-  class floatfixed : public FieldTemplate<float> { };   
-  class doublefixed : public FieldTemplate<double> { }; 
-
-  bool serialize(uint32_t field_number, const int32& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeInt(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const int64& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeInt(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const uint32& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeUInt(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const uint64& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeUInt(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const sint32& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeSInt(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const sint64& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeSInt(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const boolean x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeBool(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const fixed32& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeFixed(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const fixed64& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeFixed(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const sfixed32& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeSFixed(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const sfixed64& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeSFixed(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const floatfixed& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeFloat(field_number, x.get(), buffer); }
-
-  bool serialize(uint32_t field_number, const doublefixed& x, WriteBufferInterface& buffer) 
-  { return WireFormatter::SerializeDouble(field_number, x.get(), buffer); }
-
-
-
-  bool deserialize(ReadBufferInterface& buffer, int32& x) 
-  { return WireFormatter::DeserializeInt(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, int64& x) 
-  { return WireFormatter::DeserializeInt(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, uint32& x) 
-  { return WireFormatter::DeserializeUInt(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, uint64& x) 
-  { return WireFormatter::DeserializeUInt(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, sint32& x) 
-  { return WireFormatter::DeserializeSInt(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, sint64& x) 
-  { return WireFormatter::DeserializeSInt(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, boolean& x) 
-  { return WireFormatter::DeserializeBool(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, fixed32& x) 
-  { return WireFormatter::DeserializeFixed(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, fixed64& x) 
-  { return WireFormatter::DeserializeFixed(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, sfixed32& x) 
-  { return WireFormatter::DeserializeSFixed(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, sfixed64& x) 
-  { return WireFormatter::DeserializeSFixed(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, floatfixed& x) 
-  { return WireFormatter::DeserializeFloat(buffer, x.get()); }
-
-  bool deserialize(ReadBufferInterface& buffer, doublefixed& x) 
-  { return WireFormatter::DeserializeDouble(buffer, x.get()); }
+  class fixed32 : public FieldTemplate<uint32_t> { public: fixed32() : FieldTemplate<uint32_t>(0) {}; };
+  class fixed64 : public FieldTemplate<uint64_t> { public: fixed64() : FieldTemplate<uint64_t>(0) {}; };
+  class sfixed32 : public FieldTemplate<int32_t> { public: sfixed32() : FieldTemplate<int32_t>(0) {}; };
+  class sfixed64 : public FieldTemplate<int64_t> { public: sfixed64() : FieldTemplate<int64_t>(0) {}; };
+  class floatfixed : public FieldTemplate<float> { public: floatfixed() : FieldTemplate<float>(0.0) {}; };
+  class doublefixed : public FieldTemplate<double> { public: doublefixed() : FieldTemplate<double>(0.0) {}; };
+
+  bool serialize(uint32_t field_number, const int32& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const int64& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const uint32& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const uint64& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const sint32& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const sint64& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const boolean x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const fixed32& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const fixed64& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const sfixed32& x, WriteBufferInterface& buffer); 
+  bool serialize(uint32_t field_number, const sfixed64& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const floatfixed& x, WriteBufferInterface& buffer);
+  bool serialize(uint32_t field_number, const doublefixed& x, WriteBufferInterface& buffer);
+
+  bool deserialize(ReadBufferInterface& buffer, int32& x); 
+  bool deserialize(ReadBufferInterface& buffer, int64& x); 
+  bool deserialize(ReadBufferInterface& buffer, uint32& x);
+  bool deserialize(ReadBufferInterface& buffer, uint64& x);
+  bool deserialize(ReadBufferInterface& buffer, sint32& x);
+  bool deserialize(ReadBufferInterface& buffer, sint64& x);
+  bool deserialize(ReadBufferInterface& buffer, boolean& x);
+  bool deserialize(ReadBufferInterface& buffer, fixed32& x);
+  bool deserialize(ReadBufferInterface& buffer, fixed64& x);
+  bool deserialize(ReadBufferInterface& buffer, sfixed32& x);
+  bool deserialize(ReadBufferInterface& buffer, sfixed64& x);
+  bool deserialize(ReadBufferInterface& buffer, floatfixed& x);
+  bool deserialize(ReadBufferInterface& buffer, doublefixed& x);
 
 
 } // End of namespace EmbeddedProto.
 } // End of namespace EmbeddedProto.
 #endif
 #endif

+ 1 - 0
src/WireFormatter.h

@@ -5,6 +5,7 @@
 #include <cstdint>
 #include <cstdint>
 #include <math.h> 
 #include <math.h> 
 #include <type_traits>
 #include <type_traits>
+#include <limits>
 
 
 #include "WriteBufferInterface.h"
 #include "WriteBufferInterface.h"
 #include "ReadBufferInterface.h"
 #include "ReadBufferInterface.h"