14 #ifndef __itkParameterMapInterface_h
15 #define __itkParameterMapInterface_h
17 #include "itkObject.h"
18 #include "itkObjectFactory.h"
20 #include "itkNumericTraits.h"
97 itkSetMacro( PrintErrorMessages,
bool );
98 itkGetConstMacro( PrintErrorMessages,
bool );
102 const std::string & parameterName )
const;
120 const std::string & parameterName,
121 const unsigned int entry_nr,
122 const bool printThisErrorMessage,
123 std::string & errorMessage )
const
133 if ( numberOfEntries == 0 )
135 std::stringstream ss;
136 ss <<
"WARNING: The parameter \"" << parameterName
137 <<
"\", requested at entry number " << entry_nr
138 <<
", does not exist at all.\n"
139 <<
" The default value \"" << parameterValue
140 <<
"\" is used instead." << std::endl;
143 errorMessage = ss.str();
153 if ( entry_nr >= numberOfEntries )
155 std::stringstream ss;
156 ss <<
"WARNING: The parameter \"" << parameterName
157 <<
"\" does not exist at entry number " << entry_nr
158 <<
".\n The default value \"" << parameterValue
159 <<
"\" is used instead." << std::endl;
162 errorMessage = ss.str();
168 bool castSuccesful = this->
StringCast( vec[ entry_nr ], parameterValue );
171 if ( !castSuccesful )
173 std::stringstream ss;
174 ss <<
"ERROR: Casting entry number " << entry_nr
175 <<
" for the parameter \"" << parameterName
177 <<
" You tried to cast \"" << vec[ entry_nr ]
178 <<
"\" from std::string to "
179 <<
typeid( parameterValue ).name() << std::endl;
181 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 );
215 const std::string & parameterName,
216 const std::string & prefix,
217 const unsigned int entry_nr,
218 const int default_entry_nr,
219 const bool printThisErrorMessage,
220 std::string & errorMessage )
const
222 std::string fullname = prefix + parameterName;
226 std::string dummyString =
"";
227 if ( default_entry_nr >= 0 )
230 unsigned int uintdefault =
static_cast<unsigned int>( default_entry_nr );
231 found |= this->
ReadParameter( parameterValue, parameterName, uintdefault,
232 false, dummyString );
233 found |= this->
ReadParameter( parameterValue, parameterName, entry_nr,
234 false, dummyString );
235 found |= this->
ReadParameter( parameterValue, fullname, uintdefault,
236 false, dummyString );
237 found |= this->
ReadParameter( parameterValue, fullname, entry_nr,
238 false, dummyString );
243 found |= this->
ReadParameter( parameterValue, parameterName, entry_nr,
244 false, dummyString );
245 found |= this->
ReadParameter( parameterValue, fullname, entry_nr,
246 false, dummyString );
254 return this->
ReadParameter( parameterValue, parameterName, entry_nr,
255 true, errorMessage );
267 const std::string & parameterName,
268 const std::string & prefix,
269 const unsigned int entry_nr,
270 const unsigned int default_entry_nr,
271 std::string & errorMessage )
const
273 return this->
ReadParameter( parameterValue, parameterName, prefix,
274 entry_nr, default_entry_nr,
true, errorMessage );
280 std::vector< T > & parameterValues,
281 const std::string & parameterName,
282 const unsigned int entry_nr_start,
283 const unsigned int entry_nr_end,
284 const bool printThisErrorMessage,
285 std::string & errorMessage )
const
295 if ( numberOfEntries == 0 )
297 std::stringstream ss;
298 ss <<
"WARNING: The parameter \"" << parameterName
299 <<
"\", requested between entry numbers " << entry_nr_start
300 <<
" and " << entry_nr_end
301 <<
", does not exist at all.\n"
302 <<
" The default values are used instead." << std::endl;
305 errorMessage = ss.str();
311 if ( entry_nr_start > entry_nr_end )
313 std::stringstream ss;
314 ss <<
"WARNING: The entry number start (" << entry_nr_start
315 <<
") should be smaller than entry number end (" << entry_nr_end
316 <<
"). It was requested for parameter \"" << parameterName
317 <<
"\"." << std::endl;
320 itkExceptionMacro( << ss.str() );
324 if ( entry_nr_end >= numberOfEntries )
326 std::stringstream ss;
327 ss <<
"WARNING: The parameter \"" << parameterName
328 <<
"\" does not exist at entry number " << entry_nr_end
329 <<
".\nThe default value \"" << itk::NumericTraits<T>::Zero
330 <<
"\" is used instead." << std::endl;
331 itkExceptionMacro( << ss.str() );
345 for (
unsigned int i = entry_nr_start; i < entry_nr_end + 1; ++i )
348 bool castSuccesful = this->
StringCast( vec[ i ], parameterValues[ j ] );
352 if ( !castSuccesful )
354 std::stringstream ss;
355 ss <<
"ERROR: Casting entry number " << i
356 <<
" for the parameter \"" << parameterName
358 <<
" You tried to cast \"" << vec[ i ]
359 <<
"\" from std::string to "
360 <<
typeid( parameterValues[ 0 ] ).name() << std::endl;
362 itkExceptionMacro( << ss.str() );
371 std::vector<std::string> & parameterValues,
372 const std::string & parameterName,
373 const unsigned int entry_nr_start,
374 const unsigned int entry_nr_end,
375 const bool printThisErrorMessage,
376 std::string & errorMessage )
const;
396 bool StringCast(
const std::string & parameterValue, T & casted )
const
398 std::stringstream ss( parameterValue );
404 typename NumericTraits<T>::AccumulateType tempCasted;
406 casted =
static_cast<T
>( tempCasted );
407 if ( ss.bad() || ss.fail() )
418 bool StringCast(
const std::string & parameterValue, std::string & casted )
const;
424 #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