DryChem 1.0.0
A generic, compile-time C++ toolbox with no dependencies for the modern computational chemistry project.
Loading...
Searching...
No Matches
CppUtils::Meta Namespace Reference

Namespaces

namespace  details
 

Classes

struct  front_list
 
struct  front_list< std::integer_sequence< T, Head, Tail... > >
 
struct  is_allocator_aware_container
 
struct  is_allocator_aware_container< T, std::void_t< typename T::allocator_type > >
 
struct  is_associative_container
 
struct  is_associative_container< T, std::void_t< typename T::key_type, typename T::key_compare, typename T::value_compare, decltype(std::declval< T >().key_comp()), decltype(std::declval< T >().value_comp())> >
 
struct  is_container
 
struct  is_container< T, std::void_t< typename T::value_type, typename T::reference, typename T::const_reference, typename T::iterator, typename T::const_iterator, typename T::difference_type, typename T::size_type, decltype(std::declval< T >().begin()), decltype(std::declval< T >().end()), decltype(std::declval< T >().cbegin()), decltype(std::declval< T >().cend()), decltype(std::declval< T >().max_size()), decltype(std::declval< T >().empty())> >
 
struct  is_container_adapter
 
struct  is_container_adapter< T, std::void_t< typename T::container_type, typename T::value_type, typename T::size_type, typename T::reference, typename T::const_reference, decltype(std::declval< T >().empty()), decltype(std::declval< T >().size())> >
 
struct  is_empty_list
 
struct  is_empty_list< std::integer_sequence< T, Elements... > >
 
struct  is_reversible_container
 
struct  is_reversible_container< T, std::void_t< typename T::reverse_iterator, typename T::const_reverse_iterator, decltype(std::declval< T >().rbegin()), decltype(std::declval< T >().rend()), decltype(std::declval< T >().crbegin()), decltype(std::declval< T >().crend())> >
 
struct  is_sequence_container
 
struct  is_unordered_associative_container
 
struct  is_unordered_associative_container< T, std::void_t< typename T::key_type, typename T::value_type, typename T::hasher, typename T::key_equal, typename T::local_iterator, typename T::const_local_iterator > >
 
struct  pop_front_list
 
struct  pop_front_list< std::integer_sequence< T, Head, Tail... > >
 
struct  push_back_list
 
struct  push_back_list< std::integer_sequence< T, Elements... >, std::integral_constant< T, NewElement > >
 
struct  push_front_list
 
struct  push_front_list< std::integer_sequence< T, Elements... >, std::integral_constant< T, NewElement > >
 
struct  reverse_list
 
struct  reverse_list< List, false >
 
struct  reverse_list< List, true >
 

Typedefs

template<typename List>
using front_list_t = typename front_list<List>::type
 Convenience variable template for ease-of-use.
 
template<typename List>
using pop_front_list_t = typename pop_front_list<List>::type
 Convenience variable template for ease-of-use.
 
template<typename List, typename NewElement>
using push_back_list_t = typename push_back_list<List, NewElement>::type
 Convenience variable template for ease-of-use.
 
template<typename List, typename NewElement>
using push_front_list_t = typename push_front_list<List, NewElement>::type
 Convenience variable template for ease-of-use.
 
template<typename List>
using reverse_list_t = typename reverse_list<List>::type
 Convenience variable template for ease-of-use.
 

Functions

template<std::size_t N, typename F, typename Tuple>
constexpr decltype(auto) apply_n (F &&f, Tuple &&tuple)
 
template<typename... Elements>
constexpr auto front (const std::tuple< Elements... > &tuple)
 
template<typename... Elements>
constexpr bool is_empty (const std::tuple< Elements... > &)
 
template<typename... Elements>
constexpr auto pop_front (const std::tuple< Elements... > &tuple)
 
template<typename... Elements, typename NewElement>
constexpr auto push_back (const std::tuple< Elements... > &tuple, NewElement newElement)
 
template<typename... Elements, typename NewElement>
constexpr auto push_front (const std::tuple< Elements... > &tuple, NewElement newElement)
 
template<typename... Elements>
constexpr auto reverse (const std::tuple< Elements... > &tuple)
 
template<typename... Elements, std::size_t... Indices>
constexpr auto select (const std::tuple< Elements... > &tuple, std::index_sequence< Indices... >)
 

Variables

template<typename List>
constexpr bool is_empty_list_v = is_empty_list<List>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_allocator_aware_container_v = is_allocator_aware_container<T>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_associative_container_v = is_associative_container<T>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_container_v = is_container<T>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_container_adapter_v = is_container_adapter<T>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_reversible_container_v = is_reversible_container<T>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_sequence_container_v = is_sequence_container<T>::value
 Convenience variable template for ease-of-use.
 
template<typename T>
constexpr bool is_unordered_associative_container_v = is_unordered_associative_container<T>::value
 Convenience variable template for ease-of-use.
 

Typedef Documentation

◆ front_list_t

template<typename List>
using CppUtils::Meta::front_list_t = typename front_list<List>::type

◆ pop_front_list_t

template<typename List>
using CppUtils::Meta::pop_front_list_t = typename pop_front_list<List>::type

◆ push_back_list_t

template<typename List, typename NewElement>
using CppUtils::Meta::push_back_list_t = typename push_back_list<List, NewElement>::type

◆ push_front_list_t

template<typename List, typename NewElement>
using CppUtils::Meta::push_front_list_t = typename push_front_list<List, NewElement>::type

◆ reverse_list_t

template<typename List>
using CppUtils::Meta::reverse_list_t = typename reverse_list<List>::type

Function Documentation

◆ apply_n()

template<std::size_t N, typename F, typename Tuple>
decltype(auto) CppUtils::Meta::apply_n ( F && f,
Tuple && tuple )
constexpr

A function that applies a given function to the first N elements of a tuple

Template Parameters
N- The number of elements to select
F- The callable type we are invoking for the first N elements of the tuple
Tuple- The type of tuple we are passing to std::apply
Parameters
f- The function we are applying to the new tuple
tuple- The std::tuple we are trying to apply the function to

References select().

◆ front()

template<typename... Elements>
auto CppUtils::Meta::front ( const std::tuple< Elements... > & tuple)
constexpr

◆ is_empty()

template<typename... Elements>
bool CppUtils::Meta::is_empty ( const std::tuple< Elements... > & )
constexpr

References is_empty_list_v.

◆ pop_front()

template<typename... Elements>
auto CppUtils::Meta::pop_front ( const std::tuple< Elements... > & tuple)
constexpr

References select().

◆ push_back()

template<typename... Elements, typename NewElement>
auto CppUtils::Meta::push_back ( const std::tuple< Elements... > & tuple,
NewElement newElement )
constexpr

◆ push_front()

template<typename... Elements, typename NewElement>
auto CppUtils::Meta::push_front ( const std::tuple< Elements... > & tuple,
NewElement newElement )
constexpr

◆ reverse()

template<typename... Elements>
auto CppUtils::Meta::reverse ( const std::tuple< Elements... > & tuple)
constexpr

An algorithm to reverse the contents of a std::tuple using its indices.

Template Parameters
...Elements- The elements of the tuple
Parameters
tuple- The std::tuple we are trying to reverse

References select().

◆ select()

template<typename... Elements, std::size_t... Indices>
auto CppUtils::Meta::select ( const std::tuple< Elements... > & tuple,
std::index_sequence< Indices... >  )
constexpr

Function to create a new tuple in a different order from the input tuple.

Template Parameters
...Elements- The elements of the input tuple
...Indices- The new order of indices
Parameters
tuple- The std::tuple we are trying to shuffle

Referenced by apply_n(), pop_front(), and reverse().

Variable Documentation

◆ is_empty_list_v

template<typename List>
bool CppUtils::Meta::is_empty_list_v = is_empty_list<List>::value
constexpr

Referenced by is_empty().

◆ is_allocator_aware_container_v

template<typename T>
bool CppUtils::Meta::is_allocator_aware_container_v = is_allocator_aware_container<T>::value
constexpr

◆ is_associative_container_v

template<typename T>
bool CppUtils::Meta::is_associative_container_v = is_associative_container<T>::value
constexpr

◆ is_container_v

template<typename T>
bool CppUtils::Meta::is_container_v = is_container<T>::value
constexpr

◆ is_container_adapter_v

template<typename T>
bool CppUtils::Meta::is_container_adapter_v = is_container_adapter<T>::value
constexpr

◆ is_reversible_container_v

template<typename T>
bool CppUtils::Meta::is_reversible_container_v = is_reversible_container<T>::value
constexpr

◆ is_sequence_container_v

template<typename T>
bool CppUtils::Meta::is_sequence_container_v = is_sequence_container<T>::value
constexpr

◆ is_unordered_associative_container_v

template<typename T>
bool CppUtils::Meta::is_unordered_associative_container_v = is_unordered_associative_container<T>::value
constexpr