#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/export.hpp>
+
#include <list>
#include <string>
#include <vector>
std::string name;
friend bool operator==(const annot& left, const annot& right);
+private:
+ // boost::serialization support
+ friend class boost::serialization::access;
+ template<class Archive>
+ void serialize(Archive& ar, const unsigned int /*version*/) {
+ ar & begin;
+ ar & end;
+ ar & type;
+ ar & name;
+ }
};
+BOOST_CLASS_EXPORT(annot);
+
/* The way that motifs are found currently doesn't really
* indicate that the match was a reverse compliment
{
std::string sequence;
+ motif() : annot(), sequence("") {};
//! this constructor is for when we're adding motifs to our annotations
motif(int begin, std::string motif);
~motif();
+
+ // boost::serialization support
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void motif::serialize(Archive& ar, const unsigned int /*version*/) {
+ ar & boost::serialization::base_object<annot>(*this);
+ ar & sequence;
+ }
};
+BOOST_CLASS_EXPORT(motif);
//! sequence track for mussa.
class Sequence : public std::string
//! look for a string sequence type and and it to an annotation list
void add_string_annotation(std::string a_seq, std::string name);
+ // boost::serialization support
+ friend class boost::serialization::access;
+ template<class Archive>
+ void Sequence::serialize(Archive& ar, const unsigned int /*version*/) {
+ ar & boost::serialization::base_object<std::string>(*this);
+ ar & header;
+ ar & species;
+ ar & annots;
+ ar & motif_list;
+ }
+
public:
Sequence();
~Sequence();
void save(boost::filesystem::fstream &save_file);
void load_museq(boost::filesystem::path load_file_path, int seq_num);
+
};
+BOOST_CLASS_EXPORT(Sequence);
#endif
#include <iostream>
#include <sstream>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
#include "alg/sequence.hpp"
#include "mussa_exceptions.hpp"
seq.set_fasta_header("fasta human");
BOOST_CHECK_EQUAL( seq.get_name(), "fasta human");
}
+
+BOOST_AUTO_TEST_CASE( serialize_simple )
+{
+ std::string seq_string = "AAGGCCTT";
+ Sequence seq(seq_string);
+
+ 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;
+ }
+}