14 #ifndef __itkParameterMapInterface_h
15 #define __itkParameterMapInterface_h
17 #include "itkObject.h"
18 #include "itkObjectFactory.h"
20 #include "itkNumericTraits.h"
96 itkSetMacro( PrintErrorMessages,
bool );
97 itkGetConstMacro( PrintErrorMessages,
bool );
101 const std::string & parameterName )
const;
119 const std::string & parameterName,
120 const unsigned int entry_nr,
121 const bool printThisErrorMessage,
122 std::string & errorMessage )
const
132 if( numberOfEntries == 0 )
134 std::stringstream ss;
135 ss <<
"WARNING: The parameter \"" << parameterName
136 <<
"\", requested at entry number " << entry_nr
137 <<
", does not exist at all.\n"
138 <<
" The default value \"" << parameterValue
139 <<
"\" is used instead." << std::endl;
142 errorMessage = ss.str();
152 if( entry_nr >= numberOfEntries )
154 std::stringstream ss;
155 ss <<
"WARNING: The parameter \"" << parameterName
156 <<
"\" does not exist at entry number " << entry_nr
157 <<
".\n The default value \"" << parameterValue
158 <<
"\" is used instead." << std::endl;
161 errorMessage = ss.str();
167 bool castSuccesful = this->
StringCast( vec[ entry_nr ], parameterValue );
172 std::stringstream ss;
173 ss <<
"ERROR: Casting entry number " << entry_nr
174 <<
" for the parameter \"" << parameterName
176 <<
" You tried to cast \"" << vec[ entry_nr ]
177 <<
"\" from std::string to "
178 <<
typeid( parameterValue ).name() << std::endl;
180 itkExceptionMacro( << ss.str() );
190 const std::string & parameterName,
191 const unsigned int entry_nr,
192 const bool printThisErrorMessage,
193 std::string & errorMessage )
const;
200 const std::string & parameterName,
201 const unsigned int entry_nr,
202 std::string & errorMessage )
const
204 return this->
ReadParameter( parameterValue, parameterName, entry_nr,
205 true, errorMessage );
216 const std::string & parameterName,
217 const std::string & prefix,
218 const unsigned int entry_nr,
219 const int default_entry_nr,
220 const bool printThisErrorMessage,
221 std::string & errorMessage )
const
223 std::string fullname = prefix + parameterName;
227 std::string dummyString =
"";
228 if( default_entry_nr >= 0 )
231 unsigned int uintdefault =
static_cast< unsigned int >( default_entry_nr );
232 found |= this->
ReadParameter( parameterValue, parameterName, uintdefault,
233 false, dummyString );
234 found |= this->
ReadParameter( parameterValue, parameterName, entry_nr,
235 false, dummyString );
236 found |= this->
ReadParameter( parameterValue, fullname, uintdefault,
237 false, dummyString );
238 found |= this->
ReadParameter( parameterValue, fullname, entry_nr,
239 false, dummyString );
244 found |= this->
ReadParameter( parameterValue, parameterName, entry_nr,
245 false, dummyString );
246 found |= this->
ReadParameter( parameterValue, fullname, entry_nr,
247 false, dummyString );
255 return this->
ReadParameter( parameterValue, parameterName, entry_nr,
256 true, errorMessage );
269 const std::string & parameterName,
270 const std::string & prefix,
271 const unsigned int entry_nr,
272 const unsigned int default_entry_nr,
273 std::string & errorMessage )
const
275 return this->
ReadParameter( parameterValue, parameterName, prefix,
276 entry_nr, default_entry_nr,
true, errorMessage );
283 std::vector< T > & parameterValues,
284 const std::string & parameterName,
285 const unsigned int entry_nr_start,
286 const unsigned int entry_nr_end,
287 const bool printThisErrorMessage,
288 std::string & errorMessage )
const
298 if( numberOfEntries == 0 )
300 std::stringstream ss;
301 ss <<
"WARNING: The parameter \"" << parameterName
302 <<
"\", requested between entry numbers " << entry_nr_start
303 <<
" and " << entry_nr_end
304 <<
", does not exist at all.\n"
305 <<
" The default values are used instead." << std::endl;
308 errorMessage = ss.str();
314 if( entry_nr_start > entry_nr_end )
316 std::stringstream ss;
317 ss <<
"WARNING: The entry number start (" << entry_nr_start
318 <<
") should be smaller than entry number end (" << entry_nr_end
319 <<
"). It was requested for parameter \"" << parameterName
320 <<
"\"." << std::endl;
323 itkExceptionMacro( << ss.str() );
327 if( entry_nr_end >= numberOfEntries )
329 std::stringstream ss;
330 ss <<
"WARNING: The parameter \"" << parameterName
331 <<
"\" does not exist at entry number " << entry_nr_end
332 <<
".\nThe default value \"" << itk::NumericTraits< T >::Zero
333 <<
"\" is used instead." << std::endl;
334 itkExceptionMacro( << ss.str() );
348 for(
unsigned int i = entry_nr_start; i < entry_nr_end + 1; ++i )
351 bool castSuccesful = this->
StringCast( vec[ i ], parameterValues[ j ] );
357 std::stringstream ss;
358 ss <<
"ERROR: Casting entry number " << i
359 <<
" for the parameter \"" << parameterName
361 <<
" You tried to cast \"" << vec[ i ]
362 <<
"\" from std::string to "
363 <<
typeid( parameterValues[ 0 ] ).name() << std::endl;
365 itkExceptionMacro( << ss.str() );
375 std::vector< std::string > & parameterValues,
376 const std::string & parameterName,
377 const unsigned int entry_nr_start,
378 const unsigned int entry_nr_end,
379 const bool printThisErrorMessage,
380 std::string & errorMessage )
const;
402 bool StringCast(
const std::string & parameterValue, T & casted )
const
404 std::stringstream ss( parameterValue );
410 typename NumericTraits< T >::AccumulateType tempCasted;
412 casted =
static_cast< T
>( tempCasted );
413 if( ss.bad() || ss.fail() )
425 bool StringCast(
const std::string & parameterValue, std::string & casted )
const;
431 #endif // end __itkParameterMapInterface_h
std::map< std::string, ParameterValuesType > ParameterMapType
bool ReadParameter(T ¶meterValue, const std::string ¶meterName, const std::string &prefix, const unsigned int entry_nr, const int default_entry_nr, const bool printThisErrorMessage, std::string &errorMessage) const
SmartPointer< Self > Pointer
void SetParameterMap(const ParameterMapType &parMap)
Implements functionality to get parameters from a parameter map.
ParameterFileParser::ParameterMapType ParameterMapType
SmartPointer< const Self > ConstPointer
ParameterFileParser::ParameterValuesType ParameterValuesType
bool ReadParameter(T ¶meterValue, const std::string ¶meterName, const std::string &prefix, const unsigned int entry_nr, const unsigned int default_entry_nr, std::string &errorMessage) const
bool ReadParameter(T ¶meterValue, const std::string ¶meterName, const unsigned int entry_nr, std::string &errorMessage) const
bool ReadParameter(std::vector< T > ¶meterValues, const std::string ¶meterName, const unsigned int entry_nr_start, const unsigned int entry_nr_end, const bool printThisErrorMessage, std::string &errorMessage) const
std::vcl_size_t CountNumberOfParameterEntries(const std::string ¶meterName) const
bool m_PrintErrorMessages
ParameterMapType m_ParameterMap
void operator=(const Self &)
virtual ~ParameterMapInterface()
std::vector< std::string > ParameterValuesType
bool StringCast(const std::string ¶meterValue, T &casted) const
bool ReadParameter(T ¶meterValue, const std::string ¶meterName, const unsigned int entry_nr, const bool printThisErrorMessage, std::string &errorMessage) const
ParameterMapInterface Self