• Kamil Domanski's avatar
    overhaul serialization code · 1b1bf241
    Kamil Domanski authored
    The implementation of each class' serialization/deserialization is no longer
    passed within a macro. The implementation now lies within a template of form:
    
    template <typename T, typename Stream, typename Operation>
    inline static size_t SerializationOp(T thisPtr, Stream& s, Operation ser_action, int nType, int nVersion) {
        size_t nSerSize = 0;
        /* CODE */
        return nSerSize;
    }
    
    In cases when codepath should depend on whether or not we are just deserializing
    (old fGetSize, fWrite, fRead flags) an additional clause can be used:
    bool fRead = boost::is_same<Operation, CSerActionUnserialize>();
    
    The IMPLEMENT_SERIALIZE macro will now be a freestanding clause added within
    class' body (similiar to Qt's Q_OBJECT) to implement GetSerializeSize,
    Serialize and Unserialize. These are now wrappers around
    the "SerializationOp" template.
    1b1bf241
walletmodel.h 9.73 KB