From: Diane Trout Date: Thu, 24 Aug 2006 00:41:01 +0000 (+0000) Subject: update sequence serialization to support the xml archive X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=commitdiff_plain;h=027df31221d7e8b0200d648ab91aeb130563ece5 update sequence serialization to support the xml archive --- diff --git a/alg/sequence.hpp b/alg/sequence.hpp index 64c60a0..39d6aed 100644 --- a/alg/sequence.hpp +++ b/alg/sequence.hpp @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -48,10 +49,10 @@ private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int /*version*/) { - ar & begin; - ar & end; - ar & type; - ar & name; + ar & BOOST_SERIALIZATION_NVP(begin); + ar & BOOST_SERIALIZATION_NVP(end); + ar & BOOST_SERIALIZATION_NVP(type); + ar & BOOST_SERIALIZATION_NVP(name); } }; BOOST_CLASS_EXPORT(annot); @@ -74,8 +75,8 @@ private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int /*version*/) { - ar & boost::serialization::base_object(*this); - ar & sequence; + ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(annot); + ar & BOOST_SERIALIZATION_NVP(sequence); } }; BOOST_CLASS_EXPORT(motif); @@ -100,11 +101,14 @@ class Sequence : public std::string friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int /*version*/) { - ar & boost::serialization::base_object(*this); - ar & header; - ar & species; - ar & annots; - ar & motif_list; + ar & boost::serialization::make_nvp( + "seq_text", + boost::serialization::base_object(*this) + ); + ar & BOOST_SERIALIZATION_NVP(header); + ar & BOOST_SERIALIZATION_NVP(species); + ar & BOOST_SERIALIZATION_NVP(annots); + ar & BOOST_SERIALIZATION_NVP(motif_list); } public: diff --git a/alg/test/test_sequence.cpp b/alg/test/test_sequence.cpp index 11beace..70c585e 100644 --- a/alg/test/test_sequence.cpp +++ b/alg/test/test_sequence.cpp @@ -9,6 +9,8 @@ namespace fs=boost::filesystem; #include #include +#include +#include #include "alg/sequence.hpp" #include "mussa_exceptions.hpp" @@ -454,6 +456,35 @@ BOOST_AUTO_TEST_CASE( serialize_simple ) { std::string seq_string = "AAGGCCTT"; Sequence seq(seq_string); + seq.set_species("ribbet"); + std::ostringstream oss; + // allocate/deallocate serialization components + { + boost::archive::text_oarchive oarchive(oss); + const Sequence& const_seq(seq); + BOOST_CHECK_EQUAL(seq, const_seq); + oarchive << const_seq; + } + + Sequence seq_loaded; + { + std::istringstream iss(oss.str()); + boost::archive::text_iarchive iarchive(iss); + iarchive >> seq_loaded; + } + BOOST_CHECK_EQUAL(seq_loaded, seq); + BOOST_CHECK_EQUAL(seq.get_species(), "ribbet"); +} + +BOOST_AUTO_TEST_CASE( serialize_tree ) +{ + std::string seq_string = "AAGGCCTT"; + Sequence seq(seq_string); + seq.set_species("ribbet"); + seq.add_motif("AA"); + seq.add_motif("GC"); + annot a1(6,7,"t","t"); + seq.add_annotation(a1); std::ostringstream oss; // allocate/deallocate serialization components @@ -470,4 +501,33 @@ BOOST_AUTO_TEST_CASE( serialize_simple ) boost::archive::text_iarchive iarchive(iss); iarchive >> seq_loaded; } + BOOST_CHECK_EQUAL(seq_loaded, seq); +} + +BOOST_AUTO_TEST_CASE( serialize_xml_tree ) +{ + std::string seq_string = "AAGGCCTT"; + Sequence seq(seq_string); + seq.set_species("ribbet"); + seq.add_motif("AA"); + seq.add_motif("GC"); + annot a1(6,7,"t","t"); + seq.add_annotation(a1); + + std::ostringstream oss; + // allocate/deallocate serialization components + { + boost::archive::xml_oarchive oarchive(oss); + const Sequence& const_seq(seq); + BOOST_CHECK_EQUAL(seq, const_seq); + oarchive << boost::serialization::make_nvp("seq", const_seq); + } + + Sequence seq_loaded; + { + std::istringstream iss(oss.str()); + boost::archive::xml_iarchive iarchive(iss); + iarchive >> boost::serialization::make_nvp("seq", seq_loaded); + } + BOOST_CHECK_EQUAL(seq_loaded, seq); }