19 std::shared_ptr < Value > cache;
20 std::shared_ptr < abstraction::OperationAbstraction > m_lifeReference;
23 explicit LazyValue (
const std::shared_ptr < abstraction::OperationAbstraction > & ref );
25 std::shared_ptr < abstraction::Value >
asValue (
bool move,
bool isTemporary )
override;
33 const std::shared_ptr < abstraction::OperationAbstraction > &
getLifeReference ( )
const;
48 std::transform ( abstractions.begin ( ), abstractions.end ( ), std::back_inserter ( m_abstractions ), [ ] (
const std::shared_ptr < abstraction::OperationAbstraction > &
abstraction ) { return std::make_shared < LazyValue > ( abstraction ); } );
52 m_abstractions [ targetId ]->getLifeReference ( )->attachInput ( m_abstractions [ sourceId ], paramPosition );
56 m_abstractions [ targetId ]->getLifeReference ( )->detachInput ( paramPosition );
60 return std::all_of ( m_abstractions.
begin ( ), m_abstractions.
end ( ), [ ] (
const std::shared_ptr < LazyValue > & operation ) { return operation->getLifeReference ( )->inputsAttached ( ); } );
65 return m_abstractions;
70template <
size_t NumberOfParams >
77 m_connections [ sourceId ].push_back (
ConnectionTarget { targetId, paramPosition } );
84 void attachInput (
const std::shared_ptr < abstraction::Value > & input,
size_t index )
override {
86 for (
const ConnectionTarget & target : m_connections [ index ] )
87 getAbstractions ( ) [ target.targetId ]->getLifeReference ( )->attachInput ( input, target.paramPosition );
89 this->detachInput ( index );
94 void detachInput (
size_t index )
override {
95 for (
const ConnectionTarget & target : m_connections [ index ] )
96 getAbstractions ( ) [ target.targetId ]->getLifeReference ( )->detachInput ( target.paramPosition );
100 std::shared_ptr < abstraction::Value >
eval ( )
override {
108 return NumberOfParams;
112 return getAbstractions ( ) [ m_connections.at ( index ) [ 0 ].targetId ]->getLifeReference ( )->getParamTypeIndex ( m_connections.at ( index ) [ 0 ].paramPosition );
116 return getAbstractions ( ) [ m_connections.at ( index ) [ 0 ].targetId ]->getLifeReference ( )->getParamTypeQualifiers ( m_connections.at ( index ) [ 0 ].paramPosition );
120 return getAbstractions ( ) [ m_resultId ]->getLifeReference ( )->getReturnTypeIndex ( );
124 return getAbstractions ( ) [ m_resultId ]->getLifeReference ( )->getReturnTypeQualifiers ( );
128 return getAbstractions ( ) [ m_resultId ]->getLifeReference ( )->getProxyAbstraction ( );
Definition: OperationAbstraction.hpp:19
Definition: PackingAbstraction.hpp:18
abstraction::TypeQualifiers::TypeQualifierSet getTypeQualifiers() const override
Definition: PackingAbstraction.cpp:24
const std::shared_ptr< abstraction::OperationAbstraction > & getLifeReference() const
Definition: PackingAbstraction.cpp:34
bool isTemporary() const override
Definition: PackingAbstraction.cpp:38
std::shared_ptr< abstraction::Value > asValue(bool move, bool isTemporary) override
Definition: PackingAbstraction.cpp:16
ext::type_index getTypeIndex() const override
Definition: PackingAbstraction.cpp:20
LazyValue(const std::shared_ptr< abstraction::OperationAbstraction > &ref)
Definition: PackingAbstraction.cpp:13
std::shared_ptr< abstraction::Value > getProxyAbstraction() override
Definition: PackingAbstraction.cpp:28
Definition: PackingAbstraction.hpp:16
void setInnerConnection(size_t sourceId, size_t targetId, size_t paramPosition)
Definition: PackingAbstraction.hpp:51
PackingAbstractionImpl(const ext::vector< std::shared_ptr< abstraction::OperationAbstraction > > &abstractions)
Definition: PackingAbstraction.hpp:47
const ext::vector< std::shared_ptr< LazyValue > > & getAbstractions() const
Definition: PackingAbstraction.hpp:64
void clearInnerConnection(size_t targetId, size_t paramPosition)
Definition: PackingAbstraction.hpp:55
bool inputsAttached() const override
Definition: PackingAbstraction.hpp:59
Definition: PackingAbstraction.hpp:71
std::shared_ptr< abstraction::OperationAbstraction > getProxyAbstraction() override
Definition: PackingAbstraction.hpp:127
abstraction::TypeQualifiers::TypeQualifierSet getReturnTypeQualifiers() const override
Definition: PackingAbstraction.hpp:123
size_t numberOfParams() const override
Definition: PackingAbstraction.hpp:107
ext::type_index getParamTypeIndex(size_t index) const override
Definition: PackingAbstraction.hpp:111
void setOuterConnection(size_t sourceId, size_t targetId, size_t paramPosition)
Definition: PackingAbstraction.hpp:76
abstraction::TypeQualifiers::TypeQualifierSet getParamTypeQualifiers(size_t index) const override
Definition: PackingAbstraction.hpp:115
ext::type_index getReturnTypeIndex() const override
Definition: PackingAbstraction.hpp:119
PackingAbstraction(const ext::vector< std::shared_ptr< abstraction::OperationAbstraction > > &abstractions, size_t resultId)
Definition: PackingAbstraction.hpp:80
std::shared_ptr< abstraction::Value > eval() override
Definition: PackingAbstraction.hpp:100
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
Definition: typeindex.h:37
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: vector.hpp:125
auto end() &
Inherited behavior of end for non-const instance.
Definition: vector.hpp:155
Definition: AlgorithmAbstraction.hpp:11
ContainerType< ResType > transform(const ContainerType< InType, Ts ... > &in, Callback transform)
In container tranformation of all elements according to the tranform.
Definition: algorithm.hpp:150
all_of(T &&...) -> all_of< T... >
Definition: PackingAbstraction.hpp:38
size_t targetId
Definition: PackingAbstraction.hpp:39
size_t paramPosition
Definition: PackingAbstraction.hpp:40