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 itkSimpleDataObjectDecorator_hxx
29 #define itkSimpleDataObjectDecorator_hxx
30 
31 #include "itkSimpleDataObjectDecorator.h"
32 #include "itkMath.h"
33 
34 namespace itk
35 {
36 /**
37  *
38  */
39 template< typename T >
40 SimpleDataObjectDecorator< T >
SimpleDataObjectDecorator()41 ::SimpleDataObjectDecorator()
42 {
43 #if defined( __GNUC__ ) && ( __GNUC__ > 6 )
44 ITK_GCC_PRAGMA_DIAG_PUSH()
45 ITK_GCC_PRAGMA_DIAG(ignored "-Wmaybe-uninitialized")
46 #endif // defined( __GNUC__ ) && ( __GNUC__ > 6 )
47   this->m_Component = ComponentType(); // initialize here to avoid Purify UMR
48 #if defined( __GNUC__ ) && ( __GNUC__ > 6 )
49 ITK_GCC_PRAGMA_DIAG_POP()
50 #endif // defined( __GNUC__ ) && ( __GNUC__ > 6 )
51   this->m_Initialized = false;         // Still needed since not all objects
52                                        // are initialized at construction time.
53                                        // for example the itkArray.
54 }
55 
56 /**
57  *
58  */
59 template< typename T >
60 void
61 SimpleDataObjectDecorator< T >
Set(const T & val)62 ::Set(const T & val)
63 {
64   if ( !this->m_Initialized || ( Math::NotExactlyEquals(this->m_Component, val) ) )
65     {
66     this->m_Component = val;
67     this->m_Initialized = true;
68     this->Modified();
69     }
70 }
71 
72 /**
73  *
74  */
75 template< typename T >
76 void
77 SimpleDataObjectDecorator< T >
PrintSelf(std::ostream & os,Indent indent) const78 ::PrintSelf(std::ostream & os, Indent indent) const
79 {
80   Superclass::PrintSelf(os, indent);
81   // This is necessary to avoid linker warnings on MacOS
82   #if !defined(ITK_PRIVATE_DYNAMIC_CAST)
83   os << indent << "Component  : unknown" << std::endl;
84   #else
85   os << indent << "Component  : " << typeid( this->m_Component ).name() << std::endl;
86   #endif
87   os << indent << "Initialized: " << this->m_Initialized << std::endl;
88 }
89 } // end namespace itk
90 
91 #endif
92