X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FParameters.cxx;h=603aca9d421f69b15991286a37156b02ea9f4450;hb=c820e7665125bc5ccda8580a0511f2d8fce3ede8;hp=c51cde6cb51f1a7136bbcdcd1a1078d801305386;hpb=e561a2fa4dcaee2c544e58385e1ff7d56ba8b051;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/Parameters.cxx b/lib/cpPlugins/Interface/Parameters.cxx index c51cde6..603aca9 100644 --- a/lib/cpPlugins/Interface/Parameters.cxx +++ b/lib/cpPlugins/Interface/Parameters.cxx @@ -19,6 +19,7 @@ } cpPlugins_Interface_Parameters_SetMacro( String ); +cpPlugins_Interface_Parameters_SetMacro( Bool ); cpPlugins_Interface_Parameters_SetMacro( Int ); cpPlugins_Interface_Parameters_SetMacro( Uint ); cpPlugins_Interface_Parameters_SetMacro( Real ); @@ -42,14 +43,80 @@ cpPlugins_Interface_Parameters_SetMacro( Real ); pIt->second.second = ss.str( ); \ } -cpPlugins_Interface_Parameters_SetArrayMacro( Index, long ); +cpPlugins_Interface_Parameters_SetArrayMacro( Index, int ); cpPlugins_Interface_Parameters_SetArrayMacro( Point, double ); +// ------------------------------------------------------------------------- +#define cpPlugins_Interface_Parameters_SetListMacro( TYPE ) \ + void cpPlugins::Interface::Parameters:: \ + AddValueTo##TYPE##List( const TString& name, const T##TYPE& v ) \ + { \ + TParameters::iterator pIt = this->m_Parameters.find( name ); \ + if( pIt == this->m_Parameters.end( ) ) \ + return; \ + if( pIt->second.first != Self::TYPE##List ) \ + return; \ + std::stringstream ss; \ + ss << pIt->second.second << v << "#"; \ + pIt->second.second = ss.str( ); \ + } + +cpPlugins_Interface_Parameters_SetListMacro( String ); +cpPlugins_Interface_Parameters_SetListMacro( Bool ); +cpPlugins_Interface_Parameters_SetListMacro( Int ); +cpPlugins_Interface_Parameters_SetListMacro( Uint ); +cpPlugins_Interface_Parameters_SetListMacro( Real ); + +// ------------------------------------------------------------------------- +#define cpPlugins_Interface_Parameters_SetArrayListMacro( TYPE, ATYPE ) \ + void cpPlugins::Interface::Parameters:: \ + AddValueTo##TYPE##List( const TString& name, const TUint& n, ... ) \ + { \ + TParameters::iterator pIt = this->m_Parameters.find( name ); \ + if( pIt == this->m_Parameters.end( ) ) \ + return; \ + if( pIt->second.first != Self::TYPE##List ) \ + return; \ + va_list v_lst; \ + va_start( v_lst, n ); \ + std::stringstream ss; \ + ss << pIt->second.second; \ + for( TUint i = 0; i < n; ++i ) \ + ss << va_arg( v_lst, ATYPE ) << ","; \ + va_end( v_lst ); \ + ss << "#"; \ + pIt->second.second = ss.str( ); \ + } + +cpPlugins_Interface_Parameters_SetArrayListMacro( Index, int ); +cpPlugins_Interface_Parameters_SetArrayListMacro( Point, double ); + +// ------------------------------------------------------------------------- +#define cpPlugins_Interface_Parameters_ClearListMacro( TYPE ) \ + void cpPlugins::Interface::Parameters:: \ + Clear##TYPE##List( const TString& name ) \ + { \ + TParameters::iterator pIt = this->m_Parameters.find( name ); \ + if( pIt == this->m_Parameters.end( ) ) \ + return; \ + if( pIt->second.first != Self::TYPE##List ) \ + return; \ + pIt->second.second = ""; \ + } + +cpPlugins_Interface_Parameters_ClearListMacro( String ); +cpPlugins_Interface_Parameters_ClearListMacro( Bool ); +cpPlugins_Interface_Parameters_ClearListMacro( Int ); +cpPlugins_Interface_Parameters_ClearListMacro( Uint ); +cpPlugins_Interface_Parameters_ClearListMacro( Real ); +cpPlugins_Interface_Parameters_ClearListMacro( Index ); +cpPlugins_Interface_Parameters_ClearListMacro( Point ); + // ------------------------------------------------------------------------- cpPlugins::Interface::Parameters:: Parameters( ) { - this->m_Parameters.clear( ); + this->Clear( ); } // ------------------------------------------------------------------------- @@ -63,7 +130,7 @@ Parameters( const Self& other ) cpPlugins::Interface::Parameters:: ~Parameters( ) { - this->m_Parameters.clear( ); + this->Clear( ); } // ------------------------------------------------------------------------- @@ -75,6 +142,13 @@ operator=( const Self& other ) return( *this ); } +// ------------------------------------------------------------------------- +void cpPlugins::Interface::Parameters:: +Clear( ) +{ + this->m_Parameters.clear( ); +} + // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: Configure( const Self::Type& type, const TString& name ) @@ -105,6 +179,18 @@ GetParameterType( const TString& name ) const return( pIt->second.first ); } +// ------------------------------------------------------------------------- +const cpPlugins::Interface::Parameters:: +TString& cpPlugins::Interface::Parameters:: +GetRawValue( const TString& name ) const +{ + static const TString null_str = ""; + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return( null_str ); + return( pIt->second.second ); +} + // ------------------------------------------------------------------------- const cpPlugins::Interface::Parameters:: TString& cpPlugins::Interface::Parameters:: @@ -120,6 +206,19 @@ GetValueAsString( const TString& name ) const return( pIt->second.second ); } +// ------------------------------------------------------------------------- +cpPlugins::Interface::Parameters:: +TBool cpPlugins::Interface::Parameters:: +GetValueAsBool( const TString& name ) const +{ + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return( TBool( false ) ); + if( pIt->second.first != Self::Bool ) + return( TBool( false ) ); + return( TBool( std::atoi( pIt->second.second.c_str( ) ) == 1 ) ); +} + // ------------------------------------------------------------------------- cpPlugins::Interface::Parameters:: TInt cpPlugins::Interface::Parameters:: @@ -165,24 +264,90 @@ GetValueAsStringList( std::vector< TString >& lst, const TString& name ) const { + lst.clear( ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return; + if( pIt->second.first != Self::StringList ) + return; + + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, '#' ) ) + if( token != "" ) + lst.push_back( token ); +} + +// ------------------------------------------------------------------------- +void cpPlugins::Interface::Parameters:: +GetValueAsBoolList( std::vector< TBool >& lst, const TString& name ) const +{ + lst.clear( ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return; + if( pIt->second.first != Self::BoolList ) + return; + + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, '#' ) ) + if( token != "" ) + lst.push_back( TBool( std::atoi( token.c_str( ) ) == 1 ) ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: GetValueAsIntList( std::vector< TInt >& lst, const TString& name ) const { + lst.clear( ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return; + if( pIt->second.first != Self::IntList ) + return; + + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, '#' ) ) + if( token != "" ) + lst.push_back( TInt( std::atoi( token.c_str( ) ) ) ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: GetValueAsUintList( std::vector< TUint >& lst, const TString& name ) const { + lst.clear( ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return; + if( pIt->second.first != Self::UintList ) + return; + + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, '#' ) ) + if( token != "" ) + lst.push_back( TUint( std::atoi( token.c_str( ) ) ) ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Parameters:: GetValueAsRealList( std::vector< TReal >& lst, const TString& name ) const { + lst.clear( ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); + if( pIt == this->m_Parameters.end( ) ) + return; + if( pIt->second.first != Self::RealList ) + return; + + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, '#' ) ) + if( token != "" ) + lst.push_back( TReal( std::atof( token.c_str( ) ) ) ); } // eof - $RCSfile$