My Project
Public Member Functions | Protected Types | Static Protected Member Functions | Protected Attributes | List of all members
mlir::detail::TypeSwitchBase< DerivedT, T > Class Template Reference

#include <TypeSwitch.h>

Collaboration diagram for mlir::detail::TypeSwitchBase< DerivedT, T >:
Collaboration graph
[legend]

Public Member Functions

 TypeSwitchBase (const T &value)
 
 TypeSwitchBase (TypeSwitchBase &&other)
 
 ~TypeSwitchBase ()=default
 
 TypeSwitchBase (const TypeSwitchBase &)=delete
 TypeSwitchBase is not copyable. More...
 
void operator= (const TypeSwitchBase &)=delete
 
void operator= (TypeSwitchBase &&other)=delete
 
template<typename CaseT , typename CaseT2 , typename... CaseTs, typename CallableT >
DerivedT & Case (CallableT &&caseFn)
 Invoke a case on the derived class with multiple case types. More...
 
template<typename CallableT >
DerivedT & Case (CallableT &&caseFn)
 

Protected Types

template<typename ValueT , typename CastT >
using has_dyn_cast_t = decltype(std::declval< ValueT & >().template dyn_cast< CastT >())
 

Static Protected Member Functions

template<typename CastT , typename ValueT >
static auto castValue (ValueT value, typename std::enable_if_t< is_detected< has_dyn_cast_t, ValueT, CastT >::value > *=nullptr)
 
template<typename CastT , typename ValueT >
static auto castValue (ValueT value, typename std::enable_if_t< !is_detected< has_dyn_cast_t, ValueT, CastT >::value > *=nullptr)
 

Protected Attributes

const T value
 The root value we are switching on. More...
 

Member Typedef Documentation

◆ has_dyn_cast_t

template<typename DerivedT, typename T>
template<typename ValueT , typename CastT >
using mlir::detail::TypeSwitchBase< DerivedT, T >::has_dyn_cast_t = decltype(std::declval<ValueT &>().template dyn_cast<CastT>())
protected

Trait to check whether ValueT provides a 'dyn_cast' method with type CastT.

Constructor & Destructor Documentation

◆ TypeSwitchBase() [1/3]

template<typename DerivedT, typename T>
mlir::detail::TypeSwitchBase< DerivedT, T >::TypeSwitchBase ( const T &  value)
inline

◆ TypeSwitchBase() [2/3]

template<typename DerivedT, typename T>
mlir::detail::TypeSwitchBase< DerivedT, T >::TypeSwitchBase ( TypeSwitchBase< DerivedT, T > &&  other)
inline

◆ ~TypeSwitchBase()

template<typename DerivedT, typename T>
mlir::detail::TypeSwitchBase< DerivedT, T >::~TypeSwitchBase ( )
default

◆ TypeSwitchBase() [3/3]

template<typename DerivedT, typename T>
mlir::detail::TypeSwitchBase< DerivedT, T >::TypeSwitchBase ( const TypeSwitchBase< DerivedT, T > &  )
delete

TypeSwitchBase is not copyable.

Member Function Documentation

◆ Case() [1/2]

template<typename DerivedT, typename T>
template<typename CaseT , typename CaseT2 , typename... CaseTs, typename CallableT >
DerivedT& mlir::detail::TypeSwitchBase< DerivedT, T >::Case ( CallableT &&  caseFn)
inline

Invoke a case on the derived class with multiple case types.

◆ Case() [2/2]

template<typename DerivedT, typename T>
template<typename CallableT >
DerivedT& mlir::detail::TypeSwitchBase< DerivedT, T >::Case ( CallableT &&  caseFn)
inline

Invoke a case on the derived class, inferring the type of the Case from the first input of the given callable. Note: This inference rules for this overload are very simple: strip pointers and references.

◆ castValue() [1/2]

template<typename DerivedT, typename T>
template<typename CastT , typename ValueT >
static auto mlir::detail::TypeSwitchBase< DerivedT, T >::castValue ( ValueT  value,
typename std::enable_if_t< is_detected< has_dyn_cast_t, ValueT, CastT >::value > *  = nullptr 
)
inlinestaticprotected

Attempt to dyn_cast the given value to CastT. This overload is selected if value already has a suitable dyn_cast method.

◆ castValue() [2/2]

template<typename DerivedT, typename T>
template<typename CastT , typename ValueT >
static auto mlir::detail::TypeSwitchBase< DerivedT, T >::castValue ( ValueT  value,
typename std::enable_if_t< !is_detected< has_dyn_cast_t, ValueT, CastT >::value > *  = nullptr 
)
inlinestaticprotected

Attempt to dyn_cast the given value to CastT. This overload is selected if llvm::dyn_cast should be used.

◆ operator=() [1/2]

template<typename DerivedT, typename T>
void mlir::detail::TypeSwitchBase< DerivedT, T >::operator= ( const TypeSwitchBase< DerivedT, T > &  )
delete

◆ operator=() [2/2]

template<typename DerivedT, typename T>
void mlir::detail::TypeSwitchBase< DerivedT, T >::operator= ( TypeSwitchBase< DerivedT, T > &&  other)
delete

Member Data Documentation

◆ value

template<typename DerivedT, typename T>
const T mlir::detail::TypeSwitchBase< DerivedT, T >::value
protected

The root value we are switching on.


The documentation for this class was generated from the following file: