16template <
size_t NumberOfParams >
25 virtual std::shared_ptr < abstraction::Value >
run ( )
const = 0;
28 void attachInput (
const std::shared_ptr < abstraction::Value > & input,
size_t index )
override {
29 if ( index >= m_params.size ( ) )
30 throw std::invalid_argument (
"Parameter index " +
ext::to_string ( index ) +
" out of bounds.");
32 m_params [ index ] = input;
35 void detachInput (
size_t index )
override {
36 if ( index >= m_params.size ( ) )
37 throw std::invalid_argument (
"Parameter index " +
ext::to_string ( index ) +
" out of bounds.");
39 m_params [ index ] =
nullptr;
44 if constexpr ( NumberOfParams != 0 )
45 for (
size_t i = 0;
i < NumberOfParams; ++
i ) {
46 m_params [
i ] =
nullptr;
51 return std::all_of ( m_params.
begin ( ), m_params.
end ( ), [ ] (
const std::shared_ptr < abstraction::Value > & param ) { return static_cast < bool > ( param ); } );
54 std::shared_ptr < abstraction::Value >
eval ( )
override {
62 return NumberOfParams;
76template <
class ... ParamTypes >
80 return abstraction::paramType < ParamTypes ... > ( index );
Definition: NaryOperationAbstraction.hpp:17
bool inputsAttached() const override
Definition: NaryOperationAbstraction.hpp:50
virtual std::shared_ptr< abstraction::Value > run() const =0
NaryOperationAbstractionImpl()
Definition: NaryOperationAbstraction.hpp:43
size_t numberOfParams() const override
Definition: NaryOperationAbstraction.hpp:61
std::shared_ptr< abstraction::Value > eval() override
Definition: NaryOperationAbstraction.hpp:54
const ext::array< std::shared_ptr< abstraction::Value >, NumberOfParams > & getParams() const
Definition: NaryOperationAbstraction.hpp:21
Definition: NaryOperationAbstraction.hpp:77
ext::type_index getParamTypeIndex(size_t index) const override
Definition: NaryOperationAbstraction.hpp:79
abstraction::TypeQualifiers::TypeQualifierSet getParamTypeQualifiers(size_t index) const override
Definition: NaryOperationAbstraction.hpp:83
Definition: OperationAbstraction.hpp:19
TypeQualifierSet
Definition: TypeQualifiers.hpp:15
Class extending the array class from the standard library. Original reason is to allow printing of th...
Definition: array.hpp:68
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: array.hpp:123
auto end() &
Inherited behavior of end for non-const instance.
Definition: array.hpp:153
Definition: typeindex.h:37
Definition: AlgorithmAbstraction.hpp:11
abstraction::TypeQualifiers::TypeQualifierSet paramTypeQualifiers(unsigned index)
Definition: AbstractionHelpers.hpp:45
int i
Definition: AllEpsilonClosure.h:118
std::string to_string(const T &value)
To string method designated for objects that can be casted to string.
Definition: string.hpp:131
all_of(T &&...) -> all_of< T... >