X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5a5c578e2e358a121cdb9234a6cb11c4ecfbf323..603bac8fcb3697f283e6537d81b4a92e457ebbad:/rsm_protocol.h diff --git a/rsm_protocol.h b/rsm_protocol.h index 53908f3..a2d13c2 100644 --- a/rsm_protocol.h +++ b/rsm_protocol.h @@ -14,12 +14,16 @@ class rsm_client_protocol { }; struct viewstamp { - viewstamp (unsigned int _vid = 0, unsigned int _seqno = 0) : vid(_vid), seqno(_seqno) {} unsigned int vid; unsigned int seqno; inline void operator++(int) { seqno++; } + + MEMBERS(vid, seqno) + LEXICOGRAPHIC_COMPARISON(viewstamp) }; +MARSHALLABLE(viewstamp) + class rsm_protocol { public: enum status : status_t { OK, ERR, BUSY}; @@ -33,28 +37,12 @@ class rsm_protocol { struct transferres { string state; viewstamp last; + + MEMBERS(state, last) }; }; -inline bool operator==(viewstamp a, viewstamp b) { return tie(a.vid, a.seqno) == tie(b.vid, b.seqno); } -inline bool operator>(viewstamp a, viewstamp b) { return tie(a.vid, a.seqno) > tie(b.vid, b.seqno); } -inline bool operator!=(viewstamp a, viewstamp b) { return tie(a.vid, a.seqno) != tie(b.vid, b.seqno); } - -inline marshall& operator<<(marshall &m, viewstamp v) { - return m << v.vid << v.seqno; -} - -inline unmarshall& operator>>(unmarshall &u, viewstamp &v) { - return u >> v.vid >> v.seqno; -} - -inline marshall & operator<<(marshall &m, rsm_protocol::transferres r) { - return m << r.state << r.last; -} - -inline unmarshall & operator>>(unmarshall &u, rsm_protocol::transferres &r) { - return u >> r.state >> r.last; -} +MARSHALLABLE(rsm_protocol::transferres) class rsm_test_protocol { public: