/[svn]/libgig/trunk/src/Serialization.h
ViewVC logotype

Diff of /libgig/trunk/src/Serialization.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3166 by schoenebeck, Tue May 9 16:10:36 2017 UTC revision 3167 by schoenebeck, Tue May 9 16:32:07 2017 UTC
# Line 37  Line 37 
37  #include <time.h>  #include <time.h>
38  #if __cplusplus < 201103L  #if __cplusplus < 201103L
39  # include <tr1/type_traits>  # include <tr1/type_traits>
40    # define LIBGIG_IS_CLASS(type) std::tr1::__is_union_or_class<type>::value //NOTE: without compiler support we cannot distinguish union from class
41    #else
42    # define LIBGIG_IS_CLASS(type) __is_class(type)
43  #endif  #endif
44    
45  /** @brief Serialization / deserialization framework.  /** @brief Serialization / deserialization framework.
# Line 177  namespace Serialization { Line 180  namespace Serialization {
180          template<typename T>          template<typename T>
181          struct Resolver {          struct Resolver {
182              static UID resolve(const T& obj) {              static UID resolve(const T& obj) {
183                  return (UID) { (ID) &obj, sizeof(obj) };                  return UID { (ID) &obj, sizeof(obj) };
184              }              }
185          };          };
186    
# Line 185  namespace Serialization { Line 188  namespace Serialization {
188          template<typename T>          template<typename T>
189          struct Resolver<T*> {          struct Resolver<T*> {
190              static UID resolve(const T* const & obj) {              static UID resolve(const T* const & obj) {
191                  return (UID) { (ID) obj, sizeof(*obj) };                  return UID { (ID) obj, sizeof(*obj) };
192              }              }
193          };          };
194      };      };
# Line 637  namespace Serialization { Line 640  namespace Serialization {
640          class UIDChainResolver<T*> {          class UIDChainResolver<T*> {
641          public:          public:
642              UIDChainResolver(const T*& data) {              UIDChainResolver(const T*& data) {
643                  m_uid.push_back((UID) { &data, sizeof(data) });                  m_uid.push_back(UID { &data, sizeof(data) });
644                  m_uid.push_back((UID) { data, sizeof(*data) });                  m_uid.push_back(UID { data, sizeof(*data) });
645              }              }
646    
647              operator UIDChain() const { return m_uid; }              operator UIDChain() const { return m_uid; }
# Line 678  namespace Serialization { Line 681  namespace Serialization {
681    
682          // Automatically handles recursion for class/struct types, while ignoring all primitive types.          // Automatically handles recursion for class/struct types, while ignoring all primitive types.
683          template<typename T>          template<typename T>
684          struct SerializationRecursion : SerializationRecursionImpl<T, __is_class(T)> {          struct SerializationRecursion : SerializationRecursionImpl<T, LIBGIG_IS_CLASS(T)> {
685          };          };
686    
687          class ObjectPool : public std::map<UID,Object> {          class ObjectPool : public std::map<UID,Object> {

Legend:
Removed from v.3166  
changed lines
  Added in v.3167

  ViewVC Help
Powered by ViewVC