ITK  6.0.0
Insight Toolkit
itkValarrayImageContainer.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
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  * https://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 #ifndef itkValarrayImageContainer_h
19 #define itkValarrayImageContainer_h
20 
21 #include "itkObject.h"
22 #include "itkObjectFactory.h"
23 
24 #include <utility>
25 #include <valarray>
26 
27 namespace itk
28 {
47 template <typename TElementIdentifier, typename TElement>
48 class ITK_TEMPLATE_EXPORT ValarrayImageContainer
49  : public Object
50  , private std::valarray<TElement>
51 {
52 public:
55  using Superclass = Object;
58 
60  using ElementIdentifier = TElementIdentifier;
61  using Element = TElement;
62 
63 private:
65  using ValarrayType = std::valarray<Element>;
66 
67 protected:
73  : ValarrayType()
74  {}
75  ValarrayImageContainer(unsigned long n)
76  : ValarrayType(n)
77  {}
78  ValarrayImageContainer(unsigned long n, const Element & x)
79  : ValarrayType(n, x)
80  {}
82  : ValarrayType(r)
83  {}
86 public:
88  itkNewMacro(Self);
89 
91  itkOverrideGetNameOfClassMacro(ValarrayImageContainer);
92 
94  TElement &
96  {
97  return this->ValarrayType::operator[](id);
98  }
99 
101  const TElement &
103  {
104  return this->ValarrayType::operator[](id);
105  }
106 
109  TElement *
111  {
112  if (this->Size() > 0)
113  {
114  return &(this->ValarrayType::operator[](0));
115  }
116  else
117  {
118  return nullptr;
119  }
120  }
124  unsigned long
125  Size() const
126  {
127  return static_cast<unsigned long>(this->ValarrayType::size());
128  }
129 
134  void
136  {
137  this->ValarrayType::resize(num);
138  }
139 
143  void
145  {
146  this->ValarrayType::resize(this->ValarrayType::size());
147  }
148 
150  void
152  {
153  this->ValarrayType::resize(0);
154  }
155 
157  void
158  Fill(const TElement & value)
159  {
160  this->ValarrayType::operator=(value);
161  }
162 
163 public:
167  void
168  PrintSelf(std::ostream & os, Indent indent) const override
169  {
170  Object::PrintSelf(os, indent);
171  // Print out the pointer to bulk data memory. We use const_cast<> to
172  // cast away the constness so we can call GetBufferPointer()
173  os << indent << "Pointer: " << const_cast<ValarrayImageContainer *>(this)->GetBufferPointer() << std::endl;
176  os << indent << "Size: " << this->Size() << std::endl;
177  }
178 };
179 } // end namespace itk
180 
181 #endif
itk::ValarrayImageContainer::ValarrayImageContainer
ValarrayImageContainer()
Definition: itkValarrayImageContainer.h:72
itkObjectFactory.h
itk::ValarrayImageContainer::GetBufferPointer
TElement * GetBufferPointer()
Definition: itkValarrayImageContainer.h:110
itk::ValarrayImageContainer::ValarrayImageContainer
ValarrayImageContainer(unsigned long n, const Element &x)
Definition: itkValarrayImageContainer.h:78
itk::Size
Represent a n-dimensional size (bounds) of a n-dimensional image.
Definition: itkSize.h:69
itk::ValarrayImageContainer::ValarrayImageContainer
ValarrayImageContainer(unsigned long n)
Definition: itkValarrayImageContainer.h:75
itk::SmartPointer< Self >
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::ValarrayImageContainer
Defines a front-end to the std\::<valarray> container that conforms to the ImageContainerInterface.
Definition: itkValarrayImageContainer.h:48
itk::ValarrayImageContainer::Squeeze
void Squeeze()
Definition: itkValarrayImageContainer.h:144
itk::ValarrayImageContainer::operator[]
TElement & operator[](const ElementIdentifier id)
Definition: itkValarrayImageContainer.h:95
itk::ValarrayImageContainer::Reserve
void Reserve(ElementIdentifier num)
Definition: itkValarrayImageContainer.h:135
itk::LightObject
Light weight base class for most itk classes.
Definition: itkLightObject.h:55
itk::ValarrayImageContainer::ValarrayImageContainer
ValarrayImageContainer(const Self &r)
Definition: itkValarrayImageContainer.h:81
itk::ValarrayImageContainer::Element
TElement Element
Definition: itkValarrayImageContainer.h:61
itk::ValarrayImageContainer::ElementIdentifier
TElementIdentifier ElementIdentifier
Definition: itkValarrayImageContainer.h:60
itk::ValarrayImageContainer::Size
unsigned long Size() const
Definition: itkValarrayImageContainer.h:125
itk::ValarrayImageContainer::operator[]
const TElement & operator[](const ElementIdentifier id) const
Definition: itkValarrayImageContainer.h:102
itk::ValarrayImageContainer::Fill
void Fill(const TElement &value)
Definition: itkValarrayImageContainer.h:158
itkObject.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnatomicalOrientation.h:29
itk::Object
Base class for most ITK classes.
Definition: itkObject.h:61
itk::ValarrayImageContainer::PrintSelf
void PrintSelf(std::ostream &os, Indent indent) const override
Definition: itkValarrayImageContainer.h:168
AddImageFilter
Definition: itkAddImageFilter.h:81
itk::ValarrayImageContainer::Initialize
void Initialize()
Definition: itkValarrayImageContainer.h:151
itk::Object::PrintSelf
void PrintSelf(std::ostream &os, Indent indent) const override
itk::ValarrayImageContainer::ValarrayType
std::valarray< Element > ValarrayType
Definition: itkValarrayImageContainer.h:65