]> git.tdb.fi Git - libs/net.git/blobdiff - source/net/protocol.h
Support serializing bool fields in Protocol
[libs/net.git] / source / net / protocol.h
index 7ff63cb1e7dd12cc2a8fb3e9ba1e092062bcc754..7beccfb0f49d42c1563d4b4296c79f39f62ae4ad 100644 (file)
@@ -294,6 +294,8 @@ template<typename P>
 unsigned Protocol::serialize(const P &pkt, char *buf, unsigned size) const
 {
        const PacketTypeDef<P> &pdef = get_packet_by_class<P>();
+       if(!pdef.get_id())
+               throw std::invalid_argument("no packet id");
        char *ptr = pdef.serialize(pkt, buf+4, buf+size);
        size = ptr-buf;
        header_def.serialize(PacketHeader(pdef.get_id(), size), buf, buf+4);
@@ -326,6 +328,7 @@ struct Protocol::Traits
        typedef CompoundSerializer<T> Serializer;
 };
 
+template<> struct Protocol::Traits<bool>: BasicTraits<bool, 'B'> { };
 template<> struct Protocol::Traits<Int8>: BasicTraits<Int8, 'I'> { };
 template<> struct Protocol::Traits<UInt8>: BasicTraits<UInt8, 'U'> { };
 template<> struct Protocol::Traits<Int16>: BasicTraits<Int16, 'I'> { };
@@ -455,9 +458,6 @@ const char *Protocol::Serializer<P, Head, S>::deserialize(P &pkt, const char *bu
 }
 
 
-template<typename P>
-unsigned Protocol::PacketTypeDef<P>::class_id = 0;
-
 template<typename P>
 Protocol::PacketTypeDef<P>::PacketTypeDef(unsigned i):
        PacketDefBase(i),