std::tuple<Args...> processArguments(Args... args) { if(!_precond(args...)) { throw std::logic_error{_precondMsg}; } else { return std::make_tuple(args...); } }
void apply(const K* const in, K* const out, const unsigned short& mu = 1, K* = nullptr, const unsigned short& = 0) const { _precond(reinterpret_cast<const HPDDM::pod_type<K>*>(in), reinterpret_cast<HPDDM::pod_type<K>*>(out), _n, mu); }
void apply(const K* const in, K* const out, const unsigned short& mu = 1, K* = nullptr, const unsigned short& = 0) const { int m = mu; _precond(&(HPDDM::EmptyOperator<K>::_n), in, out, &m); }
void apply(const cpp_type<K>* const in, cpp_type<K>* const out, const unsigned short& mu = 1, cpp_type<K>* = nullptr, const unsigned short& = 0) const { _precond(_A, reinterpret_cast<const K*>(in), reinterpret_cast<K*>(out), mu); }