X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/2546a41ad36fdc9ef6471cb35a1d56930ae1b527..be7cf844f59fa483423724e8e4b5e663e5b88ddd:/paxos_protocol.h diff --git a/paxos_protocol.h b/paxos_protocol.h index f2bdb3f..5e8afdd 100644 --- a/paxos_protocol.h +++ b/paxos_protocol.h @@ -1,13 +1,19 @@ #ifndef paxos_protocol_h #define paxos_protocol_h +#include "types.h" #include "rpc/rpc.h" struct prop_t { unsigned n; - std::string m; + string m; + + MEMBERS(n, m) + LEXICOGRAPHIC_COMPARISON(prop_t) }; +MARSHALLABLE(prop_t) + class paxos_protocol { public: enum status : status_t { OK, ERR }; @@ -18,68 +24,16 @@ class paxos_protocol { heartbeat, }; - struct preparearg { - unsigned instance; - prop_t n; - }; - struct prepareres { bool oldinstance; bool accept; prop_t n_a; - std::string v_a; - }; - - struct acceptarg { - unsigned instance; - prop_t n; - std::string v; - }; + string v_a; - struct decidearg { - unsigned instance; - std::string v; + MEMBERS(oldinstance, accept, n_a, v_a) }; }; -inline unmarshall & operator>>(unmarshall &u, prop_t &a) { - return u >> a.n >> a.m; -} - -inline marshall & operator<<(marshall &m, prop_t a) { - return m << a.n << a.m; -} - -inline unmarshall & operator>>(unmarshall &u, paxos_protocol::preparearg &a) { - return u >> a.instance >> a.n; -} - -inline marshall & operator<<(marshall &m, paxos_protocol::preparearg a) { - return m << a.instance << a.n; -} - -inline unmarshall & operator>>(unmarshall &u, paxos_protocol::prepareres &r) { - return u >> r.oldinstance >> r.accept >> r.n_a >> r.v_a; -} - -inline marshall & operator<<(marshall &m, paxos_protocol::prepareres r) { - return m << r.oldinstance << r.accept << r.n_a << r.v_a; -} - -inline unmarshall & operator>>(unmarshall &u, paxos_protocol::acceptarg &a) { - return u >> a.instance >> a.n >> a.v; -} - -inline marshall & operator<<(marshall &m, paxos_protocol::acceptarg a) { - return m << a.instance << a.n << a.v; -} - -inline unmarshall & operator>>(unmarshall &u, paxos_protocol::decidearg &a) { - return u >> a.instance >> a.v; -} - -inline marshall & operator<<(marshall &m, paxos_protocol::decidearg a) { - return m << a.instance << a.v; -} +MARSHALLABLE(paxos_protocol::prepareres) #endif