X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=lib%2FcpPlugins%2FInterface%2FParameters.hxx;h=e47b799c7616e2c85ea7148bb4eb4fe2956e22a4;hb=2361f4f97631e09d88d8a5510a369817dcaa19db;hp=ac30bc9648e8c4344cbbda8aefb2c960dd7a95d8;hpb=320afa917228a86723477e0b60a7cd6ce87e5fe9;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/Parameters.hxx b/lib/cpPlugins/Interface/Parameters.hxx index ac30bc9..e47b799 100644 --- a/lib/cpPlugins/Interface/Parameters.hxx +++ b/lib/cpPlugins/Interface/Parameters.hxx @@ -1,150 +1,100 @@ #ifndef __CPPLUGINS__INTERFACE__PARAMETERS__HXX__ #define __CPPLUGINS__INTERFACE__PARAMETERS__HXX__ +#include +#include #include // ------------------------------------------------------------------------- -template< class I > -void cpPlugins::Interface::Parameters:: -SetValueAsStringList( const std::string& name, const I& b, const I& e ) -{ - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) - return; - if( pIt->second.first != Self::StringList ) - return; - - std::stringstream ss; - for( I i = b; i != e; ++i ) - ss << *i << ":"; - pIt->second = ss.str( ); -} - -// ------------------------------------------------------------------------- -template< class I > -void cpPlugins::Interface::Parameters:: -SetValueAsIntList( const std::string& name, const I& b, const I& e ) -{ - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) - return; - if( pIt->second.first != Self::IntList ) - return; - - std::stringstream ss; - for( I i = b; i != e; ++i ) - ss << *i << ":"; - pIt->second = ss.str( ); -} - -// ------------------------------------------------------------------------- -template< class I > -void cpPlugins::Interface::Parameters:: -SetValueAsUintList( const std::string& name, const I& b, const I& e ) -{ - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) - return; - if( pIt->second.first != Self::UintList ) - return; - - std::stringstream ss; - for( I i = b; i != e; ++i ) - ss << *i << ":"; - pIt->second = ss.str( ); -} - -// ------------------------------------------------------------------------- -template< class I > -void cpPlugins::Interface::Parameters:: -SetValueAsRealList( const std::string& name, const I& b, const I& e ) -{ - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) - return; - if( pIt->second.first != Self::RealList ) - return; - - std::stringstream ss; - for( I i = b; i != e; ++i ) - ss << *i << ":"; - pIt->second = ss.str( ); -} - -// ------------------------------------------------------------------------- -template< class I > -void cpPlugins::Interface::Parameters:: -SetValueAsIndexList( const std::string& name, const I& b, const I& e ) -{ - // TODO -} - -// ------------------------------------------------------------------------- -template< class I > -void cpPlugins::Interface::Parameters:: -SetValueAsPointList( const std::string& name, const I& b, const I& e ) -{ - // TODO -} - -// ------------------------------------------------------------------------- -template< class I > -I cpPlugins::Interface::Parameters:: -GetValueAsIndex( const std::string& name ) const -{ - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) - return( I( ) ); - if( pIt->second.first != Self::Index ) - return( I( ) ); - - // TODO: - return( I( ) ); -} - -// ------------------------------------------------------------------------- -template< class P > -P cpPlugins::Interface::Parameters:: -GetValueAsPoint( const std::string& name ) const -{ - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) - return( P( ) ); - if( pIt->second.first != Self::Point ) - return( P( ) ); - - // TODO: - return( P( ) ); -} +#define cpPlugins_Interface_Parameters_SetIndexOrPointMacro( NAME, TYPE ) \ + template< class T > \ + T cpPlugins::Interface::Parameters:: \ + GetValueAs##NAME( const TString& name ) const \ + { \ + T val; \ + TParameters::const_iterator pIt = this->m_Parameters.find( name ); \ + if( pIt != this->m_Parameters.end( ) ) \ + { \ + if( pIt->second.first == Self::NAME ) \ + { \ + std::istringstream ss( pIt->second.second ); \ + std::string token; \ + unsigned int i = 0; \ + while( std::getline( ss, token, ',' ) ) \ + { \ + if( token != "" ) \ + val[ i++ ] = TYPE( std::atof( token.c_str( ) ) ); \ + } \ + } \ + } \ + return( val ); \ + } + +cpPlugins_Interface_Parameters_SetIndexOrPointMacro( Index, long ); +cpPlugins_Interface_Parameters_SetIndexOrPointMacro( Point, double ); // ------------------------------------------------------------------------- template< class I > void cpPlugins::Interface::Parameters:: -GetValueAsIndexList( std::vector< I >& lst, const std::string& name ) const +GetValueAsIndexList( std::vector< I >& lst, const TString& name ) const { lst.clear( ); - TParameters::iterator pIt = this->m_Parameters.find( name ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); if( pIt == this->m_Parameters.end( ) ) return; if( pIt->second.first != Self::IndexList ) return; - // TODO: + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, ':' ) ) + { + if( token != "" ) + { + std::istringstream ts( token ); + std::string text; + unsigned int i = 0; + I idx; + while( std::getline( ts, text, ',' ) ) + if( text != "" ) + idx[ i++ ] = std::atoi( text.c_str( ) ); + lst.push_back( idx ); + + } // fi + + } // elihw } // ------------------------------------------------------------------------- template< class P > void cpPlugins::Interface::Parameters:: -GetValueAsPointList( std::vector< P >& lst, const std::string& name ) const +GetValueAsPointList( std::vector< P >& lst, const TString& name ) const { lst.clear( ); - TParameters::iterator pIt = this->m_Parameters.find( name ); + TParameters::const_iterator pIt = this->m_Parameters.find( name ); if( pIt == this->m_Parameters.end( ) ) return; if( pIt->second.first != Self::PointList ) return; - // TODO: + std::istringstream ss( pIt->second.second ); + std::string token; + while( std::getline( ss, token, ':' ) ) + { + if( token != "" ) + { + std::istringstream ts( token ); + std::string text; + unsigned int i = 0; + P pnt; + while( std::getline( ts, text, ',' ) ) + if( text != "" ) + pnt[ i++ ] = std::atof( text.c_str( ) ); + lst.push_back( pnt ); + + } // fi + + } // elihw } #endif // __CPPLUGINS__INTERFACE__PARAMETERS__HXX__