15 #ifndef __itkParameterMapInterface_h
16 #define __itkParameterMapInterface_h
18 #include "itkObject.h"
19 #include "itkObjectFactory.h"
21 #include "itkNumericTraits.h"
98 itkSetMacro( PrintErrorMessages,
bool );
99 itkGetConstMacro( PrintErrorMessages,
bool );
103 const std::string & parameterName )
const;
121 const std::string & parameterName,
122 const unsigned int entry_nr,
123 const bool printThisErrorMessage,
124 std::string & errorMessage )
const
134 if ( numberOfEntries == 0 )
136 std::stringstream ss;
137 ss <<
"WARNING: The parameter \"" << parameterName
138 <<
"\", requested at entry number " << entry_nr
139 <<
", does not exist at all.\n"
140 <<
" The default value \"" << parameterValue
141 <<
"\" is used instead." << std::endl;
144 errorMessage = ss.str();
154 if ( entry_nr >= numberOfEntries )
156 std::stringstream ss;
157 ss <<
"WARNING: The parameter \"" << parameterName
158 <<
"\" does not exist at entry number " << entry_nr
159 <<
".\n The default value \"" << parameterValue
160 <<
"\" is used instead." << std::endl;
163 errorMessage = ss.str();
169 bool castSuccesful = this->
StringCast( vec[ entry_nr ], parameterValue );
172 if ( !castSuccesful )
174 std::stringstream ss;
175 ss <<
"ERROR: Casting entry number " << entry_nr
176 <<
" for the parameter \"" << parameterName
178 <<
" You tried to cast \"" << vec[ entry_nr ]
179 <<
"\" from std::string to "
180 <<
typeid( parameterValue ).name() << std::endl;
182 itkExceptionMacro( << ss.str() );
191 const std::string & parameterName,
192 const unsigned int entry_nr,
193 const bool printThisErrorMessage,
194 std::string & errorMessage )
const;
201 const std::string & parameterName,
202 const unsigned int entry_nr,
203 std::string & errorMessage )
const
205 return this->
ReadParameter( parameterValue, parameterName, entry_nr,
206 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 );
268 const std::string & parameterName,
269 const std::string & prefix,
270 const unsigned int entry_nr,
271 const unsigned int default_entry_nr,
272 std::string & errorMessage )
const
274 return this->
ReadParameter( parameterValue, parameterName, prefix,
275 entry_nr, default_entry_nr,
true, errorMessage );
281 std::vector< T > & parameterValues,
282 const std::string & parameterName,
283 const unsigned int entry_nr_start,
284 const unsigned int entry_nr_end,
285 const bool printThisErrorMessage,
286 std::string & errorMessage )
const
296 if ( numberOfEntries == 0 )
298 std::stringstream ss;
299 ss <<
"WARNING: The parameter \"" << parameterName
300 <<
"\", requested between entry numbers " << entry_nr_start
301 <<
" and " << entry_nr_end
302 <<
", does not exist at all.\n"
303 <<
" The default values are used instead." << std::endl;
306 errorMessage = ss.str();
312 if ( entry_nr_start > entry_nr_end )
314 std::stringstream ss;
315 ss <<
"WARNING: The entry number start (" << entry_nr_start
316 <<
") should be smaller than entry number end (" << entry_nr_end
317 <<
"). It was requested for parameter \"" << parameterName
318 <<
"\"." << std::endl;
321 itkExceptionMacro( << ss.str() );
325 if ( entry_nr_end >= numberOfEntries )
327 std::stringstream ss;
328 ss <<
"WARNING: The parameter \"" << parameterName
329 <<
"\" does not exist at entry number " << entry_nr_end
330 <<
".\nThe default value \"" << itk::NumericTraits<T>::Zero
331 <<
"\" is used instead." << std::endl;
332 itkExceptionMacro( << ss.str() );
346 for (
unsigned int i = entry_nr_start; i < entry_nr_end + 1; ++i )
349 bool castSuccesful = this->
StringCast( vec[ i ], parameterValues[ j ] );
353 if ( !castSuccesful )
355 std::stringstream ss;
356 ss <<
"ERROR: Casting entry number " << i
357 <<
" for the parameter \"" << parameterName
359 <<
" You tried to cast \"" << vec[ i ]
360 <<
"\" from std::string to "
361 <<
typeid( parameterValues[ 0 ] ).name() << std::endl;
363 itkExceptionMacro( << ss.str() );
372 std::vector<std::string> & parameterValues,
373 const std::string & parameterName,
374 const unsigned int entry_nr_start,
375 const unsigned int entry_nr_end,
376 const bool printThisErrorMessage,
377 std::string & errorMessage )
const;
397 bool StringCast(
const std::string & parameterValue, T & casted )
const
399 std::stringstream ss( parameterValue );
401 if ( ss.bad() || ss.fail() )
412 bool StringCast(
const std::string & parameterValue, std::string & casted )
const;
418 #endif // end __itkParameterMapInterface_h