// ========================================================================= // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) // ========================================================================= #include // ------------------------------------------------------------------------- void cpPlugins::Filter:: SetFunctor( const std::string& name, cpPlugins::Functor* functor ) { TFunctors::iterator i = this->m_Functors.find( name ); if( i != this->m_Functors.end( ) ) { if( !( i->second.Set( functor ) ) ) cpPluginsErrorMacro( this, << "Functor \"" << name << "\" does not match to input data." ); } else cpPluginsErrorMacro( this, << "Functor \"" << name << "\" does not belong to this filter." ); } // ------------------------------------------------------------------------- cpPlugins::DataObject* cpPlugins::Filter:: GetOutput( const std::string& name ) { TOutputs::iterator i = this->m_Outputs.find( name ); if( i != this->m_Outputs.end( ) ) return( i->second.Get( ) ); else cpPluginsErrorMacro( this, << "Output \"" << name << "\" does not belong to this filter." ); } // ------------------------------------------------------------------------- const cpPlugins::DataObject* cpPlugins::Filter:: GetOutput( const std::string& name ) const { TOutputs::const_iterator i = this->m_Outputs.find( name ); if( i != this->m_Outputs.end( ) ) return( i->second.Get( ) ); else cpPluginsErrorMacro( this, << "Output \"" << name << "\" does not belong to this filter." ); } // ------------------------------------------------------------------------- bool cpPlugins::Filter:: HasOutput( const std::string& name ) const { TOutputs::const_iterator i = this->m_Outputs.find( name ); return( i != this->m_Outputs.end( ) ); } // ------------------------------------------------------------------------- cpPlugins::Functor* cpPlugins::Filter:: GetFunctor( const std::string& name ) { TFunctors::iterator i = this->m_Functors.find( name ); if( i != this->m_Functors.end( ) ) return( i->second.Get( ) ); else cpPluginsErrorMacro( this, << "Functor \"" << name << "\" does not belong to this filter." ); } // ------------------------------------------------------------------------- const cpPlugins::Functor* cpPlugins::Filter:: GetFunctor( const std::string& name ) const { TFunctors::const_iterator i = this->m_Functors.find( name ); if( i != this->m_Functors.end( ) ) return( i->second.Get( ) ); else cpPluginsErrorMacro( this, << "Functor \"" << name << "\" does not belong to this filter." ); } // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::Filter:: GetOutputsNames( ) const { std::set< std::string > n; TOutputs::const_iterator i = this->m_Outputs.begin( ); for( ; i != this->m_Outputs.end( ); ++i ) n.insert( i->first ); return( n ); } // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::Filter:: GetFunctorsNames( ) const { std::set< std::string > n; TFunctors::const_iterator i = this->m_Functors.begin( ); for( ; i != this->m_Functors.end( ); ++i ) n.insert( i->first ); return( n ); } // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::Filter:: GetAllInputsNames( ) const { std::set< std::string > r = this->Superclass::GetAllInputsNames( ); std::set< std::string > iFunctors = this->GetFunctorsNames( ); for( const std::string& s: iFunctors ) r.insert( s ); return( r ); } // ------------------------------------------------------------------------- std::set< std::string > cpPlugins::Filter:: GetAllOutputsNames( ) const { std::set< std::string > r = this->Superclass::GetAllOutputsNames( ); std::set< std::string > oNames = this->GetOutputsNames( ); for( const std::string& s: oNames ) r.insert( s ); return( r ); } // ------------------------------------------------------------------------- cpPlugins::Filter:: Filter( ) : Superclass( ) { } // ------------------------------------------------------------------------- cpPlugins::Filter:: ~Filter( ) { } // ------------------------------------------------------------------------- bool cpPlugins::Filter:: _BeforeUpdate( ) { bool is_updated = this->Superclass::_BeforeUpdate( ); for( TFunctors::value_type& fIt: this->m_Functors ) { cpPlugins::Functor* f = fIt.second.Get( )->Cast< cpPlugins::Functor >( ); if( f != NULL ) { if( !( f->IsUpdated( ) ) ) { f->Update( ); is_updated = false; } // end if } // end if } // end for return( is_updated ); } // eof - $RCSfile$