52#if !defined(CMAKE_NO_ANSI_STRING_STREAM)
54#elif !defined(CMAKE_NO_ANSI_STREAM_HEADERS)
56# define IGTL_NO_ANSI_STRING_STREAM
58# include <strstream.h>
59# define IGTL_NO_ANSI_STRING_STREAM
87#if defined(_MSC_VER) && (_MSC_VER <= 1300)
88# define IGTL_NO_INCLASS_MEMBER_INITIALIZATION
90#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x540)
91# define IGTL_NO_INCLASS_MEMBER_INITIALIZATION
93#if defined(__SVR4) && !defined(__SUNPRO_CC)
94# define IGTL_NO_INCLASS_MEMBER_INITIALIZATION
105# define IGTL_NO_SIZEOF_CONSTANT_LOOKUP
108#if defined(_MSC_VER) && (_MSC_VER <= 1300)
109#define IGTL_NO_SELF_AS_TRAIT_IN_TEMPLATE_ARGUMENTS
112#if defined(IGTL_NO_INCLASS_MEMBER_INITIALIZATION) || \
113 defined(IGTL_NO_SIZEOF_CONSTANT_LOOKUP)
114# define igtlStaticConstMacro(name,type,value) enum { name = value }
116# define igtlStaticConstMacro(name,type,value) static const type name = value
119#ifdef IGTL_NO_SELF_AS_TRAIT_IN_TEMPLATE_ARGUMENTS
120# define igtlGetStaticConstMacro(name) name
122# define igtlGetStaticConstMacro(name) (Self::name)
126#define igtlSetInputMacro(name, type, number) \
127 virtual void Set##name##Input(const type *_arg) \
129 igtlDebugMacro("setting input " #name " to " << _arg); \
130 if (_arg != static_cast<type *>(this->ProcessObject::GetInput( number ))) \
132 this->ProcessObject::SetNthInput( number, const_cast<type *>(_arg) ); \
135 virtual void SetInput##number(const type *_arg) \
137 igtlDebugMacro("setting input " #number " to " << _arg); \
138 if (_arg != static_cast<type *>(this->ProcessObject::GetInput( number ))) \
140 this->ProcessObject::SetNthInput( number, const_cast<type *>(_arg) ); \
146#define igtlSuperclassTraitMacro(traitnameType) \
147 typedef typename Superclass::traitnameType traitnameType;
150#define igtlGetInputMacro(name, type, number) \
151 virtual const type * Get##name##Input() const \
153 igtlDebugMacro("returning input " << #name " of " << static_cast<const type *>(this->ProcessObject::GetInput( number )) ); \
154 return static_cast<const type *>(this->ProcessObject::GetInput( number )); \
156 virtual const type * GetInput##number() const \
158 igtlDebugMacro("returning input " << #number " of " << static_cast<const type *>(this->ProcessObject::GetInput( number )) ); \
159 return static_cast<const type *>(this->ProcessObject::GetInput( number )); \
165#define igtlSetDecoratedInputMacro(name, type, number) \
166 igtlSetInputMacro(name, SimpleDataObjectDecorator<type>, number); \
167 igtlGetInputMacro(name, SimpleDataObjectDecorator<type>, number); \
168 virtual void Set##name(const type &_arg) \
170 typedef SimpleDataObjectDecorator< type > DecoratorType; \
171 igtlDebugMacro("setting input " #name " to " << _arg); \
172 const DecoratorType * oldInput = \
173 static_cast< const DecoratorType * >( \
174 this->ProcessObject::GetInput(number) ); \
175 if( oldInput && oldInput->Get() == _arg ) \
179 typename DecoratorType::Pointer newInput = DecoratorType::New(); \
180 newInput->Set( _arg ); \
181 this->Set##name##Input( newInput ); \
188#define igtlSetDecoratedObjectInputMacro(name, type, number) \
189 igtlSetInputMacro(name, DataObjectDecorator<type>, number); \
190 igtlGetInputMacro(name, DataObjectDecorator<type>, number); \
191 virtual void Set##name(const type *_arg) \
193 typedef DataObjectDecorator< type > DecoratorType; \
194 igtlDebugMacro("setting input " #name " to " << _arg); \
195 const DecoratorType * oldInput = \
196 static_cast< const DecoratorType * >( \
197 this->ProcessObject::GetInput(number) ); \
198 if( oldInput && oldInput->Get() == _arg ) \
202 typename DecoratorType::Pointer newInput = DecoratorType::New(); \
203 newInput->Set( _arg ); \
204 this->Set##name##Input( newInput ); \
210#define igtlSetMacro(name,type) \
211 virtual void Set##name (const type _arg) \
213 igtlDebugMacro("setting " #name " to " << _arg); \
214 if (this->m_##name != _arg) \
216 this->m_##name = _arg; \
222#define igtlGetMacro(name,type) \
223 virtual type Get##name () \
225 igtlDebugMacro("returning " << #name " of " << this->m_##name ); \
226 return this->m_##name; \
233#define igtlGetConstMacro(name,type) \
234 virtual type Get##name () const \
236 igtlDebugMacro("returning " << #name " of " << this->m_##name ); \
237 return this->m_##name; \
245#define igtlGetConstReferenceMacro(name,type) \
246 virtual const type & Get##name () const \
248 igtlDebugMacro("returning " << #name " of " << this->m_##name ); \
249 return this->m_##name; \
256#define igtlSetEnumMacro(name,type) \
257 virtual void Set##name (const type _arg) \
259 igtlDebugMacro("setting " #name " to " << static_cast<long>(_arg)); \
260 if (this->m_##name != _arg) \
262 this->m_##name = _arg; \
270#define igtlGetEnumMacro(name,type) \
271 virtual type Get##name () const \
273 igtlDebugMacro("returning " << #name " of " << static_cast<long>(this->m_##name) ); \
274 return this->m_##name; \
281#define igtlSetStringMacro(name) \
282 virtual void Set##name (const char* _arg) \
284 if ( _arg && (_arg == this->m_##name) ) { return;} \
287 this->m_##name = _arg;\
291 this->m_##name = ""; \
294 virtual void Set##name (const std::string & _arg) \
296 this->Set##name( _arg.c_str() ); \
304#define igtlGetStringMacro(name) \
305 virtual const char* Get##name () const \
307 return this->m_##name.c_str(); \
313#define igtlSetClampMacro(name,type,min,max) \
314 virtual void Set##name (type _arg) \
316 igtlDebugMacro("setting " << #name " to " << _arg ); \
317 if (this->m_##name != (_arg<min?min:(_arg>max?max:_arg))) \
319 this->m_##name = (_arg<min?min:(_arg>max?max:_arg)); \
328#define igtlSetObjectMacro(name,type) \
329 virtual void Set##name (type* _arg) \
331 igtlDebugMacro("setting " << #name " to " << _arg ); \
332 if (this->m_##name != _arg) \
334 this->m_##name = _arg; \
341#define igtlGetObjectMacro(name,type) \
342 virtual type * Get##name () \
344 igtlDebugMacro("returning " #name " address " << this->m_##name ); \
345 return this->m_##name.GetPointer(); \
353#define igtlSetConstObjectMacro(name,type) \
354 virtual void Set##name (const type* _arg) \
356 igtlDebugMacro("setting " << #name " to " << _arg ); \
357 if (this->m_##name != _arg) \
359 this->m_##name = _arg; \
367#define igtlGetConstObjectMacro(name,type) \
368 virtual const type * Get##name () const \
370 igtlDebugMacro("returning " #name " address " << this->m_##name ); \
371 return this->m_##name.GetPointer(); \
377#define igtlGetConstReferenceObjectMacro(name,type) \
378 virtual const typename type::Pointer & Get##name () const \
380 igtlDebugMacro("returning " #name " address " << this->m_##name ); \
381 return this->m_##name; \
387#define igtlBooleanMacro(name) \
388 virtual void name##On () { this->Set##name(true);} \
389 virtual void name##Off () { this->Set##name(false);}
395#define igtlSetVectorMacro(name,type,count) \
396 virtual void Set##name(type data[]) \
399 for (i=0; i<count; i++) { if ( data[i] != this->m_##name[i] ) { break; }} \
402 for (i=0; i<count; i++) { this->m_##name[i] = data[i]; }\
409#define igtlGetVectorMacro(name,type,count) \
410 virtual type *Get##name () const \
412 return this->m_##name; \
431#define igtlNewMacro(x) \
432static Pointer New(void) \
434 Pointer smartPtr = ::igtl::ObjectFactory<x>::Create(); \
435 if(smartPtr.GetPointer() == NULL) \
439 smartPtr->UnRegister(); \
442virtual ::igtl::LightObject::Pointer CreateAnother(void) const \
444 ::igtl::LightObject::Pointer smartPtr; \
445 smartPtr = x::New().GetPointer(); \
467#define igtlFactorylessNewMacro(x) \
468static Pointer New(void) \
473 rawPtr->UnRegister(); \
476 virtual ::igtl::LightObject::Pointer CreateAnother(void) const \
478 ::igtl::LightObject::Pointer smartPtr; \
479 smartPtr = x::New().GetPointer(); \
486#define igtlTypeMacro(thisClass,superclass) \
487 virtual const char *GetNameOfClass() const \
510#if defined(IGTL_LEAN_AND_MEAN) || defined(__BORLANDC__)
511#define igtlDebugMacro(x)
513#define igtlDebugMacro(x) \
514 { if (this->GetDebug() ) \
515 { ::igtl::OStringStream igtlmsg; \
516 igtlmsg << "Debug: In " __FILE__ ", line " << __LINE__ << "\n" \
517 << this->GetNameOfClass() << " (" << this << "): " x \
519 std::cerr << igtlmsg.str(); } \
528#ifdef IGTL_LEAN_AND_MEAN
529#define igtlWarningMacro(x)
531#define igtlWarningMacro(x) \
533 { ::igtl::OStringStream igtlmsg; \
534 igtlmsg << "WARNING: In " __FILE__ ", line " << __LINE__ << "\n" \
535 << this->GetNameOfClass() << " (" << this << "): " x \
537 std::cerr << igtlmsg.str(); } \
550#if !defined(IGTL_NO_ANSI_STRING_STREAM)
560namespace OStringStreamDetail
565 Cleanup(std::ostrstream& ostr): m_OStrStream(ostr) {}
566 ~Cleanup() { m_OStrStream.rdbuf()->freeze(0); }
567 static void IgnoreUnusedVariable(
const Cleanup&) {}
569 std::ostrstream& m_OStrStream;
574class OStringStream:
public std::ostrstream
577 typedef std::ostrstream Superclass;
581 OStringStreamDetail::Cleanup cleanup(*
this);
582 OStringStreamDetail::Cleanup::IgnoreUnusedVariable(cleanup);
583 int pcount = this->pcount();
584 const char* ptr = this->Superclass::str();
585 return std::string(ptr?ptr:
"", pcount);
595#if defined(IGTL_CPP_FUNCTION)
596 #if defined(__BORLANDC__)
597 #define IGTL_LOCATION __FUNC__
598 #elif defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(CABLE_CONFIGURATION) && !defined(CSWIG)
599 #define IGTL_LOCATION __FUNCSIG__
600 #elif defined(__GNUC__)
601 #define IGTL_LOCATION __PRETTY_FUNCTION__
603 #define IGTL_LOCATION __FUNCTION__
606 #define IGTL_LOCATION "unknown"
609#define igtlExceptionMacro(x) \
611 ::igtl::OStringStream igtlmsg; \
612 igtlmsg << "Debug: In " __FILE__ ", line " << __LINE__ << "\n" \
613 << this->GetNameOfClass() << " (" << this << "): " x \
615 std::cerr << igtlmsg.str(); \
618#define igtlErrorMacro(x) \
620 ::igtl::OStringStream igtlmsg; \
621 igtlmsg << "Debug: In " __FILE__ ", line " << __LINE__ << "\n" \
622 << this->GetNameOfClass() << " (" << this << "): " x \
624 std::cerr << igtlmsg.str(); \
628#ifdef IGTL_LEAN_AND_MEAN
629#define igtlGenericOutputMacro(x)
631#define igtlGenericOutputMacro(x) \
633 { ::igtl::OStringStream igtlmsg; \
634 igtlmsg << "WARNING: In " __FILE__ ", line " << __LINE__ << "\n" \
636 std::cerr << igtlmsg.str();} \
645#define igtlLogMacro( x, y) \
647 if (this->GetLogger() ) \
649 this->GetLogger()->Write(::igtl::LoggerBase::x, y); \
654#define igtlLogMacroStatic( obj, x, y) \
656 if (obj->GetLogger() ) \
658 obj->GetLogger()->Write(::igtl::LoggerBase::x, y); \
686#if defined(IGTL_LEGACY_REMOVE)
691# define igtlLegacyMacro(method) class igtlLegacyMethodRemoved
692#elif defined(IGTL_LEGACY_SILENT) || defined(IGTL_LEGACY_TEST) || defined(CSWIG)
694# define igtlLegacyMacro(method) method
698# if defined(__GNUC__) && !defined(__INTEL_COMPILER) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
699# define igtlLegacyMacro(method) method __attribute__((deprecated))
700# elif defined(_MSC_VER) && _MSC_VER >= 1300
701# define igtlLegacyMacro(method) __declspec(deprecated) method
703# define igtlLegacyMacro(method) method
720#if defined(IGTL_LEGACY_REMOVE) || defined(IGTL_LEGACY_SILENT)
721# define igtlLegacyBodyMacro(method, version)
722# define igtlLegacyReplaceBodyMacro(method, version, replace)
724# define igtlLegacyBodyMacro(method, version) \
725 igtlWarningMacro(#method " was deprecated for IGTL " #version " and will be removed in a future version.")
726# define igtlLegacyReplaceBodyMacro(method, version, replace) \
727 igtlWarningMacro(#method " was deprecated for IGTL " #version " and will be removed in a future version. Use " #replace " instead.")
730#if defined(__INTEL_COMPILER)
731# pragma warning (disable: 193)
744#if defined(__sgi) && defined(_COMPILER_VERSION)
745# define IGTL_TEMPLATE_DO_NOT_INSTANTIATE 1
746#elif defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 700
747# define IGTL_TEMPLATE_EXTERN 1
748#elif defined(__GNUC__) && __GNUC__ >= 3
749# define IGTL_TEMPLATE_EXTERN 1
750#elif defined(_MSC_VER) && _MSC_VER >= 1300
751# define IGTL_TEMPLATE_EXTERN 1
753#if !defined(IGTL_TEMPLATE_DO_NOT_INSTANTIATE)
754# define IGTL_TEMPLATE_DO_NOT_INSTANTIATE 0
756#if !defined(IGTL_TEMPLATE_EXTERN)
757# define IGTL_TEMPLATE_EXTERN 0
767#define IGTL_TEMPLATE_EXPORT(x) IGTL_TEMPLATE_EXPORT_DELAY(x)
768#define IGTL_TEMPLATE_EXPORT_DELAY(x) template IGTL_TEMPLATE_##x;
778#if IGTL_TEMPLATE_EXTERN
779# define IGTL_TEMPLATE_IMPORT_DELAY(x) extern template IGTL_TEMPLATE_##x;
780# if defined(_MSC_VER)
781# pragma warning (disable: 4231)
783#elif IGTL_TEMPLATE_DO_NOT_INSTANTIATE
784# define IGTL_TEMPLATE_IMPORT_DELAY(x) \
785 IGTL_TEMPLATE_IMPORT_IMPL(do_not_instantiate IGTL_TEMPLATE_##x)
786# define IGTL_TEMPLATE_IMPORT_IMPL(x) _Pragma(#x)
788#if defined(IGTL_TEMPLATE_IMPORT_DELAY)
789# define IGTL_TEMPLATE_IMPORT(x) IGTL_TEMPLATE_IMPORT_DELAY(x)
790# define IGTL_TEMPLATE_IMPORT_WORKS 1
792# define IGTL_TEMPLATE_IMPORT(x)
793# define IGTL_TEMPLATE_IMPORT_WORKS 0
852#define IGTL_EXPORT_TEMPLATE(EXPORT, c, x, y) \
853 IGTL_TEMPLATE_##c(IGTL_TEMPLATE_EXPORT, EXPORT IGTL_EMPTY, x, y)
854#define IGTL_IMPORT_TEMPLATE(EXPORT, c, x, y) \
855 IGTL_TEMPLATE_##c(IGTL_TEMPLATE_IMPORT, EXPORT IGTL_EMPTY, x, y)
862#define IGTL_TEMPLATE_1(x1) x1
863#define IGTL_TEMPLATE_2(x1,x2) x1,x2
864#define IGTL_TEMPLATE_3(x1,x2,x3) x1,x2,x3
865#define IGTL_TEMPLATE_4(x1,x2,x3,x4) x1,x2,x3,x4
866#define IGTL_TEMPLATE_5(x1,x2,x3,x4,x5) x1,x2,x3,x4,x5
867#define IGTL_TEMPLATE_6(x1,x2,x3,x4,x5,x6) x1,x2,x3,x4,x5,x6
868#define IGTL_TEMPLATE_7(x1,x2,x3,x4,x5,x6,x7) x1,x2,x3,x4,x5,x6,x7
869#define IGTL_TEMPLATE_8(x1,x2,x3,x4,x5,x6,x7,x8) x1,x2,x3,x4,x5,x6,x7,x8
870#define IGTL_TEMPLATE_9(x1,x2,x3,x4,x5,x6,x7,x8,x9) x1,x2,x3,x4,x5,x6,x7,x8,x9
880#if defined(IGTL_MANUAL_INSTANTIATION)
881# define IGTL_TEMPLATE_TXX 0
883# define IGTL_TEMPLATE_TXX !(IGTL_TEMPLATE_CXX || IGTL_TEMPLATE_TYPE)
892# undef IGTL_MANUAL_INSTANTIATION
893# define IGTL_MANUAL_INSTANTIATION
894# if defined(_MSC_VER)
895# pragma warning (disable: 4275)
896# pragma warning (disable: 4661)
903#define IGTL_EXPORT_IGTLCommon(c, x, n) \
904 IGTL_EXPORT_TEMPLATE(IGTLCommon_EXPORT, c, x, n)
905#define IGTL_IMPORT_IGTLCommon(c, x, n) \
906 IGTL_IMPORT_TEMPLATE(IGTLCommon_EXPORT, c, x, n)
921#if IGTL_TEMPLATE_IMPORT_WORKS && defined(IGTL_EXPLICIT_INSTANTIATION)
922# define IGTL_TEMPLATE_EXPLICIT !IGTL_TEMPLATE_CXX
924# define IGTL_TEMPLATE_EXPLICIT 0
935# if (((__GNUC__ == 2) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ >= 3))
936# define IGTL_NO_RETURN \
937 __attribute__ ((noreturn))
940# define IGTL_NO_RETURN
944#ifdef IGTL_USE_TEMPLATE_META_PROGRAMMING_LOOP_UNROLLING
956#define igtlFoorLoopAssignmentMacro(DestinationType,SourceType,DestinationElementType,DestinationArray,SourceArray,NumberOfIterations) \
957 for(unsigned int i=0;i < NumberOfIterations; ++i) \
959 DestinationArray[i] = static_cast< DestinationElementType >( SourceArray[i] ); \
970#define igtlFoorLoopRoundingAndAssignmentMacro(DestinationType,SourceType,DestinationElementType,DestinationArray,SourceArray,NumberOfIterations) \
971 for(unsigned int i=0;i < NumberOfIterations; ++i) \
973 DestinationArray[i] = static_cast< DestinationElementType >( vnl_math_rnd( SourceArray[i] ) ); \
The "igtl" namespace contains all OpenIGTLink classes. There are several nested namespaces within the...