update sequence serialization to support the xml archive
authorDiane Trout <diane@caltech.edu>
Thu, 24 Aug 2006 00:41:01 +0000 (00:41 +0000)
committerDiane Trout <diane@caltech.edu>
Thu, 24 Aug 2006 00:41:01 +0000 (00:41 +0000)
alg/sequence.hpp
alg/test/test_sequence.cpp

index 64c60a06bfbb22a7191d31b239129863826cef39..39d6aed192df7559a2ebb2632873d30d883128d4 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <boost/serialization/base_object.hpp>
 #include <boost/serialization/list.hpp>
+#include <boost/serialization/nvp.hpp>
 #include <boost/serialization/string.hpp>
 #include <boost/serialization/utility.hpp>
 #include <boost/serialization/export.hpp>
@@ -48,10 +49,10 @@ private:
   friend class boost::serialization::access;
   template<class Archive>
   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<class Archive>
   void serialize(Archive& ar, const unsigned int /*version*/) {
-    ar & boost::serialization::base_object<annot>(*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<class Archive>
     void serialize(Archive& ar, const unsigned int /*version*/) {
-      ar & boost::serialization::base_object<std::string>(*this);
-      ar & header;
-      ar & species;
-      ar & annots;
-      ar & motif_list;
+      ar & boost::serialization::make_nvp(
+             "seq_text", 
+             boost::serialization::base_object<std::string >(*this)
+           );
+      ar & BOOST_SERIALIZATION_NVP(header);
+      ar & BOOST_SERIALIZATION_NVP(species);
+      ar & BOOST_SERIALIZATION_NVP(annots);
+      ar & BOOST_SERIALIZATION_NVP(motif_list);
     }
 
   public:
index 11beace88500dfce8d95db24a5d0d53970188e3e..70c585e6d440ef9b4777d606a9a62902ccbc9f99 100644 (file)
@@ -9,6 +9,8 @@ namespace fs=boost::filesystem;
 
 #include <boost/archive/text_oarchive.hpp>
 #include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
 
 #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);
 }