Empirical
Namespaces | Classes | Functions | Variables
emp::tools Namespace Reference

Namespaces

 __attrs_impl
 
 __impl_attr_base
 
 __impl_attrs_merge
 
 __impl_attrs_reduce
 
 __impl_has_attr
 

Classes

class  Attrs
 
struct  has_attribute
 
struct  is_attribute_value
 
struct  is_attributes_pack
 
struct  is_attributes_pack< Attrs< U... > >
 
struct  is_same_attribute
 
struct  value_tag
 

Functions

template<typename... T>
constexpr Attrs< std::decay_t< T >... > MakeAttrs (T &&...props)
 
template<typename I , typename R , typename... A>
constexpr auto MergeReduce (I &&init, R &&reducer, A &&...attrs)
 
template<typename I , typename R , typename... A>
constexpr auto Reduce (I &&init, R &&reducer, A &&...attrs)
 
template<typename F , typename... A>
constexpr void MergeForeach (F &&callback, A &&...attrs)
 
template<typename F , typename... A>
constexpr void Foreach (F &&callback, A &&...attrs)
 
template<typename... U>
constexpr auto Merge (U &&...packs) -> decltype(MergeReduce(Attrs<>
 
template<class H , class... T>
std::ostream & operator<< (std::ostream &out, const Attrs< H, T... > &attrs)
 
std::ostream & operator<< (std::ostream &out, const Attrs<> &attrs)
 

Variables

template<typename T >
constexpr bool is_attribute_value_v = is_attribute_value<T>::value
 
template<typename T >
constexpr bool is_attributes_pack_v = is_attributes_pack<T>::value
 
template<typename Pack , typename Attr >
constexpr bool has_attribute_v = has_attribute<Pack, Attr>::value
 

Function Documentation

template<typename F , typename... A>
constexpr void emp::tools::Foreach ( F &&  callback,
A &&...  attrs 
)
template<typename... T>
constexpr Attrs< std::decay_t< T >... > emp::tools::MakeAttrs ( T &&...  props)

An alternative syntax for creating attribute packs. Takes any number of attributes and returns a pack containing each of those attributes.

template<typename... U>
constexpr auto emp::tools::Merge ( U &&...  packs) -> decltype(MergeReduce(Attrs<>

Creates a new attribute pack which has all the attributes of this pack and another pack. Values will be taken from other other pack preferentially.

template<typename F , typename... A>
constexpr void emp::tools::MergeForeach ( F &&  callback,
A &&...  attrs 
)
template<typename I , typename R , typename... A>
constexpr auto emp::tools::MergeReduce ( I &&  init,
R &&  reducer,
A &&...  attrs 
)
template<class H , class... T>
std::ostream& emp::tools::operator<< ( std::ostream &  out,
const Attrs< H, T... > &  attrs 
)
std::ostream& emp::tools::operator<< ( std::ostream &  out,
const Attrs<> &  attrs 
)
template<typename I , typename R , typename... A>
constexpr auto emp::tools::Reduce ( I &&  init,
R &&  reducer,
A &&...  attrs 
)

Variable Documentation

template<typename Pack , typename Attr >
constexpr bool emp::tools::has_attribute_v = has_attribute<Pack, Attr>::value
template<typename T >
constexpr bool emp::tools::is_attribute_value_v = is_attribute_value<T>::value
template<typename T >
constexpr bool emp::tools::is_attributes_pack_v = is_attributes_pack<T>::value