#include <cstdlib>
#include <sstream>
+// -------------------------------------------------------------------------
+#define cpPlugins_Interface_Parameters_SetMacro( TYPE ) \
+ void cpPlugins::Interface::Parameters:: \
+ SetValueAs##TYPE( 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 ) \
+ return; \
+ std::stringstream ss; \
+ ss << v; \
+ pIt->second.second = ss.str( ); \
+ }
+
+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 );
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Interface_Parameters_SetArrayMacro( TYPE, ATYPE ) \
+ void cpPlugins::Interface::Parameters:: \
+ SetValueAs##TYPE( 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 ) \
+ return; \
+ va_list v_lst; \
+ va_start( v_lst, n ); \
+ std::stringstream ss; \
+ for( TUint i = 0; i < n; ++i ) \
+ ss << va_arg( v_lst, ATYPE ) << ","; \
+ va_end( v_lst ); \
+ pIt->second.second = ss.str( ); \
+ }
+
+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( );
}
// -------------------------------------------------------------------------
cpPlugins::Interface::Parameters::
~Parameters( )
{
- this->m_Parameters.clear( );
+ this->Clear( );
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void cpPlugins::Interface::Parameters::
-Configure( const Self::Type& type, const std::string& name )
-{
- this->m_Parameters[ name ] = TParameter( type, "" );
-}
-
-// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-SetValueAsString( const std::string& name, const std::string& v )
+Clear( )
{
- TParameters::iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return;
- if( pIt->second.first != Self::String )
- return;
-
- pIt->second.second = v;
+ this->m_Parameters.clear( );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Parameters::
-SetValueAsInt( const std::string& name, const TInt& v )
+Configure( const Self::Type& type, const TString& name )
{
- TParameters::iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return;
- if( pIt->second.first != Self::Int )
- return;
-
- std::stringstream ss;
- ss << v;
- pIt->second.second = ss.str( );
+ this->m_Parameters[ name ] = TParameter( type, "" );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-SetValueAsUint( const std::string& name, const TUint& v )
+std::vector< cpPlugins::Interface::Parameters::TString >
+cpPlugins::Interface::Parameters::
+GetParameters( ) const
{
- TParameters::iterator pIt = this->m_Parameters.find( name );
- if( pIt == this->m_Parameters.end( ) )
- return;
- if( pIt->second.first != Self::Uint )
- return;
-
- std::stringstream ss;
- ss << v;
- pIt->second.second = ss.str( );
+ std::vector< TString > parameters;
+ TParameters::const_iterator pIt = this->m_Parameters.begin( );
+ for( ; pIt != this->m_Parameters.end( ); ++pIt )
+ parameters.push_back( pIt->first );
+ return( parameters );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-SetValueAsReal( const std::string& name, const TReal& v )
+cpPlugins::Interface::Parameters::
+Type cpPlugins::Interface::Parameters::
+GetParameterType( const TString& name ) const
{
- 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::Real )
- return;
-
- std::stringstream ss;
- ss << v;
- pIt->second.second = ss.str( );
+ return( Self::NoType );
+ return( pIt->second.first );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-SetValueAsIndex( const std::string& name, const TUint& n, ... )
+const cpPlugins::Interface::Parameters::
+TString& cpPlugins::Interface::Parameters::
+GetRawValue( const TString& name ) const
{
- TParameters::iterator pIt = this->m_Parameters.find( name );
+ static const TString null_str = "";
+ TParameters::const_iterator pIt = this->m_Parameters.find( name );
if( pIt == this->m_Parameters.end( ) )
- return;
- if( pIt->second.first != Self::Index )
- return;
-
- va_list v_lst;
- va_start( v_lst, n );
-
- std::stringstream ss;
- for( TUint i = 0; i < n; ++i )
- ss << va_arg( v_lst, long ) << ":";
- va_end( v_lst );
-
- pIt->second.second = ss.str( );
+ return( null_str );
+ return( pIt->second.second );
}
// -------------------------------------------------------------------------
-void cpPlugins::Interface::Parameters::
-SetValueAsPoint( const std::string& name, const TUint& n, ... )
+const cpPlugins::Interface::Parameters::
+TString& cpPlugins::Interface::Parameters::
+GetValueAsString( const TString& name ) const
{
- TParameters::iterator pIt = this->m_Parameters.find( name );
+ static const TString null_str = "";
+ TParameters::const_iterator pIt = this->m_Parameters.find( name );
if( pIt == this->m_Parameters.end( ) )
- return;
- if( pIt->second.first != Self::Point )
- return;
-
- va_list v_lst;
- va_start( v_lst, n );
-
- std::stringstream ss;
- for( TUint i = 0; i < n; ++i )
- ss << va_arg( v_lst, double ) << ":";
- va_end( v_lst );
+ return( null_str );
+ if( pIt->second.first != Self::String )
+ return( null_str );
- pIt->second.second = ss.str( );
+ return( pIt->second.second );
}
// -------------------------------------------------------------------------
-const std::string& cpPlugins::Interface::Parameters::
-GetValueAsString( const std::string& name ) const
+cpPlugins::Interface::Parameters::
+TBool cpPlugins::Interface::Parameters::
+GetValueAsBool( const TString& name ) const
{
- static const std::string null_str = "";
TParameters::const_iterator pIt = this->m_Parameters.find( name );
if( pIt == this->m_Parameters.end( ) )
- return( null_str );
- if( pIt->second.first != Self::String )
- return( null_str );
-
- return( pIt->second.second );
+ 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::
-GetValueAsInt( const std::string& name ) const
+GetValueAsInt( const TString& name ) const
{
- static const std::string null_str = "";
TParameters::const_iterator pIt = this->m_Parameters.find( name );
if( pIt == this->m_Parameters.end( ) )
return( TInt( 0 ) );
if( pIt->second.first != Self::Int )
return( TInt( 0 ) );
-
- return( std::atoi( pIt->second.second.c_str( ) ) );
+ return( TInt( std::atoi( pIt->second.second.c_str( ) ) ) );
}
// -------------------------------------------------------------------------
cpPlugins::Interface::Parameters::
TUint cpPlugins::Interface::Parameters::
-GetValueAsUint( const std::string& name ) const
+GetValueAsUint( const TString& name ) const
{
- static const std::string null_str = "";
TParameters::const_iterator pIt = this->m_Parameters.find( name );
if( pIt == this->m_Parameters.end( ) )
return( TUint( 0 ) );
if( pIt->second.first != Self::Uint )
return( TUint( 0 ) );
-
- return( std::atoi( pIt->second.second.c_str( ) ) );
+ return( TUint( std::atoi( pIt->second.second.c_str( ) ) ) );
}
// -------------------------------------------------------------------------
cpPlugins::Interface::Parameters::
TReal cpPlugins::Interface::Parameters::
-GetValueAsReal( const std::string& name ) const
+GetValueAsReal( const TString& name ) const
{
- static const std::string null_str = "";
TParameters::const_iterator pIt = this->m_Parameters.find( name );
if( pIt == this->m_Parameters.end( ) )
return( TReal( 0 ) );
if( pIt->second.first != Self::Real )
return( TReal( 0 ) );
-
- return( std::atof( pIt->second.second.c_str( ) ) );
+ return( TReal( std::atof( pIt->second.second.c_str( ) ) ) );
}
// -------------------------------------------------------------------------
void cpPlugins::Interface::Parameters::
GetValueAsStringList(
- std::vector< std::string >& lst, const std::string& name
+ 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::
-GetValueAsIntList( std::vector< TInt >& lst, const std::string& name ) const
+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::
-GetValueAsUintList( std::vector< TUint >& lst, const std::string& name ) const
+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::
-GetValueAsRealList( std::vector< TReal >& lst, const std::string& name ) const
+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$