LeechCraft  0.6.70-10870-g558588d6ec
Modular cross-platform feature rich live environment.
LeechCraft::Util::detail Namespace Reference

Classes

struct  CountArgs
 
struct  CountArgs< Container< Args... > >
 
struct  DecomposeMemberPtr
 
struct  DecomposeMemberPtr< R(C::*)>
 
class  DomSiblingsIterator
 
struct  DropImpl
 
struct  DropImpl< 0, List >
 
class  Dropper
 
struct  Dumbifier
 
struct  Filter< Pred, List< Head, Tail... >, std::enable_if_t< Pred< Head >::value > >
 
struct  Filter< Pred, List< Head, Tail... >, std::enable_if_t<!Pred< Head >::value > >
 
struct  Filter< Pred, List<> >
 
struct  Identity
 
struct  Initializer
 
struct  Initializer< WorkerType >
 
struct  InitializerBase
 
struct  InvokableResGetter
 
struct  InvokableResGetter< F, List< Args... > >
 
struct  InvokableType
 
struct  IsDetected
 
struct  IsDetected< Default, std::void_t< Op< Args... > >, Op, Args... >
 
struct  IsNotBrokenSFINAE
 
struct  IsNotBrokenSFINAE< boost::iterator_range< T > >
 
class  LambdaEventFilter
 
struct  Replace
 
struct  Replace< Container< U >, T >
 
class  ScopeGuard
 
class  SharedScopeGuard
 
class  StlAssocIteratorAdaptor
 
struct  StlAssocRange
 
struct  StlAssocRange< KeyMF, ValueMF, Iter, Assoc &, PairType >
 
struct  Visitor
 
struct  VisitorBase
 
struct  VisitorFinallyTag
 

Typedefs

template<typename T >
using Dumbify = typename Dumbifier< T >::Type_t
 
template<template< typename > class F, typename V >
using MF = typename F< V >::type
 
template<template< template< typename > class, template< typename > class, typename, template< typename, typename > class > class This, template< typename > class KeyMF, template< typename > class ValueMF, typename Iter , template< typename, typename > class PairType, typename KeyType = MF<KeyMF, decltype (Iter {}.key ())>, typename ValueType = MF<ValueMF, decltype (Iter {}.value ())>>
using IteratorAdaptorBase = boost::iterator_adaptor< This< KeyMF, ValueMF, Iter, PairType >, Iter, PairType< KeyType, ValueType >, boost::use_default, PairType< KeyType, ValueType > >
 
template<typename T >
using VoidSafe = std::conditional_t< std::is_same< T, void > {}, ReturnsVoid, T >
 
template<typename F >
using RetTypeRaw_t = std::tuple_element_t< 0, decltype(TypeGetter(*static_cast< F * >(nullptr)))>
 
using DefaultScopeGuardDeleter = std::function< void()>
 
template<typename R , typename... Args>
using FixCommonType_t = decltype(FixCommonType< R, Args... >())
 

Functions

template<typename F , template< typename... > class List, typename... Args>
constexpr List< Args... > GetInvokablePartImpl (int, List< Args... >, typename std::result_of< F(Args...)>::type *=nullptr)
 
template<typename F , template< typename... > class List>
constexpr Typelist GetInvokablePartImpl (float, List<>)
 
template<typename F , template< typename... > class List, typename... Args>
constexpr auto GetInvokablePartImpl (float, List< Args... > list) -> typename InvokableType< F, decltype(Reverse(Tail(Reverse(list))))>::RetType_t
 
template<typename F , typename... Args>
constexpr auto GetInvokablePart () -> decltype(GetInvokablePartImpl< F >(0, Typelist< Args... >
 
template<template< typename... > class List, typename... Args>
constexpr size_t Length (List< Args... >)
 
template<typename T >
constexpr bool IsFunctorImpl (int, typename InstanceFunctor< T >::UndefinedTag *=nullptr)
 
template<typename T >
constexpr bool IsFunctorImpl (float)
 
template<template< typename... > class Monad, typename... Args1, typename... Args2>
constexpr bool IsCompatibleMonadImpl (const Monad< Args1... > *, const Monad< Args2... > *, int)
 
template<typename T1 , typename T2 >
constexpr bool IsCompatibleMonadImpl (const T1 *, const T2 *,...)
 
template<typename T >
constexpr T * declptr () noexcept
 
template<typename T1 , typename T2 >
constexpr bool IsCompatibleMonad ()
 
template<typename T >
constexpr bool IsMonadPlusImpl (int, typename InstanceMonadPlus< T >::UndefinedTag *=nullptr)
 
template<typename T >
constexpr bool IsMonadPlusImpl (float)
 
constexpr size_t NewTypeHash (const char *str)
 
template<typename Res , typename T >
void Append (Res &result, T &&val, decltype(result.push_back(std::forward< T >(val))) *=nullptr)
 
template<typename Res , typename T >
void Append (Res &result, T &&val, decltype(result.insert(std::forward< T >(val))) *=nullptr)
 
template<typename C >
constexpr bool IsSimpleContainer ()
 
template<template< typename... > class Fallback, bool ForceFallback, typename Container , typename F >
auto MapImpl (Container &&c, F f)
 
template<typename R , typename... Args>
std::tuple< VoidSafe< R >, Args... > TypeGetter (R(*)(Args...))
 
template<typename F >
auto TypeGetter (F &&f) -> decltype(TypeGetter(+f))
 
template<typename C , typename R , typename... Args>
std::tuple< VoidSafe< R >, Args... > TypeGetter (R(C::*)(Args...) const)
 
template<typename T >
constexpr T Declval ()
 
template<typename R , typename... Args>
decltype(auto) constexpr FixCommonType ()
 
template<typename... Vars, typename... Args, typename Common = std::common_type_t<std::result_of_t<detail::VisitorBase<Args...> (Vars&)>...>, typename Res = FixCommonType_t<Common, std::result_of_t<detail::VisitorBase<Args...> (Vars&)>...>>
constexpr Res DetectCommonType (Typelist< Vars... >, Typelist< Args... >)
 

Variables

template<typename T >
constexpr bool IsNotBrokenSFINAE_v = IsNotBrokenSFINAE<T> {}
 
template<typename C >
decltype(TypeGetter(&C::operator())) TypeGetter (const C &c)
 
template<typename... Args>
constexpr bool AllLValueRefs = AllOf<std::is_lvalue_reference, Args...>
 
template<typename... Args>
constexpr bool AllRValueRefs = AllOf<std::is_rvalue_reference, Args...>
 
template<typename... Args>
constexpr bool AllConsts = AllOf<std::is_const, Args...>
 
template<typename... Args>
constexpr bool AllConstsWithoutRefs = AllOf<std::is_const, std::remove_reference_t<Args>...>
 

Typedef Documentation

◆ DefaultScopeGuardDeleter

using LeechCraft::Util::detail::DefaultScopeGuardDeleter = typedef std::function<void ()>

Definition at line 42 of file util.h.

◆ Dumbify

template<typename T >
using LeechCraft::Util::detail::Dumbify = typedef typename Dumbifier<T>::Type_t

Definition at line 86 of file dropargs.h.

◆ FixCommonType_t

template<typename R , typename... Args>
using LeechCraft::Util::detail::FixCommonType_t = typedef decltype (FixCommonType<R, Args...> ())

Definition at line 100 of file visitor.h.

◆ IteratorAdaptorBase

template<template< template< typename > class, template< typename > class, typename, template< typename, typename > class > class This, template< typename > class KeyMF, template< typename > class ValueMF, typename Iter , template< typename, typename > class PairType, typename KeyType = MF<KeyMF, decltype (Iter {}.key ())>, typename ValueType = MF<ValueMF, decltype (Iter {}.value ())>>
using LeechCraft::Util::detail::IteratorAdaptorBase = typedef boost::iterator_adaptor< This<KeyMF, ValueMF, Iter, PairType>, Iter, PairType<KeyType, ValueType>, boost::use_default, PairType<KeyType, ValueType> >

Definition at line 66 of file qtutil.h.

◆ MF

template<template< typename > class F, typename V >
using LeechCraft::Util::detail::MF = typedef typename F<V>::type

Definition at line 43 of file qtutil.h.

◆ RetTypeRaw_t

template<typename F >
using LeechCraft::Util::detail::RetTypeRaw_t = typedef std::tuple_element_t<0, decltype (TypeGetter (*static_cast<F*> (nullptr)))>

Definition at line 66 of file typegetter.h.

◆ VoidSafe

template<typename T >
using LeechCraft::Util::detail::VoidSafe = typedef std::conditional_t< std::is_same<T, void> {}, ReturnsVoid, T >

Definition at line 48 of file typegetter.h.

Function Documentation

◆ Append() [1/2]

template<typename Res , typename T >
void LeechCraft::Util::detail::Append ( Res &  result,
T &&  val,
decltype(result.push_back(std::forward< T >(val))) *  = nullptr 
)

Definition at line 92 of file prelude.h.

Referenced by LeechCraft::Util::Filter(), and MapImpl().

+ Here is the caller graph for this function:

◆ Append() [2/2]

template<typename Res , typename T >
void LeechCraft::Util::detail::Append ( Res &  result,
T &&  val,
decltype(result.insert(std::forward< T >(val))) *  = nullptr 
)

Definition at line 98 of file prelude.h.

◆ declptr()

template<typename T >
constexpr T* LeechCraft::Util::detail::declptr ( )
noexcept

Definition at line 70 of file monad.h.

◆ Declval()

template<typename T >
constexpr T LeechCraft::Util::detail::Declval ( )

Definition at line 64 of file visitor.h.

◆ DetectCommonType()

template<typename... Vars, typename... Args, typename Common = std::common_type_t<std::result_of_t<detail::VisitorBase<Args...> (Vars&)>...>, typename Res = FixCommonType_t<Common, std::result_of_t<detail::VisitorBase<Args...> (Vars&)>...>>
constexpr Res LeechCraft::Util::detail::DetectCommonType ( Typelist< Vars... >  ,
Typelist< Args... >   
)

Referenced by LeechCraft::Util::Visit().

+ Here is the caller graph for this function:

◆ FixCommonType()

template<typename R , typename... Args>
decltype(auto) constexpr LeechCraft::Util::detail::FixCommonType ( )

Definition at line 79 of file visitor.h.

◆ GetInvokablePart()

template<typename F , typename... Args>
constexpr auto LeechCraft::Util::detail::GetInvokablePart ( ) -> decltype (GetInvokablePartImpl<F> (0, Typelist<Args...>

Definition at line 68 of file dropargs.h.

Referenced by LeechCraft::Util::detail::Dropper< F >::operator()().

+ Here is the caller graph for this function:

◆ GetInvokablePartImpl() [1/3]

template<typename F , template< typename... > class List, typename... Args>
constexpr List<Args...> LeechCraft::Util::detail::GetInvokablePartImpl ( int  ,
List< Args... >  ,
typename std::result_of< F(Args...)>::type *  = nullptr 
)

Definition at line 41 of file dropargs.h.

◆ GetInvokablePartImpl() [2/3]

template<typename F , template< typename... > class List>
constexpr Typelist LeechCraft::Util::detail::GetInvokablePartImpl ( float  ,
List<>   
)

Definition at line 47 of file dropargs.h.

◆ GetInvokablePartImpl() [3/3]

template<typename F , template< typename... > class List, typename... Args>
constexpr auto LeechCraft::Util::detail::GetInvokablePartImpl ( float  ,
List< Args... >  list 
) -> typename InvokableType<F, decltype (Reverse (Tail (Reverse (list))))>::RetType_t

Definition at line 56 of file dropargs.h.

◆ IsCompatibleMonad()

template<typename T1 , typename T2 >
constexpr bool LeechCraft::Util::detail::IsCompatibleMonad ( )

Definition at line 76 of file monad.h.

References IsCompatibleMonadImpl().

Referenced by LeechCraft::Util::Bind().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ IsCompatibleMonadImpl() [1/2]

template<template< typename... > class Monad, typename... Args1, typename... Args2>
constexpr bool LeechCraft::Util::detail::IsCompatibleMonadImpl ( const Monad< Args1... > *  ,
const Monad< Args2... > *  ,
int   
)

Definition at line 55 of file monad.h.

Referenced by IsCompatibleMonad().

+ Here is the caller graph for this function:

◆ IsCompatibleMonadImpl() [2/2]

template<typename T1 , typename T2 >
constexpr bool LeechCraft::Util::detail::IsCompatibleMonadImpl ( const T1 *  ,
const T2 *  ,
  ... 
)

Definition at line 64 of file monad.h.

◆ IsFunctorImpl() [1/2]

template<typename T >
constexpr bool LeechCraft::Util::detail::IsFunctorImpl ( int  ,
typename InstanceFunctor< T >::UndefinedTag *  = nullptr 
)

Definition at line 92 of file functor.h.

◆ IsFunctorImpl() [2/2]

template<typename T >
constexpr bool LeechCraft::Util::detail::IsFunctorImpl ( float  )

Definition at line 98 of file functor.h.

◆ IsMonadPlusImpl() [1/2]

template<typename T >
constexpr bool LeechCraft::Util::detail::IsMonadPlusImpl ( int  ,
typename InstanceMonadPlus< T >::UndefinedTag *  = nullptr 
)

Definition at line 48 of file monadplus.h.

◆ IsMonadPlusImpl() [2/2]

template<typename T >
constexpr bool LeechCraft::Util::detail::IsMonadPlusImpl ( float  )

Definition at line 54 of file monadplus.h.

◆ IsSimpleContainer()

template<typename C >
constexpr bool LeechCraft::Util::detail::IsSimpleContainer ( )

Definition at line 116 of file prelude.h.

◆ Length()

template<template< typename... > class List, typename... Args>
constexpr size_t LeechCraft::Util::detail::Length ( List< Args... >  )

Definition at line 74 of file dropargs.h.

Referenced by LeechCraft::Util::detail::Dropper< F >::operator()().

+ Here is the caller graph for this function:

◆ MapImpl()

template<template< typename... > class Fallback, bool ForceFallback, typename Container , typename F >
auto LeechCraft::Util::detail::MapImpl ( Container &&  c,
f 
)

Definition at line 143 of file prelude.h.

References Append(), and LeechCraft::Util::oral::sph::f.

+ Here is the call graph for this function:

◆ NewTypeHash()

constexpr size_t LeechCraft::Util::detail::NewTypeHash ( const char *  str)

Definition at line 68 of file newtype.h.

◆ TypeGetter() [1/3]

template<typename R , typename... Args>
std::tuple<VoidSafe<R>, Args...> LeechCraft::Util::detail::TypeGetter ( R(*)(Args...)  )

◆ TypeGetter() [2/3]

template<typename F >
auto LeechCraft::Util::detail::TypeGetter ( F &&  f) -> decltype(TypeGetter(+f))

◆ TypeGetter() [3/3]

template<typename C , typename R , typename... Args>
std::tuple< VoidSafe< R >, Args... > LeechCraft::Util::detail::TypeGetter ( R(C::*)(Args...)  const)

Variable Documentation

◆ AllConsts

template<typename... Args>
constexpr bool LeechCraft::Util::detail::AllConsts = AllOf<std::is_const, Args...>

Definition at line 73 of file visitor.h.

◆ AllConstsWithoutRefs

template<typename... Args>
constexpr bool LeechCraft::Util::detail::AllConstsWithoutRefs = AllOf<std::is_const, std::remove_reference_t<Args>...>

Definition at line 76 of file visitor.h.

◆ AllLValueRefs

template<typename... Args>
constexpr bool LeechCraft::Util::detail::AllLValueRefs = AllOf<std::is_lvalue_reference, Args...>

Definition at line 67 of file visitor.h.

◆ AllRValueRefs

template<typename... Args>
constexpr bool LeechCraft::Util::detail::AllRValueRefs = AllOf<std::is_rvalue_reference, Args...>

Definition at line 70 of file visitor.h.

◆ IsNotBrokenSFINAE_v

template<typename T >
constexpr bool LeechCraft::Util::detail::IsNotBrokenSFINAE_v = IsNotBrokenSFINAE<T> {}

Definition at line 140 of file prelude.h.

◆ TypeGetter

template<typename C >
decltype(TypeGetter (&C::operator ())) LeechCraft::Util::detail::TypeGetter(const C &c)

Definition at line 63 of file typegetter.h.