X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fprotocol.h;fp=source%2Fnet%2Fprotocol.h;h=35d3cb2cbfe177de4214816d70643f9ff97e32bd;hp=ae1c3c010c0671a8c88968b359220f9142449a92;hb=1565dec0f4a86e4bda7095dd7415234f7c7a84e9;hpb=e900bb4a8fe086fac55ffe51c75915be0003c5e4 diff --git a/source/net/protocol.h b/source/net/protocol.h index ae1c3c0..35d3cb2 100644 --- a/source/net/protocol.h +++ b/source/net/protocol.h @@ -171,9 +171,12 @@ private: public: PacketDefBuilder(const Protocol &, PacketTypeDef

&, const S &); - + template - PacketDefBuilder> operator()(T P::*); + PacketDefBuilder> fields(T P::*); + + template + auto fields(T1 P::*first, T2 P::*second, Rest P::*...rest) { return fields(first).fields(second, rest...); } }; struct PacketHeader @@ -209,9 +212,15 @@ protected: template PacketDefBuilder> add(unsigned); + template + auto add(unsigned id, T P::*field, Rest P::*...rest) { return add

(id).fields(field, rest...); } + template PacketDefBuilder> add(); + template + auto add(T P::*field, Rest P::*...rest) { return add

().fields(field, rest...); } + const PacketDefBase &get_packet_by_class_id(unsigned) const; const PacketDefBase &get_packet_by_id(unsigned) const; @@ -455,7 +464,7 @@ Protocol::PacketDefBuilder::PacketDefBuilder(const Protocol &p, PacketType template template -Protocol::PacketDefBuilder> Protocol::PacketDefBuilder::operator()(T P::*ptr) +Protocol::PacketDefBuilder> Protocol::PacketDefBuilder::fields(T P::*ptr) { typename S::template Next next_ser(serializer, ptr, protocol); pktdef.set_serializer(next_ser);