1 /*=========================================================================
2  *
3  *  Copyright Insight Software Consortium
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *         http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *=========================================================================*/
18 /*=========================================================================
19  *
20  *  Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21  *
22  *  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23  *
24  *  For complete copyright, license and disclaimer of warranty information
25  *  please refer to the NOTICE file at the top of the ITK source tree.
26  *
27  *=========================================================================*/
28 #ifndef itkMetaDataObjectBase_h
29 #define itkMetaDataObjectBase_h
30 
31 #include "itkLightObject.h"
32 #include <typeinfo>
33 #include <iostream>
34 
35 namespace itk
36 {
37 /** \class MetaDataObjectBase
38  * \brief The common interface for MetaDataObject's.
39  *
40  * This class is intended as the value part
41  * of the (key,value) pair to be stored in
42  * a MetaDataDictionary
43  *
44  * \author Hans J. Johnson
45  * \ingroup ITKCommon
46  */
47 class ITKCommon_EXPORT MetaDataObjectBase: public LightObject
48 {
49 public:
50   ITK_DISALLOW_COPY_AND_ASSIGN(MetaDataObjectBase);
51 
52   /** Smart pointer type alias support */
53   using Self = MetaDataObjectBase;
54   using Superclass = LightObject;
55   using Pointer = SmartPointer< Self >;
56   using ConstPointer = SmartPointer< const Self >;
57 
58   /** Run-time type information (and related methods). */
59   itkTypeMacro(MetaDataObjectBase, LightObject);
60 
61   /**
62    * \author Hans J. Johnson
63    * \return A pointer to a const char array containing the unique type name.
64    */
65   virtual const char * GetMetaDataObjectTypeName() const;
66 
67   /**
68    * \author Hans J. Johnson
69    * \return A constant reference to a std::type_info object
70    */
71   virtual const std::type_info & GetMetaDataObjectTypeInfo() const;
72 
73   /**
74    * Defines the default behavior for printing out this element
75    * \param os An output stream
76    */
77   virtual void Print( std::ostream & os ) const;
78 
79 protected:
80   MetaDataObjectBase();
81   ~MetaDataObjectBase() override;
82 };
83 }
84 
85 #endif //itkMetaDataObjectBase_h
86