diff options
author | John Wiegley <johnw@newartisans.com> | 2009-10-30 18:06:37 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-10-30 18:06:37 -0400 |
commit | a757b19f51ac7aa120e6829b573187b1ff36301a (patch) | |
tree | 5e6d4ef278f3f9915713f958979a4c35a53378fb /src/op.h | |
parent | 1b8811f997568d8aede86197a36fc65586996494 (diff) | |
download | fork-ledger-a757b19f51ac7aa120e6829b573187b1ff36301a.tar.gz fork-ledger-a757b19f51ac7aa120e6829b573187b1ff36301a.tar.bz2 fork-ledger-a757b19f51ac7aa120e6829b573187b1ff36301a.zip |
Added serialization methods for most type
This allows journal_t objects to be completed serialized to disk and
deserialized.
Diffstat (limited to 'src/op.h')
-rw-r--r-- | src/op.h | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -290,6 +290,33 @@ public: static ptr_op_t wrap_value(const value_t& val); static ptr_op_t wrap_functor(const function_t& fobj); + +#if defined(HAVE_BOOST_SERIALIZATION) +private: + /** Serialization. */ + + friend class boost::serialization::access; + + template<class Archive> + void serialize(Archive & ar, const unsigned int /* version */) { + ar & refc; + ar & kind; + if (Archive::is_loading::value || ! left_ || left_->kind != FUNCTION) { + ar & left_; + } else { + ptr_op_t temp_op; + ar & temp_op; + } + if (Archive::is_loading::value || kind == VALUE || kind == IDENT || + (kind > UNARY_OPERATORS && + (! has_right() || ! right()->is_function()))) { + ar & data; + } else { + variant<ptr_op_t, value_t, string, function_t> temp_data; + ar & temp_data; + } + } +#endif // HAVE_BOOST_SERIALIZATION }; inline expr_t::ptr_op_t |