42 #include "itkConfigure.h"
76 #if defined( _MSC_VER ) && ( _MSC_VER < 1310 )
79 #if defined( __SUNPRO_CC ) && ( __SUNPRO_CC < 0x590 )
80 #error "__SUNPRO_CC < 0x590 not supported under ITKv4"
82 #if defined( __CYGWIN__ )
83 #error "The Cygwin compiler is not supported in ITKv4 and above"
85 #if defined( __BORLANDC__ )
86 #error "The Borland C compiler is not supported in ITKv4 and above"
88 #if defined( __MWERKS__ )
89 #error "The MetroWerks compiler is not supported in ITKv4 and above"
91 #if defined( __GNUC__ ) && ( __GNUC__ < 3 )
92 #error "The __GNUC__ version 2.95 compiler is not supprted under ITKv4 and above"
97 #error "The __sgi compiler is not supprted under ITKv4 and above"
107 #if defined( _WIN32 ) || defined ( WIN32 )
108 #define ITK_ABI_IMPORT __declspec(dllimport)
109 #define ITK_ABI_EXPORT __declspec(dllexport)
110 #define ITK_ABI_HIDDEN
113 #define ITK_ABI_IMPORT __attribute__ ((visibility ("default")))
114 #define ITK_ABI_EXPORT __attribute__ ((visibility ("default")))
115 #define ITK_ABI_HIDDEN __attribute__ ((visibility ("hidden")))
117 #define ITK_ABI_IMPORT
118 #define ITK_ABI_EXPORT
119 #define ITK_ABI_HIDDEN
123 #define ITKCommon_HIDDEN ITK_ABI_HIDDEN
125 #if !defined( ITKSTATIC )
126 #ifdef ITKCommon_EXPORTS
127 #define ITKCommon_EXPORT ITK_ABI_EXPORT
129 #define ITKCommon_EXPORT ITK_ABI_IMPORT
136 #define ITKCommon_EXPORT ITK_ABI_EXPORT
138 #define ITKCommon_EXPORT
145 #define itkStaticConstMacro(name, type, value) enum { name = value }
147 #define itkGetStaticConstMacro(name) (Self::name)
150 #define itkSetInputMacro(name, type) \
151 virtual void Set##name(const type *_arg) \
153 itkDebugMacro("setting input " #name " to " << _arg); \
154 if ( _arg != static_cast< type * >( this->ProcessObject::GetInput(#name) ) ) \
156 this->ProcessObject::SetInput( #name, const_cast< type * >( _arg ) ); \
163 #define itkGetInputMacro(name, type) \
164 virtual const type * Get##name() const \
166 itkDebugMacro( "returning input " << #name " of " \
167 << static_cast< const type * >( this->ProcessObject::GetInput(#name) ) ); \
168 return static_cast< const type * >( this->ProcessObject::GetInput(#name) ); \
173 #define itkSetDecoratedInputMacro(name, type) \
174 virtual void Set##name##Input(const SimpleDataObjectDecorator< type > *_arg) \
176 itkDebugMacro("setting input " #name " to " << _arg); \
177 if ( _arg != static_cast< SimpleDataObjectDecorator< type > * >( this->ProcessObject::GetInput(#name) ) ) \
179 this->ProcessObject::SetInput( #name, const_cast< SimpleDataObjectDecorator< type > * >( _arg ) ); \
183 virtual void Set##name(const type &_arg) \
185 typedef SimpleDataObjectDecorator< type > DecoratorType; \
186 itkDebugMacro("setting input " #name " to " << _arg); \
187 const DecoratorType *oldInput = \
188 static_cast< const DecoratorType * >( \
189 this->ProcessObject::GetInput(#name) ); \
190 if ( oldInput && oldInput->Get() == _arg ) \
194 typename DecoratorType::Pointer newInput = DecoratorType::New(); \
195 newInput->Set(_arg); \
196 this->Set##name##Input(newInput); \
201 #define itkGetDecoratedInputMacro(name, type) \
202 virtual const SimpleDataObjectDecorator< type > * Get##name##Input() const \
204 itkDebugMacro( "returning input " << #name " of " \
205 << static_cast< const SimpleDataObjectDecorator< type > * >( this->ProcessObject::GetInput(#name) ) ); \
206 return static_cast< const SimpleDataObjectDecorator< type > * >( this->ProcessObject::GetInput(#name) ); \
208 virtual const type & Get##name() const \
210 itkDebugMacro("Getting input " #name); \
211 typedef SimpleDataObjectDecorator< type > DecoratorType; \
212 const DecoratorType *input = \
213 static_cast< const DecoratorType * >( \
214 this->ProcessObject::GetInput(#name) ); \
215 if( input == NULL ) \
217 itkExceptionMacro(<<"input" #name " is not set"); \
219 return input->Get(); \
225 #define itkSetGetDecoratedInputMacro(name, type) \
226 itkSetDecoratedInputMacro(name, type) \
227 itkGetDecoratedInputMacro(name, type)
233 #define itkSetDecoratedObjectInputMacro(name, type) \
234 virtual void Set##name##Input(const DataObjectDecorator< type > *_arg) \
236 itkDebugMacro("setting input " #name " to " << _arg); \
237 if ( _arg != static_cast< DataObjectDecorator< type > * >( this->ProcessObject::GetInput(#name) ) ) \
239 this->ProcessObject::SetInput( #name, const_cast< DataObjectDecorator< type > * >( _arg ) ); \
243 virtual void Set##name(const type * _arg) \
245 typedef DataObjectDecorator< type > DecoratorType; \
246 itkDebugMacro("setting input " #name " to " << _arg); \
247 const DecoratorType *oldInput = \
248 static_cast< const DecoratorType * >( \
249 this->ProcessObject::GetInput(#name) ); \
250 if ( oldInput && oldInput->Get() == _arg ) \
254 typename DecoratorType::Pointer newInput = DecoratorType::New(); \
255 newInput->Set(_arg); \
256 this->Set##name##Input(newInput); \
264 #define itkGetDecoratedObjectInputMacro(name, type) \
265 virtual const DataObjectDecorator< type > * Get##name##Input() const \
267 itkDebugMacro( "returning input " << #name " of " \
268 << static_cast< const DataObjectDecorator< type > * >( this->ProcessObject::GetInput(#name) ) ); \
269 return static_cast< const DataObjectDecorator< type > * >( this->ProcessObject::GetInput(#name) ); \
271 virtual const type * Get##name() const \
273 itkDebugMacro("Getting input " #name); \
274 typedef DataObjectDecorator< type > DecoratorType; \
275 const DecoratorType *input = \
276 static_cast< const DecoratorType * >( \
277 this->ProcessObject::GetInput(#name) ); \
278 if( input == NULL ) \
280 itkExceptionMacro(<<"input" #name " is not set"); \
282 return input->Get(); \
288 #define itkSetGetDecoratedObjectInputMacro(name, type) \
289 itkSetDecoratedObjectInputMacro(name, type) \
290 itkGetDecoratedObjectInputMacro(name, type)
293 #define itkSetMacro(name, type) \
294 virtual void Set##name (const type _arg) \
296 itkDebugMacro("setting " #name " to " << _arg); \
297 if ( this->m_##name != _arg ) \
299 this->m_##name = _arg; \
306 #define itkGetMacro(name, type) \
307 virtual type Get##name () \
309 return this->m_##name; \
316 #define itkGetConstMacro(name, type) \
317 virtual type Get##name () const \
319 return this->m_##name; \
327 #define itkGetConstReferenceMacro(name, type) \
328 virtual const type &Get##name () const \
330 return this->m_##name; \
338 #define itkSetEnumMacro(name, type) \
339 virtual void Set##name (const type _arg) \
341 itkDebugMacro( "setting " #name " to " << static_cast< long >( _arg ) ); \
342 if ( this->m_##name != _arg ) \
344 this->m_##name = _arg; \
354 #define itkGetEnumMacro(name, type) \
355 virtual type Get##name () const \
357 return this->m_##name; \
364 #define itkSetStringMacro(name) \
365 virtual void Set##name (const char *_arg) \
367 if ( _arg && ( _arg == this->m_##name ) ) { return; } \
370 this->m_##name = _arg; \
374 this->m_##name = ""; \
378 virtual void Set##name (const std::string & _arg) \
380 this->Set##name( _arg.c_str() ); \
388 #define itkGetStringMacro(name) \
389 virtual const char *Get##name () const \
391 return this->m_##name.c_str(); \
397 #define itkSetClampMacro(name, type, min, max) \
398 virtual void Set##name (type _arg) \
400 itkDebugMacro("setting " << #name " to " << _arg); \
401 if ( this->m_##name != ( _arg < min ? min : ( _arg > max ? max : _arg ) ) ) \
403 this->m_##name = ( _arg < min ? min : ( _arg > max ? max : _arg ) ); \
413 #define itkSetObjectMacro(name, type) \
414 virtual void Set##name (type * _arg) \
416 itkDebugMacro("setting " << #name " to " << _arg); \
417 if ( this->m_##name != _arg ) \
419 this->m_##name = _arg; \
427 #define itkGetObjectMacro(name, type) \
428 virtual type * Get##name () \
430 return this->m_##name.GetPointer(); \
437 #define itkSetConstObjectMacro(name, type) \
438 virtual void Set##name (const type * _arg) \
440 itkDebugMacro("setting " << #name " to " << _arg); \
441 if ( this->m_##name != _arg ) \
443 this->m_##name = _arg; \
451 #define itkGetConstObjectMacro(name, type) \
452 virtual const type * Get##name () const \
454 return this->m_##name.GetPointer(); \
459 #define itkGetConstReferenceObjectMacro(name, type) \
460 virtual const typename type::Pointer & Get##name () const \
462 return this->m_##name; \
467 #define itkBooleanMacro(name) \
468 virtual void name##On () \
470 this->Set##name(true); \
472 virtual void name##Off () \
474 this->Set##name(false); \
481 #define itkSetVectorMacro(name, type, count) \
482 virtual void Set##name(type data[]) \
485 for ( i = 0; i < count; i++ ) \
487 if ( data[i] != this->m_##name[i] ) \
495 for ( i = 0; i < count; i++ ) \
497 this->m_##name[i] = data[i]; \
505 #define itkGetVectorMacro(name, type, count) \
506 virtual type * Get##name () const \
508 return this->m_##name; \
514 #define itkGPUKernelClassMacro(kernel) \
515 class ITK_EXPORT kernel \
518 static const char* GetOpenCLSource(); \
522 kernel(const kernel &); \
523 void operator=(const kernel &); \
527 #define itkGetOpenCLSourceFromKernelMacro(kernel) \
528 static const char* GetOpenCLSource() \
530 return kernel::GetOpenCLSource(); \
553 #define itkNewMacro(x) \
554 itkSimpleNewMacro(x) \
555 itkCreateAnotherMacro(x) \
558 #define itkSimpleNewMacro(x) \
559 static Pointer New(void) \
561 Pointer smartPtr = ::itk::ObjectFactory< x >::Create(); \
562 if ( smartPtr.GetPointer() == NULL ) \
566 smartPtr->UnRegister(); \
570 #define itkCreateAnotherMacro(x) \
571 virtual::itk::LightObject::Pointer CreateAnother(void) const \
573 ::itk::LightObject::Pointer smartPtr; \
574 smartPtr = x::New().GetPointer(); \
578 #define itkCloneMacro(x) \
579 Pointer Clone() const \
582 dynamic_cast<x *>(this->InternalClone().GetPointer()); \
602 #define itkFactorylessNewMacro(x) \
603 static Pointer New(void) \
606 x * rawPtr = new x; \
608 rawPtr->UnRegister(); \
611 virtual::itk::LightObject::Pointer CreateAnother(void) const \
613 ::itk::LightObject::Pointer smartPtr; \
614 smartPtr = x::New().GetPointer(); \
621 #define itkTypeMacro(thisClass, superclass) \
622 virtual const char *GetNameOfClass() const \
635 extern ITKCommon_EXPORT
void OutputWindowDisplayText(
const char *);
638 extern ITKCommon_EXPORT
void OutputWindowDisplayErrorText(
const char *);
640 extern ITKCommon_EXPORT
void OutputWindowDisplayWarningText(
const char *);
642 extern ITKCommon_EXPORT
void OutputWindowDisplayGenericOutputText(
const char *);
644 extern ITKCommon_EXPORT
void OutputWindowDisplayDebugText(
const char *);
650 #if defined( NDEBUG )
651 #define itkDebugMacro(x)
652 #define itkDebugStatement(x)
654 #define itkDebugMacro(x) \
656 if ( this->GetDebug() && ::itk::Object::GetGlobalWarningDisplay() ) \
658 std::ostringstream itkmsg; \
659 itkmsg << "Debug: In " __FILE__ ", line " << __LINE__ << "\n" \
660 << this->GetNameOfClass() << " (" << this << "): " x \
662 ::itk::OutputWindowDisplayDebugText( itkmsg.str().c_str() ); \
669 #define itkDebugStatement(x) x
675 #define itkWarningMacro(x) \
677 if ( ::itk::Object::GetGlobalWarningDisplay() ) \
679 std::ostringstream itkmsg; \
680 itkmsg << "WARNING: In " __FILE__ ", line " << __LINE__ << "\n" \
681 << this->GetNameOfClass() << " (" << this << "): " x \
683 ::itk::OutputWindowDisplayWarningText( itkmsg.str().c_str() ); \
690 #define itkWarningStatement(x) x
692 #if defined( ITK_CPP_FUNCTION )
693 #if defined( _WIN32 ) && !defined( __MINGW32__ ) && !defined( CABLE_CONFIGURATION ) \
695 #define ITK_LOCATION __FUNCSIG__
696 #elif defined( __GNUC__ )
697 #define ITK_LOCATION __PRETTY_FUNCTION__
699 #define ITK_LOCATION __FUNCTION__
702 #define ITK_LOCATION "unknown"
710 #define itkExceptionMacro(x) \
712 std::ostringstream message; \
713 message << "itk::ERROR: " << this->GetNameOfClass() \
714 << "(" << this << "): " x; \
715 ::itk::ExceptionObject e_(__FILE__, __LINE__, message.str().c_str(), ITK_LOCATION); \
720 #define itkGenericExceptionMacro(x) \
722 std::ostringstream message; \
723 message << "itk::ERROR: " x; \
724 ::itk::ExceptionObject e_(__FILE__, __LINE__, message.str().c_str(), ITK_LOCATION); \
728 #define itkDeclareExceptionMacro(newexcp,parentexcp,whatmessage) \
730 class ITK_EXPORT newexcp : public parentexcp \
733 newexcp( const char *file, unsigned int lineNumber ) : \
734 parentexcp( file, lineNumber ) \
736 this->SetDescription( whatmessage ); \
738 newexcp( const std::string & file, unsigned int lineNumber ) : \
739 parentexcp( file, lineNumber ) \
741 this->SetDescription( whatmessage ); \
743 itkTypeMacro(newexcp, parentexcp); \
747 #define itkSpecializedExceptionMacro(exceptiontype) \
749 ::itk::exceptiontype e_(__FILE__, __LINE__); \
750 e_.SetLocation(ITK_LOCATION); \
754 #define itkSpecializedMessageExceptionMacro(exceptiontype,x) \
756 ::itk::exceptiontype e_(__FILE__, __LINE__); \
757 std::ostringstream message; \
758 message << "itk::ERROR: " x; \
759 e_.SetDescription(message.str().c_str()); \
760 e_.SetLocation(ITK_LOCATION); \
765 #define itkGenericOutputMacro(x) \
767 if ( ::itk::Object::GetGlobalWarningDisplay() ) \
769 std::ostringstream itkmsg; \
770 itkmsg << "WARNING: In " __FILE__ ", line " << __LINE__ << "\n" \
772 ::itk::OutputWindowDisplayGenericOutputText( itkmsg.str().c_str() ); \
779 #define itkLogMacro(x, y) \
781 if ( this->GetLogger() ) \
783 this->GetLogger()->Write(::itk::LoggerBase::x, y); \
787 #define itkLogMacroStatic(obj, x, y) \
789 if ( obj->GetLogger() ) \
791 obj->GetLogger()->Write(::itk::LoggerBase::x, y); \
817 #if defined( ITK_LEGACY_REMOVE )
822 #define itkLegacyMacro(method) class itkLegacyMethodRemoved
823 #elif defined( ITK_LEGACY_SILENT ) || defined( ITK_LEGACY_TEST ) || defined( CSWIG )
825 #define itkLegacyMacro(method) method
829 #if defined( __GNUC__ ) && !defined( __INTEL_COMPILER ) && ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) )
830 #define itkLegacyMacro(method) method __attribute__( ( deprecated ) )
831 #elif defined( _MSC_VER )
832 #define itkLegacyMacro(method) __declspec(deprecated) method
834 #define itkLegacyMacro(method) method
851 #if defined( ITK_LEGACY_REMOVE ) || defined( ITK_LEGACY_SILENT )
852 #define itkLegacyBodyMacro(method, version)
853 #define itkLegacyReplaceBodyMacro(method, version, replace)
854 #define itkGenericLegacyBodyMacro(method, version)
855 #define itkGenericLegacyReplaceBodyMacro(method, version, replace)
857 #define itkLegacyBodyMacro(method, version) \
858 itkWarningMacro(#method " was deprecated for ITK " #version " and will be removed in a future version.")
859 #define itkLegacyReplaceBodyMacro(method, version, replace) \
861 #method " was deprecated for ITK " #version " and will be removed in a future version. Use " #replace \
863 #define itkGenericLegacyBodyMacro(method, version) \
864 itkGenericOutputMacro(#method " was deprecated for ITK " #version " and will be removed in a future version.")
865 #define itkGenericLegacyReplaceBodyMacro(method, version, replace) \
866 itkGenericOutputMacro( \
867 #method " was deprecated for ITK " #version " and will be removed in a future version. Use " #replace \
900 #if defined( ITK_SUPPORTS_TEMPLATED_FRIEND_FUNCTION_WITH_NULL_STRING )
901 #define ITK_FRIEND_TEMPLATE_FUNCTION_ARGUMENT(T)
903 #if defined( ITK_SUPPORTS_TEMPLATED_FRIEND_FUNCTION_WITH_EMPTY_BRACKETS )
904 #define ITK_FRIEND_TEMPLATE_FUNCTION_ARGUMENT(T) < >
906 #if defined( ITK_SUPPORTS_TEMPLATED_FRIEND_FUNCTION_WITH_TEMPLATE_ARGUMENTS )
907 #define ITK_FRIEND_TEMPLATE_FUNCTION_ARGUMENT(T) < T >
913 #if ( defined ( _MSC_VER ) && ( _MSC_VER >= 1600 ) )
914 #ifdef ITK_FRIEND_TEMPLATE_FUNCTION_ARGUMENT
915 #undef ITK_FRIEND_TEMPLATE_FUNCTION_ARGUMENT
917 #define ITK_FRIEND_TEMPLATE_FUNCTION_ARGUMENT(T)
930 #if defined( __INTEL_COMPILER ) && __INTEL_COMPILER >= 700
931 #define ITK_TEMPLATE_EXTERN 1
932 #elif defined( __GNUC__ ) && __GNUC__ >= 3
933 #define ITK_TEMPLATE_EXTERN 1
934 #elif defined( _MSC_VER )
935 #define ITK_TEMPLATE_EXTERN 1
937 #if !defined( ITK_TEMPLATE_DO_NOT_INSTANTIATE )
938 #define ITK_TEMPLATE_DO_NOT_INSTANTIATE 0
940 #if !defined( ITK_TEMPLATE_EXTERN )
941 #define ITK_TEMPLATE_EXTERN 0
951 #define ITK_TEMPLATE_EXPORT(x) ITK_TEMPLATE_EXPORT_DELAY(x)
952 #define ITK_TEMPLATE_EXPORT_DELAY(x) template ITK_TEMPLATE_##x;
962 #if ITK_TEMPLATE_EXTERN
963 #define ITK_TEMPLATE_IMPORT_DELAY(x) extern template ITK_TEMPLATE_##x;
964 #elif ITK_TEMPLATE_DO_NOT_INSTANTIATE
965 #define ITK_TEMPLATE_IMPORT_DELAY(x) \
966 ITK_TEMPLATE_IMPORT_IMPL(do_not_instantiate ITK_TEMPLATE_##x)
967 #define ITK_TEMPLATE_IMPORT_IMPL(x) _Pragma(#x)
969 #if defined( ITK_TEMPLATE_IMPORT_DELAY )
970 #define ITK_TEMPLATE_IMPORT(x) ITK_TEMPLATE_IMPORT_DELAY(x)
971 #define ITK_TEMPLATE_IMPORT_WORKS 1
973 #define ITK_TEMPLATE_IMPORT(x)
974 #define ITK_TEMPLATE_IMPORT_WORKS 0
1042 #define ITK_EXPORT_TEMPLATE(EXPORT, c, x, y) \
1043 ITK_TEMPLATE_##c(ITK_TEMPLATE_EXPORT, EXPORT ITK_EMPTY, x, y)
1044 #define ITK_IMPORT_TEMPLATE(EXPORT, c, x, y) \
1045 ITK_TEMPLATE_##c(ITK_TEMPLATE_IMPORT, EXPORT ITK_EMPTY, x, y)
1052 #define ITK_TEMPLATE_1(x1) x1
1053 #define ITK_TEMPLATE_2(x1, x2) x1, x2
1054 #define ITK_TEMPLATE_3(x1, x2, x3) x1, x2, x3
1055 #define ITK_TEMPLATE_4(x1, x2, x3, x4) x1, x2, x3, x4
1056 #define ITK_TEMPLATE_5(x1, x2, x3, x4, x5) x1, x2, x3, x4, x5
1057 #define ITK_TEMPLATE_6(x1, x2, x3, x4, x5, x6) x1, x2, x3, x4, x5, x6
1058 #define ITK_TEMPLATE_7(x1, x2, x3, x4, x5, x6, x7) x1, x2, x3, x4, x5, x6, x7
1059 #define ITK_TEMPLATE_8(x1, x2, x3, x4, x5, x6, x7, x8) x1, x2, x3, x4, x5, x6, x7, x8
1060 #define ITK_TEMPLATE_9(x1, x2, x3, x4, x5, x6, x7, x8, x9) x1, x2, x3, x4, x5, x6, x7, x8, x9
1070 #ifndef ITK_TEMPLATE_CXX //At this point this variable MUST be defined
1071 #define ITK_TEMPLATE_CXX 0
1073 #ifndef ITK_TEMPLATE_TYPE
1074 #define ITK_TEMPLATE_TYPE 0
1076 #if defined( ITK_MANUAL_INSTANTIATION )
1077 #define ITK_TEMPLATE_TXX 0
1079 #define ITK_TEMPLATE_TXX !( ITK_TEMPLATE_CXX || ITK_TEMPLATE_TYPE )
1087 #if ITK_TEMPLATE_CXX
1088 #undef ITK_MANUAL_INSTANTIATION
1089 #define ITK_MANUAL_INSTANTIATION
1095 #define ITK_EXPORT_ITKCommon(c, x, n) \
1096 ITK_EXPORT_TEMPLATE(ITKCommon_EXPORT, c, x, n)
1097 #define ITK_IMPORT_ITKCommon(c, x, n) \
1098 ITK_IMPORT_TEMPLATE(ITKCommon_EXPORT, c, x, n)
1113 #if ITK_TEMPLATE_IMPORT_WORKS && defined( ITK_EXPLICIT_INSTANTIATION )
1114 #define ITK_TEMPLATE_EXPLICIT !ITK_TEMPLATE_CXX
1116 #define ITK_TEMPLATE_EXPLICIT 0
1132 #define itkForLoopAssignmentMacro(DestinationType, \
1134 DestinationElementType, \
1137 NumberOfIterations) \
1138 for ( unsigned int i = 0; i < NumberOfIterations; ++i ) \
1140 DestinationArray[i] = static_cast< DestinationElementType >( SourceArray[i] ); \
1152 #define itkForLoopRoundingAndAssignmentMacro(DestinationType, \
1153 Sourcrnd_halfintup, \
1154 DestinationElementType, \
1157 NumberOfIterations) \
1158 for ( unsigned int i = 0; i < NumberOfIterations; ++i ) \
1160 DestinationArray[i] = itk::Math::Round< DestinationElementType >(SourceArray[i]); \
1167 #ifdef _POSIX_SOURCE
1168 #define itkAssertInDebugOrThrowInReleaseMacro(msg) __assert_fail (msg, __FILE__, __LINE__, __ASSERT_FUNCTION);
1170 #define itkAssertInDebugOrThrowInReleaseMacro(msg) itkGenericExceptionMacro(<< msg);
1174 #define itkAssertInDebugOrThrowInReleaseMacro(msg) itkGenericExceptionMacro(<< msg);
1177 #define itkAssertOrThrowMacro(test, message) \
1180 std::ostringstream msgstr; \
1181 msgstr << message; \
1182 itkAssertInDebugOrThrowInReleaseMacro( msgstr.str().c_str() ); \
1186 #define itkAssertInDebugAndIgnoreInReleaseMacro(X) assert(X)
1188 #define itkAssertInDebugAndIgnoreInReleaseMacro(X)
1191 #ifdef ITKV3_COMPATIBILITY
1195 #define ITK_TYPENAME typename
1199 #endif //end of itkMacro.h