Empirical
Classes | Namespaces | Macros | Typedefs | Functions
meta.h File Reference
#include <functional>
#include <tuple>
#include <utility>

Go to the source code of this file.

Classes

struct  emp::run_and_ignore
 
struct  emp::internal::pack_id_impl< ID, T, Ts >
 
struct  emp::internal::pack_id_impl< 0, T, Ts... >
 
struct  emp::internal::test_type_v_impl< RESULT, value_exist >
 
struct  emp::internal::test_type_v_impl< RESULT, 0 >
 
struct  emp::internal::test_type_e_impl< TEST, T, exist >
 
struct  emp::internal::test_type_e_impl< TEST, T, 0 >
 
struct  emp::internal::tcall_impl< PARAMS >
 
struct  emp::AdaptFunction< R, ARGS >
 
struct  emp::internal::AdaptTemplateHelper< T, U >
 
struct  emp::internal::AdaptTemplateHelper< T< V... >, U... >
 
class  emp::internal::AdaptTemplateHelper_Arg1< T, U >
 
class  emp::internal::AdaptTemplateHelper_Arg1< T< X, V... >, U >
 
struct  emp::tIntMath< I, Is >
 
struct  emp::tIntMath< I >
 
struct  emp::function_traits< Function >
 
struct  emp::function_traits< ReturnType(ClassType::*)(Args...) const >
 

Namespaces

 emp
 If we are in emscripten, make sure to include the header.
 
 emp::internal
 

Macros

#define emp_bool_decoy(TEST)   emp::sfinae_decoy<bool, decltype(TEST)>
 
#define emp_int_decoy(TEST)   emp::sfinae_decoy<int, decltype(TEST)>
 

Typedefs

template<typename T1 , typename... Ts>
using emp::first_type = T1
 
template<typename T1 , typename T2 , typename... Ts>
using emp::second_type = T2
 
template<typename T1 , typename T2 , typename T3 , typename... Ts>
using emp::third_type = T3
 
template<size_t ID, typename... Ts>
using emp::pack_id = typename internal::pack_id_impl< ID, Ts... >::type
 
template<typename... Ts>
using emp::last_type = pack_id< sizeof...(Ts)-1, Ts... >
 
template<typename REAL_TYPE , typename EVAL_TYPE >
using emp::sfinae_decoy = REAL_TYPE
 
template<typename REAL_TYPE , typename EVAL_TYPE >
using emp::type_decoy = REAL_TYPE
 
template<typename EVAL_TYPE >
using emp::bool_decoy = bool
 
template<typename EVAL_TYPE >
using emp::int_decoy = int
 
template<typename T >
using emp::internal::value_member = decltype(T::value)
 
template<typename T , typename... U>
using emp::AdaptTemplate = typename internal::AdaptTemplateHelper< T, U... >::type
 
template<typename T , typename U >
using emp::AdaptTemplate_Arg1 = typename internal::AdaptTemplateHelper_Arg1< T, U >::type
 

Functions

template<typename TEST >
constexpr bool emp::has_type ()
 
template<typename TEST , typename FIRST , typename... OTHERS>
constexpr bool emp::has_type ()
 
template<typename TEST >
constexpr size_t emp::count_type ()
 
template<typename TEST , typename FIRST , typename... OTHERS>
constexpr size_t emp::count_type ()
 
template<typename TEST_T >
constexpr int emp::internal::get_type_index_impl ()
 
template<typename TEST_T , typename T1 , typename... Ts>
constexpr int emp::internal::get_type_index_impl ()
 
template<typename TEST_T , typename... Ts>
constexpr int emp::get_type_index ()
 
template<typename TYPE1 >
constexpr bool emp::has_unique_first_type ()
 
template<typename TYPE1 >
constexpr bool emp::has_unique_types ()
 
template<typename TYPE1 , typename TYPE2 , typename... TYPE_LIST>
constexpr bool emp::has_unique_first_type ()
 
template<typename TYPE1 , typename TYPE2 , typename... TYPE_LIST>
constexpr bool emp::has_unique_types ()
 
template<template< typename... > class FILTER, typename T >
constexpr bool emp::internal::tt_exist_impl (bool_decoy< FILTER< T >> x)
 
template<template< typename... > class FILTER, typename T >
constexpr bool emp::internal::tt_exist_impl (...)
 
template<template< typename... > class TEST, typename T >
constexpr bool emp::test_type_exist ()
 
template<template< typename... > class TEST, typename T >
constexpr bool emp::test_type_value ()
 
template<template< typename... > class TEST, typename T >
constexpr bool emp::test_type ()
 
template<typename R , typename... PARAMS, typename... ARGS>
auto emp::TruncateCall (std::function< R(PARAMS...)> fun, ARGS &&...args)
 
template<typename T >
auto emp::internal::Hash_impl (const T &x, bool) -> decltype(x.GetHash())
 
template<typename T >
auto emp::internal::Hash_impl (const T &x, int) -> decltype(std::hash< T >()(x))
 
template<typename T >
std::size_t emp::internal::Hash_impl (const T &x,...)
 
template<typename T >
std::size_t emp::Hash (const T &x)
 
template<typename T >
std::size_t emp::CombineHash (const T &x)
 
template<typename T1 , typename T2 , typename... EXTRA>
std::size_t emp::CombineHash (const T1 &x1, const T2 &x2, const EXTRA &...x_extra)
 
template<typename Function >
function_traits< Function >::pointer emp::to_function_pointer (Function &lambda)
 
template<typename Function >
function_traits< Function >::function emp::to_function (Function &lambda)
 

Macro Definition Documentation

#define emp_bool_decoy (   TEST)    emp::sfinae_decoy<bool, decltype(TEST)>
#define emp_int_decoy (   TEST)    emp::sfinae_decoy<int, decltype(TEST)>