ValueGenerator::ComputeState::~ComputeState() { if ( m_valueTransform->m_operator->takesSharedValue() ) { RC::ConstHandle<ValueProducer> sharedValueProducer = m_valueTransform->m_shared; sharedValueProducer->getValueDesc()->disposeData( &m_sharedData[0] ); } }
ValueGenerator::ComputeState::ComputeState( RC::ConstHandle<ValueGenerator> const &valueTransform ) : ValueProducer::ComputeState( valueTransform ) , m_valueTransform( valueTransform ) { if ( m_valueTransform->m_operator->takesSharedValue() ) { RC::ConstHandle<ValueProducer> sharedValueProducer = m_valueTransform->m_shared; m_sharedData.resize( sharedValueProducer->getValueDesc()->getAllocSize(), 0 ); sharedValueProducer->createComputeState()->produce( &m_sharedData[0] ); } }
ValueMap::ComputeState::ComputeState( RC::ConstHandle<ValueMap> const &valueMap ) : ValueProducer::ComputeState( valueMap ) , m_inputComputeState( valueMap->m_input->createComputeState() ) , m_inputDesc( valueMap->getValueDesc() ) , m_operator( valueMap->m_operator ) , m_shared( valueMap->m_shared ) { if ( m_operator->takesSharedValue() ) { m_sharedData.resize( m_shared->getValueDesc()->getAllocSize(), 0 ); m_shared->createComputeState()->produce( &m_sharedData[0] ); } }
ValueMap::ValueMap( RC::ConstHandle<ValueProducer> const &input, RC::ConstHandle<ValueIOOperator> const &operator_, RC::ConstHandle<ValueProducer> const &shared ) : m_input( input ) , m_operator( operator_ ) , m_shared( shared ) { RC::ConstHandle<RT::Desc> inputValueDesc = input->getValueDesc(); if ( !inputValueDesc ) throw Exception("input is invalid"); RC::ConstHandle<RT::Desc> operatorInputDesc = operator_->getInputDesc(); if ( !operatorInputDesc ) throw Exception("operator is invalid"); if ( !operatorInputDesc->isEquivalentTo( inputValueDesc ) ) throw Exception( "input value type (" + _(inputValueDesc->getUserName()) + ") is not equivalent to value map operator input type (" + _(operatorInputDesc->getUserName()) + ")" ); RC::ConstHandle<RT::Desc> operatorSharedDesc = operator_->getSharedDesc(); if ( operatorSharedDesc ) { RC::ConstHandle<RT::Desc> sharedValueDesc = shared->getValueDesc(); if ( !sharedValueDesc ) throw Exception( "operator requires a shared value but no shared value producer is provided" ); if ( !sharedValueDesc->isEquivalentTo( operatorSharedDesc ) ) throw Exception( "shared value type (" + _(sharedValueDesc->getUserName()) + ") is not equivalent to value map operator shared type (" + _(operatorSharedDesc->getUserName()) + ")" ); } }