Skip to content
Snippets Groups Projects
Commit 06902628 authored by Jeremie Deray's avatar Jeremie Deray
Browse files

add io & seria local_parametrization

parent 5b288c95
No related branches found
No related tags found
1 merge request!85[WIP] LocalParametrization Serialization
#ifndef WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_BASE_H_
#define WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_BASE_H_
#include "../local_parametrization_base.h"
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/assume_abstract.hpp>
BOOST_SERIALIZATION_ASSUME_ABSTRACT(wolf::LocalParametrizationBase)
namespace boost {
namespace serialization {
// Since classes deriving from LocalParametrizationBase
// have default constructor calling the non-default
// LocalParametrizationBase constructor with pre-defined
// arguments, there is nothing to save here.
// The only necessary thing to do is to register this
// abstract class and define an empty serialize function.
template<class Archive>
inline void serialize(
Archive &/*ar*/,
wolf::LocalParametrizationBase &/*lpb*/,
const unsigned int /*file_version*/)
{
//
}
// Example of what might need to be the serialization
// in case LocalParametrizationBase was not pure abstract.
/*
template<class Archive>
inline void save(
Archive &ar,
const wolf::LocalParametrizationBase &lpb,
const unsigned int file_version )
{
unsigned int global_size = lpb.getGlobalSize();
unsigned int local_size = lpb.getLocalSize();
ar << BOOST_SERIALIZATION_NVP(global_size);
ar << BOOST_SERIALIZATION_NVP(local_size);
}
template<class Archive>
inline void load(
Archive &ar,
wolf::LocalParametrizationBase &lpb,
const unsigned int file_version )
{
unsigned int global_size(0);
unsigned int local_size(0);
ar >> BOOST_SERIALIZATION_NVP(global_size);
ar >> BOOST_SERIALIZATION_NVP(local_size);
// 'placement new'
// 1/ it assumes memory already allocated
// 2/ an instance of LocalParametrizationBase is constructed at
// the memory location
::new(&lpb)wolf::LocalParametrizationBase(global_size, local_size);
}
// split non-intrusive serialization function member into separate
// non intrusive save/load member functions
template<class Archive>
inline void serialize(
Archive &ar,
wolf::LocalParametrizationBase &lpb,
const unsigned int file_version)
{
boost::serialization::split_free(ar, lpb, file_version);
}
// The two functions below allows for serialization of pointers
// (dynamic allocation)
template<class Archive>
inline void save_construct_data(
Archive &ar,
const wolf::LocalParametrizationBase *lpb,
const unsigned int file_version)
{
unsigned int global_size = lpb->getGlobalSize();
unsigned int local_size = lpb->getLocalSize();
ar << BOOST_SERIALIZATION_NVP(global_size);
ar << BOOST_SERIALIZATION_NVP(local_size);
}
template<class Archive>
inline void load_construct_data(
Archive &ar,
wolf::LocalParametrizationBase *lpb,
const unsigned int file_version)
{
unsigned int global_size(0);
unsigned int local_size(0);
ar >> BOOST_SERIALIZATION_NVP(global_size);
ar >> BOOST_SERIALIZATION_NVP(local_size);
::new(lpb)wolf::LocalParametrizationBase(global_size, local_size);
}
*/
} //namespace serialization
} //namespace boost
#endif /* WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_BASE_H_ */
#ifndef WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_HOMOGENEOUS_H_
#define WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_HOMOGENEOUS_H_
#include "../local_parametrization_homogeneous.h"
#include "serialization_local_parametrization_base.h"
#include <boost/serialization/export.hpp>
BOOST_CLASS_EXPORT_GUID(wolf::LocalParametrizationHomogeneous,
"wolf_LocalParametrizationHomogeneous")
namespace boost {
namespace serialization {
template<class Archive>
inline void serialize(
Archive &ar,
wolf::LocalParametrizationHomogeneous &lp,
const unsigned int /*file_version*/)
{
ar & boost::serialization::make_nvp("LocalParametrizationBase",
boost::serialization::base_object<wolf::LocalParametrizationBase>(lp));
}
} //namespace serialization
} //namespace boost
#endif /* WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_HOMOGENEOUS_H_ */
#ifndef WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_QUATERNION_H_
#define WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_QUATERNION_H_
#include "../local_parametrization_quaternion.h"
#include "serialization_local_parametrization_base.h"
#include <boost/serialization/export.hpp>
BOOST_CLASS_EXPORT_GUID(wolf::LocalParametrizationQuaternion<wolf::DQ_LOCAL>,
"wolf_LocalParametrizationQuaternion_DQ_LOCAL")
BOOST_CLASS_EXPORT_GUID(wolf::LocalParametrizationQuaternion<wolf::DQ_GLOBAL>,
"wolf_LocalParametrizationQuaternion_DQ_GLOBAL")
namespace boost {
namespace serialization {
template<class Archive, unsigned int DeltaReference>
inline void serialize(
Archive &ar,
wolf::LocalParametrizationQuaternion<DeltaReference> &lp,
const unsigned int /*file_version*/)
{
ar & boost::serialization::make_nvp("LocalParametrizationBase",
boost::serialization::base_object<wolf::LocalParametrizationBase>(lp));
}
} //namespace serialization
} //namespace boost
#endif /* WOLF_IO_SERIALIZATION_LOCAL_PARAMETRIZATION_QUATERNION_H_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment