20template <
size_t NumberOfParams >
22 std::shared_ptr < OperationAbstraction > m_abstraction;
41 for (
size_t index = 0; index < NumberOfParams; ++ index )
42 this->m_abstraction->attachInput ( m_params [ index ], index );
47 if constexpr ( NumberOfParams != 0 )
48 for (
size_t i = 0;
i < NumberOfParams; ++
i ) {
49 m_params [
i ] =
nullptr;
54 void attachInput (
const std::shared_ptr < abstraction::Value > & input,
size_t index )
override {
55 if ( index >= m_params.size ( ) )
56 throw std::invalid_argument (
"Parameter index " +
ext::to_string ( index ) +
" out of bounds.");
58 m_params [ index ] = input;
61 void detachInput (
size_t index )
override {
62 if ( index >= m_params.size ( ) )
63 throw std::invalid_argument (
"Parameter index " +
ext::to_string ( index ) +
" out of bounds.");
65 m_params [ index ] =
nullptr;
70 return std::all_of ( m_params.
begin ( ), m_params.
end ( ), [ ] (
const std::shared_ptr < abstraction::Value > & param ) { return static_cast < bool > ( param ); } );
73 std::shared_ptr < abstraction::Value >
eval ( )
override {
85 return NumberOfParams;
89 if ( this->m_abstraction )
90 return this->m_abstraction->getReturnTypeIndex ( );
92 throw std::domain_error (
"ReturnTypeIndex not available before evaluation." );
96 if ( this->m_abstraction )
97 return this->m_abstraction->getReturnTypeQualifiers ( );
99 throw std::domain_error (
"ReturnTypeQualifiers not available before evaluation." );
103 if ( this->m_abstraction )
104 return this->m_abstraction->getProxyAbstraction ( );
106 throw std::domain_error (
"Proxy abstraction not available before evaluation." );
119template <
class ... ParamTypes >
121 std::function < std::shared_ptr < abstraction::OperationAbstraction > ( ParamTypes ... ) > m_WrapperFinder;
124 explicit WrapperAbstraction ( std::function < std::shared_ptr < abstraction::OperationAbstraction > ( ParamTypes ... ) > wrapperFinder ) : m_WrapperFinder (
std::move ( wrapperFinder ) ) {
128 return abstraction::apply < ParamTypes ... > ( m_WrapperFinder, this->getParams ( ) );
132 return abstraction::paramType < ParamTypes ... > ( index );
Definition: OperationAbstraction.hpp:19
TypeQualifierSet
Definition: TypeQualifiers.hpp:15
Definition: WrapperAbstraction.hpp:17
Definition: WrapperAbstraction.hpp:21
bool inputsAttached() const override
Definition: WrapperAbstraction.hpp:69
const std::shared_ptr< OperationAbstraction > & getAbstraction() const
Definition: WrapperAbstraction.hpp:36
ext::array< std::shared_ptr< abstraction::Value >, NumberOfParams > & getParams()
Definition: WrapperAbstraction.hpp:26
std::shared_ptr< OperationAbstraction > & getAbstraction()
Definition: WrapperAbstraction.hpp:32
std::shared_ptr< abstraction::OperationAbstraction > getProxyAbstraction() override
Definition: WrapperAbstraction.hpp:102
WrapperAbstractionImpl()
Definition: WrapperAbstraction.hpp:46
size_t numberOfParams() const override
Definition: WrapperAbstraction.hpp:84
ext::type_index getReturnTypeIndex() const override
Definition: WrapperAbstraction.hpp:88
abstraction::TypeQualifiers::TypeQualifierSet getReturnTypeQualifiers() const override
Definition: WrapperAbstraction.hpp:95
void attachInputsToAbstraction()
Definition: WrapperAbstraction.hpp:40
virtual std::shared_ptr< abstraction::OperationAbstraction > evalAbstractionFunction()=0
std::shared_ptr< abstraction::Value > eval() override
Definition: WrapperAbstraction.hpp:73
Definition: WrapperAbstraction.hpp:120
std::shared_ptr< abstraction::OperationAbstraction > evalAbstractionFunction() override
Definition: WrapperAbstraction.hpp:127
abstraction::TypeQualifiers::TypeQualifierSet getParamTypeQualifiers(size_t index) const override
Definition: WrapperAbstraction.hpp:135
ext::type_index getParamTypeIndex(size_t index) const override
Definition: WrapperAbstraction.hpp:131
WrapperAbstraction(std::function< std::shared_ptr< abstraction::OperationAbstraction >(ParamTypes ...) > wrapperFinder)
Definition: WrapperAbstraction.hpp:124
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
constexpr decltype(auto) apply(F &&f, Tuple &&t)
Definition: AbstractionHelpers.hpp:27
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... >
Definition: FordFulkerson.hpp:16