ITK  5.4.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
27namespace itk
28{
47template <typename TElementIdentifier, typename TElement>
48class ITK_TEMPLATE_EXPORT ValarrayImageContainer
49 : public Object
50 , private std::valarray<TElement>
51{
52public:
58
60 using ElementIdentifier = TElementIdentifier;
61 using Element = TElement;
62
63private:
65 using ValarrayType = std::valarray<Element>;
66
67protected:
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 {}
86public:
88 itkNewMacro(Self);
89
91 itkOverrideGetNameOfClassMacro(ValarrayImageContainer);
92
94 TElement & operator[](const ElementIdentifier id) { return this->ValarrayType::operator[](id); }
95
97 const TElement & operator[](const ElementIdentifier id) const { return this->ValarrayType::operator[](id); }
98
101 TElement *
103 {
104 if (this->Size() > 0)
105 {
106 return &(this->ValarrayType::operator[](0));
107 }
108 else
109 {
110 return nullptr;
111 }
112 }
116 unsigned long
117 Size() const
118 {
119 return static_cast<unsigned long>(this->ValarrayType::size());
120 }
121
126 void
128 {
129 this->ValarrayType::resize(num);
130 }
131
135 void
137 {
138 this->ValarrayType::resize(this->ValarrayType::size());
139 }
140
142 void
144 {
145 this->ValarrayType::resize(0);
146 }
147
149 void
150 Fill(const TElement & value)
151 {
152 this->ValarrayType::operator=(value);
153 }
154
155public:
159 void
160 PrintSelf(std::ostream & os, Indent indent) const override
161 {
162 Object::PrintSelf(os, indent);
163 // Print out the pointer to bulk data memory. We use const_cast<> to
164 // cast away the constness so we can call GetBufferPointer()
165 os << indent << "Pointer: " << const_cast<ValarrayImageContainer *>(this)->GetBufferPointer() << std::endl;
168 os << indent << "Size: " << this->Size() << std::endl;
169 }
170};
171} // end namespace itk
172
173#endif
Control indentation during Print() invocation.
Definition: itkIndent.h:50
Light weight base class for most itk classes.
Base class for most ITK classes.
Definition: itkObject.h:62
void PrintSelf(std::ostream &os, Indent indent) const override
Defines a front-end to the std\::<valarray> container that conforms to the ImageContainerInterface.
TElement & operator[](const ElementIdentifier id)
void Fill(const TElement &value)
std::valarray< Element > ValarrayType
ValarrayImageContainer(unsigned long n, const Element &x)
void Reserve(ElementIdentifier num)
const TElement & operator[](const ElementIdentifier id) const
void PrintSelf(std::ostream &os, Indent indent) const override
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Represent a n-dimensional size (bounds) of a n-dimensional image.
Definition: itkSize.h:72