diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/eina_cxx/eina_value.hh | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/src/lib/eina_cxx/eina_value.hh b/src/lib/eina_cxx/eina_value.hh index aee5b853c2..378c344f91 100644 --- a/src/lib/eina_cxx/eina_value.hh +++ b/src/lib/eina_cxx/eina_value.hh | |||
@@ -8,28 +8,15 @@ | |||
8 | 8 | ||
9 | namespace efl { namespace eina { | 9 | namespace efl { namespace eina { |
10 | 10 | ||
11 | template <typename T, typename Enable = void> | ||
12 | struct _eina_value_traits; | ||
13 | |||
11 | template <typename T> | 14 | template <typename T> |
12 | struct _eina_value_traits_base; | 15 | struct _eina_value_traits_base; |
13 | 16 | ||
14 | template <typename T> | 17 | template <typename T> |
15 | struct _eina_value_traits_aux; | 18 | struct _eina_value_traits_aux; |
16 | 19 | ||
17 | // Indirection for uint64_t. uint64_t can be a typedef for unsigned | ||
18 | // long, so we can't specialize on the same template | ||
19 | template <> | ||
20 | struct _eina_value_traits_aux<uint64_t> | ||
21 | { | ||
22 | static ::Eina_Value_Type const* value_type() | ||
23 | { | ||
24 | return EINA_VALUE_TYPE_UINT64; | ||
25 | } | ||
26 | }; | ||
27 | |||
28 | template <typename T, typename Enable = void> | ||
29 | struct _eina_value_traits : _eina_value_traits_aux<T> | ||
30 | { | ||
31 | }; | ||
32 | |||
33 | template <typename T> | 20 | template <typename T> |
34 | struct _eina_value_traits_base | 21 | struct _eina_value_traits_base |
35 | { | 22 | { |
@@ -62,6 +49,23 @@ struct _eina_value_traits_base | |||
62 | } | 49 | } |
63 | }; | 50 | }; |
64 | 51 | ||
52 | // Indirection for uint64_t. uint64_t can be a typedef for unsigned | ||
53 | // long, so we can't specialize on the same template | ||
54 | template <> | ||
55 | struct _eina_value_traits_aux<uint64_t> | ||
56 | : _eina_value_traits_base<uint64_t> | ||
57 | { | ||
58 | static ::Eina_Value_Type const* value_type() | ||
59 | { | ||
60 | return EINA_VALUE_TYPE_UINT64; | ||
61 | } | ||
62 | }; | ||
63 | |||
64 | template <typename T, typename Enable> | ||
65 | struct _eina_value_traits : _eina_value_traits_aux<T> | ||
66 | { | ||
67 | }; | ||
68 | |||
65 | template <> | 69 | template <> |
66 | struct _eina_value_traits<unsigned char> | 70 | struct _eina_value_traits<unsigned char> |
67 | : _eina_value_traits_base<unsigned char> | 71 | : _eina_value_traits_base<unsigned char> |
@@ -241,6 +245,11 @@ public: | |||
241 | : _raw(_eina_value_traits<char>::create()) | 245 | : _raw(_eina_value_traits<char>::create()) |
242 | { | 246 | { |
243 | } | 247 | } |
248 | template <typename T> | ||
249 | eina_value(T v) | ||
250 | { | ||
251 | primitive_init(v); | ||
252 | } | ||
244 | eina_value(char v) | 253 | eina_value(char v) |
245 | { | 254 | { |
246 | primitive_init(v); | 255 | primitive_init(v); |