1 #ifndef SERIALIZABLE_HPP 2 #define SERIALIZABLE_HPP 1 8 #include <boost/foreach.hpp> 26 virtual vector<double>
serialize(
void)
const = 0;
31 virtual void unserialize(
const vector<double>& data) = 0;
39 template<
class T> vector<T> chunk
40 (
const vector<T>& source,
44 assert(i_end>i_start);
45 vector<T> res(i_end-i_start);
46 for(
size_t i=i_start;i<i_end;++i)
47 res.at(i-i_start) = source.at(i);
53 vector<double> list_serialize
54 (
const vector<Serializable*>& los);
56 template <
class S> vector<double>
58 (
const vector<S> &los)
61 return vector<double> ();
62 vector<double> res(los.size()*los.at(0).getChunkSize());
64 for(
size_t i=0;i<los.size();++i)
66 const vector<double> temp = los.at(i).serialize();
67 BOOST_FOREACH(
double x, temp)
76 template<
class T> vector<T> list_unserialize
77 (
const vector<double>& data,
82 if (data.size() % t.getChunkSize() != 0)
85 eo.
AddEntry(
"chunksize", static_cast<double>(t.getChunkSize()));
86 eo.
AddEntry(
"Data size", static_cast<double>(data.size()));
89 const size_t n = data.size()/t.getChunkSize();
91 for(
size_t i=0;i<n;++i)
93 (chunk(data,i*t.getChunkSize(),(i+1)*t.getChunkSize()));
97 #endif // SERIALIZABLE_HPP
virtual vector< double > serialize(void) const =0
Convert an object to an array of numbers.
Container for error reports.
virtual size_t getChunkSize(void) const =0
Returns the size of array needed to store all data.
virtual ~Serializable(void)
Class destructor.
Base class for a serializable object.
virtual void unserialize(const vector< double > &data)=0
Convert an array of numbers to an object.
void AddEntry(std::string const &field, double value)
Adds an entry to the list.
A class for storing error and debug information.