Program Listing for File ImplSpec.hpp¶
↰ Return to documentation for file (include/uit/setup/ImplSpec.hpp)
#pragma once
#ifndef UIT_SETUP_IMPLSPEC_HPP_INCLUDE
#define UIT_SETUP_IMPLSPEC_HPP_INCLUDE
#include "defaults.hpp"
#include "ImplSelect.hpp"
namespace uit {
namespace internal {
template<
typename T_,
typename ImplSelect,
size_t N_,
size_t B_
>
class ImplSpecKernel {
using THIS_T = ImplSpecKernel<T_, ImplSelect, N_, B_>;
public:
using T = T_;
constexpr inline static size_t N{ N_ };
constexpr inline static size_t B{ B_ };
using IntraDuct = typename ImplSelect::template IntraDuct<THIS_T>;
using ThreadDuct = typename ImplSelect::template ThreadDuct<THIS_T>;
using ProcInletDuct = typename ImplSelect::template
ProcDuct<THIS_T>::InletImpl;
using ProcOutletDuct = typename ImplSelect::template
ProcDuct<THIS_T>::OutletImpl;
using ProcBackEnd = typename ImplSelect::template
ProcDuct<THIS_T>::BackEndImpl;
// TODO add static ToString
};
} // namespace internal
template<
typename T,
typename ImplSelect=uit::ImplSelect<>,
template<typename> typename SpoutWrapper=uit::DefaultSpoutWrapper,
size_t N=uit::DEFAULT_BUFFER,
size_t B=std::numeric_limits<size_t>::max(),
size_t SpoutCacheSize_=2
>
class ImplSpec
: public internal::ImplSpecKernel<
typename SpoutWrapper<T>::T,
ImplSelect, N, B
> {
using wrapper_t = SpoutWrapper<T>;
public:
using value_type = T;
template<typename Inlet>
using inlet_wrapper_t = typename wrapper_t::template inlet_wrapper_t<Inlet>;
template<typename Outlet>
using outlet_wrapper_t
= typename wrapper_t::template outlet_wrapper_t<Outlet>;
constexpr inline static size_t SpoutCacheSize{ SpoutCacheSize_ };
};
template<typename T>
struct MockSpec
: public ImplSpec<T, uit::MockSelect>
{};
} // namespace uit
#endif // #ifndef UIT_SETUP_IMPLSPEC_HPP_INCLUDE