49struct add_pointer_if_not
54template <
typename... T>
65template <
typename... T>
80 template <
typename BundleT>
84 template <
typename BundleT>
88 template <
typename BundleT>
92 template <
typename BundleT>
96 template <
typename ApiT = TIMEMORY_API>
104template <
typename... T>
119 template <
typename BundleT>
123 template <
typename BundleT>
127 template <
typename BundleT>
131 template <
typename BundleT>
135 template <
typename ApiT = TIMEMORY_API>
144template <
typename... T>
159 template <
typename BundleT>
163 template <
typename BundleT>
167 template <
typename BundleT>
171 template <
typename BundleT>
175 template <
typename ApiT = TIMEMORY_API>
183template <
typename... T>
187template <
typename... T>
191template <
typename... T>
195template <
typename... T>
199template <
typename... T>
200struct stack_wrapper_types<
std::tuple<T...>> : stack_wrapper_types<T...>
203template <
typename... T>
204struct mixed_wrapper_types<
std::tuple<T...>> : mixed_wrapper_types<T...>
212template <
typename... T>
215template <
typename C,
typename A,
typename T>
216struct bundle_definitions;
218using EmptyT = std::tuple<>;
222 conditional_t<trait::sampler<U>::value, operation::sample<U>, EmptyT>;
224template <
typename... T>
227 using tuple_type = std::tuple<T...>;
228 using reference_type = std::tuple<T...>;
229 using sample_type = std::tuple<sample_type_t<T>...>;
230 using print_type = std::tuple<operation::print<T>...>;
233template <
typename... T>
234struct bundle<
std::tuple<T...>> : bundle<T...>
237template <
typename... T>
238struct bundle<
type_list<T...>> : bundle<T...>
241template <
template <
typename...>
class CompL,
template <
typename...>
class AutoL,
242 template <
typename...>
class DataL,
typename... L,
typename... T>
243struct bundle_definitions<CompL<L...>, AutoL<L...>, DataL<T...>>
245 using component_type = CompL<T...>;
246 using auto_type = AutoL<T...>;
249template <
template <
typename>
class Op,
typename TagT,
typename... T>
250struct generic_operation;
252template <
template <
typename>
class Op,
typename... T>
253struct custom_operation;
255template <
template <
typename>
class Op,
typename TagT,
typename... T>
256struct generic_operation
259 std::tuple<operation::generic_operator<remove_pointer_t<T>,
260 Op<remove_pointer_t<T>>, TagT>...>;
263template <
template <
typename>
class Op,
typename TagT,
typename... T>
264struct generic_operation<Op, TagT,
std::tuple<T...>> : generic_operation<Op, TagT, T...>
267template <
template <
typename>
class Op,
typename... T>
268struct custom_operation
270 using type = std::tuple<Op<T>...>;
273template <
template <
typename>
class Op,
typename... T>
274struct custom_operation<Op,
std::tuple<T...>> : custom_operation<Op, T...>
277template <
typename... U>
280template <
typename T,
typename... F,
typename... U>
281struct quirk_config<T,
type_list<F...>, U...>
283 static constexpr bool value =
288template <
typename Tp,
size_t N,
size_t... Idx>
290to_tuple_pointer(std::array<Tp, N>& _data, std::index_sequence<Idx...>,
293 return std::make_tuple(std::addressof(std::get<Idx>(_data))...);
296template <
typename Tp,
size_t N,
size_t... Idx>
298to_tuple_pointer(std::array<Tp, N>& _data, std::index_sequence<Idx...>,
301 return std::make_tuple(std::get<Idx>(_data)...);
315template <
typename ApiT =
TIMEMORY_API,
template <
typename...>
class TupleT,
318get(
const TupleT<Types...>& m_data,
void*& ptr,
size_t _hash)
325 using get_type = std::tuple<operation::generic_operator<
326 decay_t<remove_pointer_t<Types>>,
327 operation::get<decay_t<remove_pointer_t<Types>>>, ApiT>...>;
328 mpl::apply<void>::access<get_type>(m_data, ptr, _hash);
335 typename T = decay_t<U>>
341 return &(std::get<index_of<T, decay_t<data_type>>::value>(
342 std::forward<data_type>(m_data)));
349 typename T = decay_t<U>>
355 return std::get<index_of<T, decay_t<data_type>>::value>(
356 std::forward<data_type>(m_data));
364 typename T = decay_t<U>>
367 !
is_one_of<T, decay_t<data_type>>::value,
370 return std::get<index_of<T*, decay_t<data_type>>::value>(m_data);
378 typename T = decay_t<U>,
typename R = remove_pointer_t<T>>
381 !
is_one_of<T*, decay_t<data_type>>::value &&
385 return &std::get<index_of<R, decay_t<data_type>>::value>(m_data);
393 typename T = decay_t<U>,
typename R = remove_pointer_t<T>>
396 !
is_one_of<T*, decay_t<data_type>>::value &&
397 !
is_one_of<R, decay_t<data_type>>::value,
401 get(std::forward<data_type>(m_data), ptr, typeid_hash<T>());
402 return static_cast<T*
>(ptr);
409template <
typename U,
typename data_type,
typename T = std::remove_po
inter_t<decay_t<U>>>
416 return get<T>(std::forward<data_type>(m_data));
419template <
typename U,
typename data_type,
typename T = std::remove_po
inter_t<decay_t<U>>>
426 return get<T>(std::forward<data_type>(m_data));
430template <
typename U,
typename data_type,
typename T = std::remove_po
inter_t<decay_t<U>>>
437 return std::get<index_of<T, decay_t<data_type>>::value>(m_data);
441template <
typename U,
typename data_type,
typename T = std::remove_po
inter_t<decay_t<U>>>
448 return std::get<index_of<T*, decay_t<data_type>>::value>(m_data);
typename auto_type< T >::type auto_type_t
impl::filter_true< concepts::is_quirk_type, T > non_quirk_t
impl::filter_true< concepts::is_placeholder, T > non_placeholder_t
std::bitset< scope_count > data_type
typename impl::add_pointer_if_not< T >::type add_pointer_if_not_t
typename impl::concat< Types... >::type concat
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
convert_t< mpl::available_t< concat< T... > >, type_list<> > type_list_t
typename impl::is_one_of< Tp, Types > is_one_of
check if type is in expansion
typename contains_one_of< Predicate, Types >::type contains_one_of_t
auto get(const auto_bundle< Tag, Types... > &_obj)
typename std::conditional< B, Lhs, Rhs >::type conditional_t
typename impl::convert< T, U >::type convert_t
lightweight tuple-alternative for meta-programming logic
Declare the operations types.
trait that signifies that an implementation for the component is available. When this is set to false...
convert_t< available_type, BundleT > type
the type after available_t<concat<...>>
conditional_t< trait::is_available< ApiT >::value, convert_t< add_pointer_if_not_t< mpl::non_placeholder_t< mpl::non_quirk_t< type_list_t< T... > > > >, std::tuple<> >, std::tuple<> > data_type
the valid types to instantiate in a tuple
convert_t< type_list< T... >, BundleT > this_type
the original bundle type
convert_t< type_list< T... >, BundleT > component_type
conversion to equivalent wrapper requiring explicit start/stop
type_list_t< reference_type > available_type
type list of the available types
TIMEMORY_DELETED_OBJECT(heap_wrapper_types) using type_list_type
the set of types, unaltered, in a type_list
concepts::auto_type_t< convert_t< type_list_type, BundleT > > auto_type
conversion to equivalent wrapper which automatically starts/stops
concepts::auto_type_t< convert_t< type_list_type, BundleT > > auto_type
conversion to equivalent wrapper which automatically starts/stops
convert_t< type_list_type, BundleT > this_type
the original bundle type
convert_t< type_list< T... >, BundleT > component_type
conversion to equivalent wrapper requiring explicit start/stop
convert_t< type_list_t< T... >, BundleT > type
the type after available_t<concat<...>>
conditional_t< trait::is_available< ApiT >::value, convert_t< mpl::non_placeholder_t< mpl::non_quirk_t< type_list_t< T... > > >, std::tuple<> >, std::tuple<> > data_type
the valid types to instantiate in a tuple
type_list_t< std::remove_pointer_t< T >... > available_type
type list of the available types
TIMEMORY_DELETED_OBJECT(mixed_wrapper_types) using type_list_type
the set of types, unaltered, in a type_list
type_list_t< reference_type > available_type
type list of the available types
convert_t< type_list< T... >, BundleT > component_type
conversion to equivalent wrapper requiring explicit start/stop
conditional_t< trait::is_available< ApiT >::value, convert_t< mpl::non_placeholder_t< mpl::non_quirk_t< type_list_t< std::remove_pointer_t< T >... > > >, std::tuple<> >, std::tuple<> > data_type
the valid types to instantiate in a tuple
concepts::auto_type_t< convert_t< type_list_type, BundleT > > auto_type
conversion to equivalent wrapper which automatically starts/stops
TIMEMORY_DELETED_OBJECT(stack_wrapper_types) using type_list_type
the set of types, unaltered, in a type_list
convert_t< type_list_type, BundleT > this_type
the original bundle type
convert_t< available_type, BundleT > type
the type after available_t<concat<...>>