1 #ifndef EFL_EET_COMPOSITE_HH_
2 #define EFL_EET_COMPOSITE_HH_
4 namespace efl { namespace eet {
6 template <typename, typename...> struct descriptor;
10 struct member_desc_info
16 template <std::size_t E, typename U, typename... Types>
17 void descriptor_register_composite_member( ::Eet_Data_Descriptor*, int
18 , eet::descriptor<U, Types...>const*
19 , std::integral_constant<std::size_t, E>)
23 template <std::size_t E, typename U, typename... Types, std::size_t I>
24 void descriptor_register_composite_member( ::Eet_Data_Descriptor* cls, int offset_base
25 , eet::descriptor<U, Types...>const* descriptor
26 , std::integral_constant<std::size_t, I>
27 , typename std::enable_if<E != I>::type* = 0)
29 typedef typename std::tuple_element<I, std::tuple<Types...> >::type member_type;
30 eet_data_descriptor_element_add(cls, descriptor->get_member_info()[I].name
31 , _eet_type<member_type>::value, EET_G_UNKNOWN
32 , offset_base + descriptor->get_member_info()[I].offset
33 , 0, nullptr, nullptr);
35 _detail::descriptor_register_composite_member<E>
36 (cls, offset_base, descriptor, std::integral_constant<std::size_t, I+1>());
39 template <typename U, typename...Types>
40 void descriptor_type_register_composite( ::Eet_Data_Descriptor* cls, member_desc_info info
41 , eet::descriptor<U, Types...>const* descriptor)
43 _detail::descriptor_register_composite_member<eet::descriptor<U, Types...>::members::value>
44 (cls, info.offset, descriptor, std::integral_constant<std::size_t, 0u>());