make our Color class serializable
authorDiane Trout <diane@caltech.edu>
Fri, 15 Sep 2006 00:11:40 +0000 (00:11 +0000)
committerDiane Trout <diane@caltech.edu>
Fri, 15 Sep 2006 00:11:40 +0000 (00:11 +0000)
this is part of an idea to move the color of a sequence into
the sequence class, instead of living in glsequence or the
AnnotationColor mapper.

alg/color.hpp
alg/test/test_color.cpp

index 3e4def5e1253bf5cc181ed55508833cc670b16ff..78b13cf99db4c5b671f19667de3b6a23c98bef29 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef _GLCOLOR_H_
 #define _GLCOLOR_H_
 
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/version.hpp>
+
 #include <ostream>
 
 //! convienece class for handling opengl colors
@@ -31,7 +35,18 @@ public:
 
 protected:
   float colors[4];
+
+private:
+  friend class boost::serialization::access;
+  template<class Archive>
+  void serialize(Archive& ar, const unsigned int /*version*/) {
+    ar & boost::serialization::make_nvp("red",   colors[RedChannel]);
+    ar & boost::serialization::make_nvp("green", colors[GreenChannel]);
+    ar & boost::serialization::make_nvp("blue",  colors[BlueChannel]);
+    ar & boost::serialization::make_nvp("alpha", colors[AlphaChannel]);
+  }
 };
+BOOST_CLASS_EXPORT(Color)
 
 #endif
 
index cdae872715f1c3bb3bc173028e4c628fda5fef48..63e6a84787bb6aadd20a2f16a034e3d8c29a4a3b 100644 (file)
@@ -3,8 +3,15 @@
 #include <string>
 #include <sstream>
 
+#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/color.hpp"
 
+#include <iostream>
+
 using namespace std;
 
 BOOST_AUTO_TEST_CASE ( color )
@@ -40,3 +47,42 @@ BOOST_AUTO_TEST_CASE ( color )
   BOOST_CHECK_CLOSE (colors[Color::BlueChannel  ], dotthree, tolerance );
   BOOST_CHECK_CLOSE (colors[Color::AlphaChannel ], dotfour, tolerance );
 }
+
+BOOST_AUTO_TEST_CASE( serialize_color )
+{
+  const Color color1(1.0, 1.0, 1.0, 1.0);
+
+  std::ostringstream oss;
+  // allocate/deallocate serialization components
+  {
+    boost::archive::text_oarchive oarchive(oss);
+    oarchive << color1;
+  }
+  Color color2;
+  {
+    std::istringstream iss(oss.str());
+    boost::archive::text_iarchive iarchive(iss);
+    iarchive >> color2;
+  }
+  BOOST_CHECK_EQUAL(color1, color2);
+}  
+
+BOOST_AUTO_TEST_CASE( serialize_xml_color )
+{
+  const Color color1(0.0, 0.5, 0.0, 0.0);
+
+  std::ostringstream oss;
+  // allocate/deallocate serialization components
+  {
+    boost::archive::xml_oarchive oarchive(oss);
+    oarchive << boost::serialization::make_nvp("color", color1);
+  }
+  //std::cout << "XML Color: " << oss.str() << std::endl;
+  Color color2;
+  {
+    std::istringstream iss(oss.str());
+    boost::archive::xml_iarchive iarchive(iss);
+    iarchive >> boost::serialization::make_nvp("color", color2);
+  }
+  BOOST_CHECK_EQUAL(color1, color2);
+}