Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <typeinfo>
00032 #include <sstream>
00033
00034 template<class T>
00035 void
00036 cmtk::CommandLine::Vector<T>
00037 ::Evaluate( const size_t argc, const char* argv[], size_t& index )
00038 {
00039 if ( !this->m_HasBeenUsed )
00040 {
00041 this->m_pVector->resize(0);
00042 this->m_HasBeenUsed = true;
00043 }
00044
00045 if ( index+1 < argc )
00046 {
00047 ++index;
00048
00049 std::string str( argv[index] );
00050 for ( size_t i = 0; i < str.length(); ++i )
00051 {
00052 if ( str[i] == ',' )
00053 str[i] = ' ';
00054 }
00055
00056
00057 std::istringstream strm( str );
00058 while ( strm.good() && ! strm.eof() )
00059 {
00060 T nextValue;
00061 strm >> nextValue;
00062 this->m_pVector->push_back( nextValue );
00063 }
00064
00065 }
00066 else
00067 {
00068 throw( Exception( "Vector command line option needs an argument.", index ) );
00069 }
00070 }
00071
00072 template<class T>
00073 mxml_node_t*
00074 cmtk::CommandLine::Vector<T>
00075 ::MakeXML( mxml_node_t *const parent ) const
00076 {
00077 if ( ! (this->m_Properties & PROPS_NOXML) )
00078 {
00079 const std::string typeName = std::string ( CommandLineTypeTraits<T>::GetName() ) + std::string( "-vector" );
00080 mxml_node_t *node = mxmlNewElement( parent, typeName.c_str() );
00081
00082
00083 for ( std::map<std::string,std::string>::const_iterator attrIt = this->m_Attributes.begin(); attrIt != this->m_Attributes.end(); ++attrIt )
00084 {
00085 mxmlElementSetAttr( node, attrIt->first.c_str(), attrIt->second.c_str() );
00086 }
00087
00088 mxmlElementSetAttr( node, "multiple", "true" );
00089
00090 return node;
00091 }
00092 return NULL;
00093 }
00094
00095 template<class T>
00096 std::string
00097 cmtk::CommandLine::Vector<T>
00098 ::GetParamTypeString() const
00099 {
00100 const std::string& singleItemString = Item::Helper<T>::GetParamTypeString( this );
00101 return singleItemString+std::string("[,")+singleItemString+std::string(",...]");
00102 }