about to make some changes

This commit is contained in:
Shane Grant
2014-03-19 14:25:03 -07:00
parent 267d489a03
commit 738da2bedb
2 changed files with 52 additions and 14 deletions
-14
View File
@@ -251,10 +251,6 @@ namespace cereal
static auto member_load_minimal(T & t, U const & u) -> decltype(t.template load_minimal<Archive>(u))
{ t.template load_minimal<Archive>(u); }
// needed to get a function pointer to load_minimal
template<class Archive, class T> inline
static auto member_load_minimal_type(T &) -> decltype(&T::template load_minimal<Archive>);
// ####### Versioned Serialization #######################################
template<class Archive, class T> inline
static auto member_serialize(Archive & ar, T & t, const std::uint32_t version ) -> decltype(t.serialize(ar, version))
@@ -284,16 +280,6 @@ namespace cereal
static auto member_load_minimal(T & t, U const & u, const std::uint32_t version) -> decltype(t.template load_minimal<Archive>(u, version))
{ t.template load_minimal<Archive>(u, version); }
template<class Archive, class T, class NoConvert> inline
static auto member_load_minimal_type() -> decltype(NoConvert(&T::template load_minimal<Archive>));
template<class Archive, class T, class NoConvert> inline
static auto member_load_minimal_type(const std::uint32_t) -> decltype(NoConvert(&T::template load_minimal<Archive>));
// ####### Other Functionality ##########################################
// for detecting inheritance from enable_shared_from_this
template <class T> inline
+52
View File
@@ -401,6 +401,30 @@ namespace cereal
return *self;
}
//! Member split (save_minimal)
template <class T> inline
typename std::enable_if<traits::has_member_save_minimal<T, ArchiveType>::value && !traits::has_invalid_output_versioning<T, ArchiveType>::value &&
(traits::is_specialized_member_save_minimal<T, ArchiveType>::value || traits::is_output_serializable<T, ArchiveType>::value),
ArchiveType &>::type
processImpl(T const & t)
{
std::cerr << "I WOULD SAVE MINIMAL... IF I COULD!" << std::endl;
//access::member_save(*self, t);
return *self;
}
//! Non member split (save_minimal)
template <class T> inline
typename std::enable_if<traits::has_non_member_save_minimal<T, ArchiveType>::value && !traits::has_invalid_output_versioning<T, ArchiveType>::value &&
(traits::is_specialized_non_member_save_minimal<T, ArchiveType>::value || traits::is_output_serializable<T, ArchiveType>::value),
ArchiveType &>::type
processImpl(T const & t)
{
std::cerr << "I WOULD SAVE MINIMAL (non member)... IF I COULD!" << std::endl;
//save(*self, t);
return *self;
}
//! Empty class specialization
template <class T> inline
typename std::enable_if<(Flags & AllowEmptyClassElision) &&
@@ -499,6 +523,34 @@ namespace cereal
return *self;
}
//! Member split (save_minimal)
/*! Versioning implementation */
template <class T> inline
typename std::enable_if<traits::has_member_versioned_save_minimal<T, ArchiveType>::value && !traits::has_invalid_output_versioning<T, ArchiveType>::value &&
(traits::is_specialized_member_save_minimal<T, ArchiveType>::value || traits::is_output_serializable<T, ArchiveType>::value),
ArchiveType &>::type
processImpl(T const & t)
{
std::cerr << "I WOULD SAVE MINIMAL (versioned)... IF I COULD!" << std::endl;
registerClassVersion<T>( detail::Version<T>::version );
//access::member_save(*self, t, detail::Version<T>::version);
return *self;
}
//! Non member split (save_minimal)
/*! Versioning implementation */
template <class T> inline
typename std::enable_if<traits::has_non_member_versioned_save_minimal<T, ArchiveType>::value && !traits::has_invalid_output_versioning<T, ArchiveType>::value &&
(traits::is_specialized_non_member_save_minimal<T, ArchiveType>::value || traits::is_output_serializable<T, ArchiveType>::value),
ArchiveType &>::type
processImpl(T const & t)
{
std::cerr << "I WOULD SAVE MINIMAL (versioned)... IF I COULD!" << std::endl;
registerClassVersion<T>( detail::Version<T>::version );
//save(*self, t, detail::Version<T>::version);
return *self;
}
private:
ArchiveType * const self;