From: Diane Trout Date: Fri, 15 Sep 2006 00:11:40 +0000 (+0000) Subject: make our Color class serializable X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=commitdiff_plain;h=f0b5f99c2cc32be61ac0d80b8a8ac498450192e4 make our Color class serializable 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. --- diff --git a/alg/color.hpp b/alg/color.hpp index 3e4def5..78b13cf 100644 --- a/alg/color.hpp +++ b/alg/color.hpp @@ -1,6 +1,10 @@ #ifndef _GLCOLOR_H_ #define _GLCOLOR_H_ +#include +#include +#include + #include //! convienece class for handling opengl colors @@ -31,7 +35,18 @@ public: protected: float colors[4]; + +private: + friend class boost::serialization::access; + template + 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 diff --git a/alg/test/test_color.cpp b/alg/test/test_color.cpp index cdae872..63e6a84 100644 --- a/alg/test/test_color.cpp +++ b/alg/test/test_color.cpp @@ -3,8 +3,15 @@ #include #include +#include +#include +#include +#include + #include "alg/color.hpp" +#include + 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); +}