Skip to content

Commit

Permalink
ugly fix for object_loader.h: using #if defined(WINDOWS)
Browse files Browse the repository at this point in the history
  • Loading branch information
q4a committed Jun 6, 2018
1 parent 6c6475a commit 5ab613c
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/Common/object_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,23 @@ struct CLoader
struct CHelper1
{
template <bool a>
#if defined(WINDOWS)
static void load_data(T& data, M& stream, const P& /*p*/)
#elif defined(LINUX)
static void load_data(std::enable_if_t<a, T&> data, M& stream, const P& /*p*/)
#endif
{
static_assert(!std::is_polymorphic<T>::value, "Cannot load polymorphic classes as binary data.");
stream.r(&data, sizeof(T));
}

#if defined(WINDOWS)
template <>
static void load_data<true>(T& data, M& stream, const P& /*p*/)
#elif defined(LINUX)
template <bool a>
static void load_data(std::enable_if_t<!a, T&> data, M& stream, const P& /*p*/)
#endif
{
T* data1 = const_cast<T*>(&data);
data1->load(stream);
Expand All @@ -36,13 +45,22 @@ struct CLoader
struct CHelper
{
template <bool pointer>
#if defined(WINDOWS)
static void load_data(T& data, M& stream, const P& p)
#elif defined(LINUX)
static void load_data(std::enable_if_t<pointer, T&> data, M& stream, const P& p)
#endif
{
CHelper1<T>::load_data<object_type_traits::is_base_and_derived<ISerializable, T>::value>(data, stream, p);
}

#if defined(WINDOWS)
template <>
static void load_data<true>(T& data, M& stream, const P& p)
#elif defined(LINUX)
template <bool pointer>
static void load_data(std::enable_if_t<!pointer, T&> data, M& stream, const P& p)
#endif
{
CLoader<M, P>::load_data(*(data = new typename object_type_traits::remove_pointer<T>::type()), stream, p);
}
Expand Down Expand Up @@ -76,14 +94,24 @@ struct CLoader
template <typename T1, typename T2>
struct add_helper
{
#if defined(WINDOWS)
template <bool>
static void add(T1& data, T2& value)
#elif defined(LINUX)
template <bool a>
static void add(std::enable_if_t<a, T1&> data, T2& value)
#endif
{
data.push_back(value);
}

#if defined(WINDOWS)
template <>
static void add<true>(T1& data, T2& value)
#elif defined(LINUX)
template <bool a>
static void add(std::enable_if_t<!a, T1&> data, T2& value)
#endif
{
data.insert(value);
}
Expand Down Expand Up @@ -115,13 +143,22 @@ struct CLoader
struct CHelper4
{
template <bool a>
#if defined(WINDOWS)
static void load_data(T& data, M& stream, const P& p)
#elif defined(LINUX)
static void load_data(std::enable_if_t<a, T&> data, M& stream, const P& p)
#endif
{
CHelper<T>::load_data<object_type_traits::is_pointer<T>::value>(data, stream, p);
}

#if defined(WINDOWS)
template <>
static void load_data<true>(T& data, M& stream, const P& p)
#elif defined(LINUX)
template <bool a>
static void load_data(std::enable_if_t<!a, T&> data, M& stream, const P& p)
#endif
{
CHelper3::load_data(data, stream, p);
}
Expand Down

0 comments on commit 5ab613c

Please sign in to comment.