#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
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
#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 )
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);
+}