--- /dev/null
+#include <cpPlugins/Pipeline/Port.h>
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::Port::
+Port( bool required )
+ : m_Required( required )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::Port::
+~Port( )
+{
+}
+
+// -------------------------------------------------------------------------
+bool cpPlugins::Pipeline::Port::
+IsRequired( ) const
+{
+ return( this->m_Required );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::Port::
+Clear( )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::SingleDataPort::
+SingleDataPort( bool required )
+ : Superclass( required )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::SingleDataPort::
+~SingleDataPort( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::SingleDataPort::
+Add( cpPlugins::Pipeline::DataObject* o )
+{
+ if( this->m_Sample.IsNull( ) )
+ throw std::logic_error(
+ "cpPlugins::SingleDataPort: Port not yet configured"
+ );
+ if( o != NULL )
+ {
+ if( this->m_Sample->IsCompatible( o ) )
+ this->m_Data = o;
+ else
+ throw std::logic_error(
+ "cpPlugins::SingleDataPort: incompatible types \"" +
+ std::string( typeid( *o ).name( ) ) + std::string( "\" and \"" ) +
+ std::string( typeid( *( this->m_Sample.GetPointer( ) ) ).name( ) ) +
+ std::string( "\"" )
+ );
+ }
+ else
+ this->m_Data = NULL;
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::DataObject* cpPlugins::Pipeline::SingleDataPort::
+Get( unsigned int i )
+{
+ return( this->m_Data.GetPointer( ) );
+}
+
+// -------------------------------------------------------------------------
+const cpPlugins::Pipeline::DataObject* cpPlugins::Pipeline::SingleDataPort::
+Get( unsigned int i ) const
+{
+ return( this->m_Data.GetPointer( ) );
+}
+
+// -------------------------------------------------------------------------
+unsigned int cpPlugins::Pipeline::SingleDataPort::
+Size( ) const
+{
+ return( 1 );
+}
+
+// -------------------------------------------------------------------------
+bool cpPlugins::Pipeline::SingleDataPort::
+IsValid( ) const
+{
+ return( this->m_Data.IsNotNull( ) );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::SingleDataPort::
+Clear( )
+{
+ this->m_Data = NULL;
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::OutputPort::
+OutputPort( bool required )
+ : Superclass( required )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::OutputPort::
+~OutputPort( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::OutputPort::
+Set( DataObject* o )
+{
+ this->m_Sample = o;
+ this->m_Data = o;
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::InputPort::
+InputPort( bool required )
+ : Superclass( required )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::InputPort::
+~InputPort( )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::MultipleInputsPort::
+MultipleInputsPort( bool required )
+ : Superclass( required )
+{
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::MultipleInputsPort::
+~MultipleInputsPort( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::MultipleInputsPort::
+Add( cpPlugins::Pipeline::DataObject* o )
+{
+ if( this->m_Sample.IsNull( ) )
+ throw std::logic_error(
+ "cpPlugins::SingleDataPort: Port not yet configured"
+ );
+ if( o != NULL )
+ {
+ if( this->m_Sample->IsCompatible( o ) )
+ {
+ this->m_Data.push_back( o );
+ }
+ else
+ throw std::logic_error(
+ "cpPlugins::SingleDataPort: incompatible types \"" +
+ std::string( typeid( *o ).name( ) ) + std::string( "\" and \"" ) +
+ std::string( typeid( *( this->m_Sample.GetPointer( ) ) ).name( ) ) +
+ std::string( "\"" )
+ );
+
+ } // fi
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::DataObject*
+cpPlugins::Pipeline::MultipleInputsPort::
+Get( unsigned int i )
+{
+ if( i < this->m_Data.size( ) )
+ return( this->m_Data[ i ].GetPointer( ) );
+ else
+ return( NULL );
+}
+
+// -------------------------------------------------------------------------
+const cpPlugins::Pipeline::DataObject*
+cpPlugins::Pipeline::MultipleInputsPort::
+Get( unsigned int i ) const
+{
+ if( i < this->m_Data.size( ) )
+ return( this->m_Data[ i ].GetPointer( ) );
+ else
+ return( NULL );
+}
+
+// -------------------------------------------------------------------------
+unsigned int cpPlugins::Pipeline::MultipleInputsPort::
+Size( ) const
+{
+ return( this->m_Data.size( ) );
+}
+
+// -------------------------------------------------------------------------
+bool cpPlugins::Pipeline::MultipleInputsPort::
+IsValid( ) const
+{
+ if( this->m_Data.size( ) > 0 )
+ return( this->m_Data[ 0 ].IsNotNull( ) );
+ else
+ return( false );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::MultipleInputsPort::
+Clear( )
+{
+ this->m_Data.clear( );
+}
+
+// -------------------------------------------------------------------------
+void cpPlugins::Pipeline::MultipleInputsPort::
+Delete( unsigned int id )
+{
+ if( id < this->m_Data.size( ) )
+ {
+ this->m_Data[ id ] = NULL;
+ this->m_Data.erase( this->m_Data.begin( ) + id );
+
+ } // fi
+}
+
+// eof - $RCSfile$