28 #ifndef itkMetaDataObject_h
29 #define itkMetaDataObject_h
74 template <
typename MetaDataObjectType>
87 itkFactorylessNewMacro(
Self);
99 GetMetaDataObjectTypeName()
const override;
107 const std::type_info &
108 GetMetaDataObjectTypeInfo()
const override;
115 const MetaDataObjectType &
116 GetMetaDataObjectValue()
const;
124 SetMetaDataObjectValue(
const MetaDataObjectType & newValue);
131 Print(std::ostream & os)
const override;
144 return !(lhs == rhs);
154 template <
typename TValue>
156 Assign(TValue & target,
const TValue & source) -> decltype(target = source)
158 return target = source;
162 template <
typename TValue,
size_t VNumberOfElements>
164 Assign(TValue (&target)[VNumberOfElements],
const TValue (&source)[VNumberOfElements])
166 for (
size_t i = 0; i < VNumberOfElements; ++i)
168 Self::Assign(target[i], source[i]);
176 template <
typename TValue>
178 EqualValues(
const TValue & lhs,
const TValue & rhs) -> decltype(lhs == rhs)
184 template <
typename TValue,
size_t VNumberOfElements>
186 EqualValues(
const TValue (&lhs)[VNumberOfElements],
const TValue (&rhs)[VNumberOfElements])
188 for (
size_t i = 0; i < VNumberOfElements; ++i)
190 if (!Self::EqualValues(lhs[i], rhs[i]))
204 const auto metaDataObject = dynamic_cast<const Self *>(&metaDataObjectBase);
205 return (metaDataObject !=
nullptr) && (*
this == *metaDataObject);
213 MetaDataObjectType m_MetaDataObjectValue{};
225 template <
typename T>
230 temp->SetMetaDataObjectValue(invalue);
231 Dictionary[key] = temp;
235 template <
typename T>
251 template <
typename T>
255 auto keyIter = Dictionary.
Find(key);
256 if (keyIter == Dictionary.
End())
262 auto const *
const TempMetaDataObject =
dynamic_cast<MetaDataObject<T> const *
>(keyIter->second.GetPointer());
263 if (TempMetaDataObject ==
nullptr)
281 #define ITK_NATIVE_TYPE_METADATAPRINT(TYPE_NAME) \
283 void itk::MetaDataObject<TYPE_NAME>::Print(std::ostream & os) const \
285 os << this->m_MetaDataObjectValue << std::endl; \
296 #define ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(TYPE_NAME_PART1, TYPE_NAME_PART2) \
298 void itk::MetaDataObject<TYPE_NAME_PART1, TYPE_NAME_PART2>::Print(std::ostream & os) const \
300 this->m_MetaDataObjectValue->Print(os); \
310 #define ITK_IMAGE_TYPE_METADATAPRINT(STORAGE_TYPE) \
311 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 1>::Pointer) \
312 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 2>::Pointer) \
313 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 3>::Pointer) \
314 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 4>::Pointer) \
315 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 5>::Pointer) \
316 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 6>::Pointer) \
317 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 7>::Pointer) \
318 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 8>::Pointer)
320 #ifndef ITK_MANUAL_INSTANTIATION
321 # include "itkMetaDataObject.hxx"
324 #endif // itkMetaDataObject_h
327 #ifndef ITK_TEMPLATE_EXPLICIT_MetaDataObject
336 #if defined(ITKCommon_EXPORTS)
338 # define ITKCommon_EXPORT_EXPLICIT ITK_TEMPLATE_EXPORT
341 # define ITKCommon_EXPORT_EXPLICIT ITKCommon_EXPORT
346 ITK_GCC_PRAGMA_DIAG_PUSH()
347 ITK_GCC_PRAGMA_DIAG(ignored
"-Wattributes")
375 ITK_GCC_PRAGMA_DIAG_POP()
378 #undef ITKCommon_EXPORT_EXPLICIT