28#ifndef itkMetaDataObject_h
29#define itkMetaDataObject_h
74template <
typename MetaDataObjectType>
87 itkFactorylessNewMacro(
Self);
107 const std::type_info &
115 const MetaDataObjectType &
131 Print(std::ostream & os)
const override;
137 return Self::EqualValues(lhs.m_MetaDataObjectValue, rhs.m_MetaDataObjectValue);
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{};
228 temp->SetMetaDataObjectValue(invalue);
229 Dictionary[key] = temp;
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"
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
344ITK_GCC_PRAGMA_DIAG_PUSH()
345ITK_GCC_PRAGMA_DIAG(ignored
"-Wattributes")
373ITK_GCC_PRAGMA_DIAG_POP()
376#undef ITKCommon_EXPORT_EXPLICIT
Light weight base class for most itk classes.
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
void EncapsulateMetaData(MetaDataDictionary &Dictionary, const std::string &key, const T &invalue)
bool ExposeMetaData(const MetaDataDictionary &Dictionary, const std::string key, T &outval)