Commit a2798bc8 authored by Davis King's avatar Davis King

Increased the number of template arguments of the type_safe_union from 10 to 20.

--HG--
extra : convert_revision : svn%3Afdd8eb12-d10e-0410-9acb-85c331704f74/trunk%403450
parent 35a9f279
...@@ -24,7 +24,18 @@ namespace dlib ...@@ -24,7 +24,18 @@ namespace dlib
typename T7 = T1, typename T7 = T1,
typename T8 = T1, typename T8 = T1,
typename T9 = T1, typename T9 = T1,
typename T10 = T1 typename T10 = T1,
typename T11 = T1,
typename T12 = T1,
typename T13 = T1,
typename T14 = T1,
typename T15 = T1,
typename T16 = T1,
typename T17 = T1,
typename T18 = T1,
typename T19 = T1,
typename T20 = T1
> >
class type_safe_union : noncopyable class type_safe_union : noncopyable
{ {
...@@ -38,7 +49,8 @@ namespace dlib ...@@ -38,7 +49,8 @@ namespace dlib
private: private:
const static size_t max_size = tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<sizeof(T1), const static size_t max_size = tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<
tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<sizeof(T1),
sizeof(T2)>::value, sizeof(T2)>::value,
sizeof(T3)>::value, sizeof(T3)>::value,
sizeof(T4)>::value, sizeof(T4)>::value,
...@@ -47,7 +59,17 @@ namespace dlib ...@@ -47,7 +59,17 @@ namespace dlib
sizeof(T7)>::value, sizeof(T7)>::value,
sizeof(T8)>::value, sizeof(T8)>::value,
sizeof(T9)>::value, sizeof(T9)>::value,
sizeof(T10)>::value; sizeof(T10)>::value,
sizeof(T11)>::value,
sizeof(T12)>::value,
sizeof(T13)>::value,
sizeof(T14)>::value,
sizeof(T15)>::value,
sizeof(T16)>::value,
sizeof(T17)>::value,
sizeof(T18)>::value,
sizeof(T19)>::value,
sizeof(T20)>::value;
stack_based_memory_block<max_size> mem; stack_based_memory_block<max_size> mem;
...@@ -93,6 +115,18 @@ namespace dlib ...@@ -93,6 +115,18 @@ namespace dlib
if (is_same_type<T,T9>::value) return 9; if (is_same_type<T,T9>::value) return 9;
if (is_same_type<T,T10>::value) return 10; if (is_same_type<T,T10>::value) return 10;
if (is_same_type<T,T11>::value) return 11;
if (is_same_type<T,T12>::value) return 12;
if (is_same_type<T,T13>::value) return 13;
if (is_same_type<T,T14>::value) return 14;
if (is_same_type<T,T15>::value) return 15;
if (is_same_type<T,T16>::value) return 16;
if (is_same_type<T,T17>::value) return 17;
if (is_same_type<T,T18>::value) return 18;
if (is_same_type<T,T19>::value) return 19;
if (is_same_type<T,T20>::value) return 20;
// return a number that doesn't match any of the // return a number that doesn't match any of the
// valid states of type_identity // valid states of type_identity
return 10000; return 10000;
...@@ -204,6 +238,18 @@ namespace dlib ...@@ -204,6 +238,18 @@ namespace dlib
case 9: deserialize(item.get<T9>(), in); break; case 9: deserialize(item.get<T9>(), in); break;
case 10: deserialize(item.get<T10>(), in); break; case 10: deserialize(item.get<T10>(), in); break;
case 11: deserialize(item.get<T11>(), in); break;
case 12: deserialize(item.get<T12>(), in); break;
case 13: deserialize(item.get<T13>(), in); break;
case 14: deserialize(item.get<T14>(), in); break;
case 15: deserialize(item.get<T15>(), in); break;
case 16: deserialize(item.get<T16>(), in); break;
case 17: deserialize(item.get<T17>(), in); break;
case 18: deserialize(item.get<T18>(), in); break;
case 19: deserialize(item.get<T19>(), in); break;
case 20: deserialize(item.get<T20>(), in); break;
default: throw serialization_error("Corrupt data detected while deserializing type_safe_union"); default: throw serialization_error("Corrupt data detected while deserializing type_safe_union");
} }
} }
...@@ -236,6 +282,18 @@ namespace dlib ...@@ -236,6 +282,18 @@ namespace dlib
case 8: obj(get<T8>()); break; case 8: obj(get<T8>()); break;
case 9: obj(get<T9>()); break; case 9: obj(get<T9>()); break;
case 10: obj(get<T10>()); break; case 10: obj(get<T10>()); break;
case 11: obj(get<T11>()); break;
case 12: obj(get<T12>()); break;
case 13: obj(get<T13>()); break;
case 14: obj(get<T14>()); break;
case 15: obj(get<T15>()); break;
case 16: obj(get<T16>()); break;
case 17: obj(get<T17>()); break;
case 18: obj(get<T18>()); break;
case 19: obj(get<T19>()); break;
case 20: obj(get<T20>()); break;
} }
} }
...@@ -262,6 +320,18 @@ namespace dlib ...@@ -262,6 +320,18 @@ namespace dlib
case 8: obj(get<T8>()); break; case 8: obj(get<T8>()); break;
case 9: obj(get<T9>()); break; case 9: obj(get<T9>()); break;
case 10: obj(get<T10>()); break; case 10: obj(get<T10>()); break;
case 11: obj(get<T11>()); break;
case 12: obj(get<T12>()); break;
case 13: obj(get<T13>()); break;
case 14: obj(get<T14>()); break;
case 15: obj(get<T15>()); break;
case 16: obj(get<T16>()); break;
case 17: obj(get<T17>()); break;
case 18: obj(get<T18>()); break;
case 19: obj(get<T19>()); break;
case 20: obj(get<T20>()); break;
} }
} }
...@@ -318,7 +388,18 @@ namespace dlib ...@@ -318,7 +388,18 @@ namespace dlib
is_same_type<T,T7>::value || is_same_type<T,T7>::value ||
is_same_type<T,T8>::value || is_same_type<T,T8>::value ||
is_same_type<T,T9>::value || is_same_type<T,T9>::value ||
is_same_type<T,T10>::value is_same_type<T,T10>::value ||
is_same_type<T,T11>::value ||
is_same_type<T,T12>::value ||
is_same_type<T,T13>::value ||
is_same_type<T,T14>::value ||
is_same_type<T,T15>::value ||
is_same_type<T,T16>::value ||
is_same_type<T,T17>::value ||
is_same_type<T,T18>::value ||
is_same_type<T,T19>::value ||
is_same_type<T,T20>::value
)); ));
construct<T>(); construct<T>();
...@@ -331,11 +412,13 @@ namespace dlib ...@@ -331,11 +412,13 @@ namespace dlib
template < template <
typename T1, typename T2, typename T3, typename T4, typename T5, typename T1, typename T2, typename T3, typename T4, typename T5,
typename T6, typename T7, typename T8, typename T9, typename T10 typename T6, typename T7, typename T8, typename T9, typename T10,
typename T11, typename T12, typename T13, typename T14, typename T15,
typename T16, typename T17, typename T18, typename T19, typename T20
> >
inline void swap ( inline void swap (
type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& a, type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>& a,
type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& b type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>& b
) { a.swap(b); } ) { a.swap(b); }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
......
...@@ -21,7 +21,17 @@ namespace dlib ...@@ -21,7 +21,17 @@ namespace dlib
typename T7 = T1, typename T7 = T1,
typename T8 = T1, typename T8 = T1,
typename T9 = T1, typename T9 = T1,
typename T10 = T1 typename T10 = T1,
typename T11 = T1,
typename T12 = T1,
typename T13 = T1,
typename T14 = T1,
typename T15 = T1,
typename T16 = T1,
typename T17 = T1,
typename T18 = T1,
typename T19 = T1,
typename T20 = T1
> >
class type_safe_union : noncopyable class type_safe_union : noncopyable
{ {
...@@ -147,13 +157,10 @@ namespace dlib ...@@ -147,13 +157,10 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template < ... >
typename T1, typename T2, typename T3, typename T4, typename T5,
typename T6, typename T7, typename T8, typename T9, typename T10
>
inline void swap ( inline void swap (
type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& a, type_safe_union<...>& a,
type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& b type_safe_union<...>& b
) { a.swap(b); } ) { a.swap(b); }
/*! /*!
provides a global swap function provides a global swap function
...@@ -161,24 +168,18 @@ namespace dlib ...@@ -161,24 +168,18 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template < ... >
typename T1, typename T2, typename T3, typename T4, typename T5,
typename T6, typename T7, typename T8, typename T9, typename T10
>
void serialize ( void serialize (
const type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& item, const type_safe_union<...>& item,
std::ostream& out std::ostream& out
); );
/*! /*!
provides serialization support provides serialization support
!*/ !*/
template < template < ... >
typename T1, typename T2, typename T3, typename T4, typename T5,
typename T6, typename T7, typename T8, typename T9, typename T10
>
void deserialize ( void deserialize (
type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& item, type_safe_union<...>& item,
std::istream& in std::istream& in
); );
/*! /*!
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment