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{};
223 template <
typename T>
228 temp->SetMetaDataObjectValue(invalue);
229 Dictionary[key] = temp;
233 template <
typename T>
249 template <
typename T>
253 auto keyIter = Dictionary.
Find(key);
254 if (keyIter == Dictionary.
End())
260 auto const *
const TempMetaDataObject =
dynamic_cast<MetaDataObject<T> const *
>(keyIter->second.GetPointer());
261 if (TempMetaDataObject ==
nullptr)
279 #define ITK_NATIVE_TYPE_METADATAPRINT(TYPE_NAME) \
281 void itk::MetaDataObject<TYPE_NAME>::Print(std::ostream & os) const \
283 os << this->m_MetaDataObjectValue << std::endl; \
294 #define ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(TYPE_NAME_PART1, TYPE_NAME_PART2) \
296 void itk::MetaDataObject<TYPE_NAME_PART1, TYPE_NAME_PART2>::Print(std::ostream & os) const \
298 this->m_MetaDataObjectValue->Print(os); \
308 #define ITK_IMAGE_TYPE_METADATAPRINT(STORAGE_TYPE) \
309 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 1>::Pointer) \
310 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 2>::Pointer) \
311 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 3>::Pointer) \
312 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 4>::Pointer) \
313 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 5>::Pointer) \
314 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 6>::Pointer) \
315 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 7>::Pointer) \
316 ITK_OBJECT_TYPE_METADATAPRINT_1COMMA(itk::Image<STORAGE_TYPE, 8>::Pointer)
318 #ifndef ITK_MANUAL_INSTANTIATION
319 # include "itkMetaDataObject.hxx"
322 #endif // itkMetaDataObject_h
325 #ifndef ITK_TEMPLATE_EXPLICIT_MetaDataObject
334 #if defined(ITKCommon_EXPORTS)
336 # define ITKCommon_EXPORT_EXPLICIT ITK_TEMPLATE_EXPORT
339 # define ITKCommon_EXPORT_EXPLICIT ITKCommon_EXPORT
344 ITK_GCC_PRAGMA_DIAG_PUSH()
345 ITK_GCC_PRAGMA_DIAG(ignored
"-Wattributes")
373 ITK_GCC_PRAGMA_DIAG_POP()
376 #undef ITKCommon_EXPORT_EXPLICIT