#ifndef rbtree_marshalling_hh #define rbtree_marshalling_hh #include #include class Counter; class SendBuffer; using namespace boost::intrusive; class Base : public set_base_hook<> { uint32_t b_; virtual inline void SendTypeNum(SendBuffer*) const; protected: virtual inline void SendMemberData(SendBuffer*) const; public: explicit Base(int i) : b_(i) {} template explicit Base(B* buf); template static Base* BuildPolyInstance(B* buf); void Send(SendBuffer* buf, bool sendType) const { SendTypeNum(buf); SendMemberData(buf); } virtual inline void CalculateMarshallingSize(Counter&) const; virtual void PrintName() { std::cout << "Base" << std::endl; } friend bool operator< (Base const &a, Base const& b) { return a.b_ < b.b_; } }; class Derived : public Base { std::string s_; virtual inline void SendTypeNum(SendBuffer*) const; protected: virtual inline void SendMemberData(SendBuffer*) const; public: explicit Derived(int i) : Base(i) {} template explicit Derived(B*); virtual inline void CalculateMarshallingSize(Counter&) const; virtual void PrintName() { std::cout << "Derived" << std::endl; } }; #endif