virtual unsigned get_class_id() const = 0;
unsigned get_id() const { return id; }
virtual std::uint64_t get_hash() const = 0;
+ virtual const char *deserialize(Variant &, const char *, const char *) const = 0;
virtual const char *dispatch(ReceiverBase &, const char *, const char *) const = 0;
};
std::uint64_t get_hash() const override { return serializer->get_hash(); }
char *serialize(const P &, char *, char *) const;
const char *deserialize(P &, const char *, const char *) const;
+ const char *deserialize(Variant &, const char *, const char *) const override;
const char *dispatch(ReceiverBase &, const char *, const char *) const override;
};
return serializer->deserialize(pkt, buf, end);
}
+template<typename P>
+const char *Protocol::PacketTypeDef<P>::deserialize(Variant &var_pkt, const char *buf, const char *end) const
+{
+ P pkt;
+ const char *ptr = serializer->deserialize(pkt, buf, end);
+ var_pkt = std::move(pkt);
+ return ptr;
+}
+
template<typename P>
const char *Protocol::PacketTypeDef<P>::dispatch(ReceiverBase &rcv, const char *buf, const char *end) const
{