ORIGINAL
Loading...
Searching...
No Matches
transform.h
Go to the documentation of this file.
1#ifndef TRANSFORM_H
2#define TRANSFORM_H
3
4
5#include "allocator.h"
6#include "baseList.h"
7#include "cloneable.h"
8#include "maths.h"
9
16
17namespace original {
18
27 template<typename TYPE>
28 class transform : public cloneable {
29 protected:
35 virtual void apply(TYPE& t);
36
37 public:
41 ~transform() override = default;
42
47 transform* clone() const override;
48
54 virtual void operator()(TYPE& t);
55 };
56
64 template<typename TYPE>
65 class addOptTransform final : public transform<TYPE> {
66 TYPE t_;
67
72 void apply(TYPE &t) override;
73
74 public:
79 addOptTransform* clone() const override;
80
85 explicit addOptTransform(const TYPE& t);
86 };
87
95 template<typename TYPE>
96 class assignOptTransform final : public transform<TYPE> {
97 TYPE val_;
98
103 void apply(TYPE &t) override;
104
105 public:
110 assignOptTransform* clone() const override;
111
116 explicit assignOptTransform(const TYPE& val);
117 };
118
126 template<typename TYPE>
127 class multiOptTransform final : public transform<TYPE> {
128 TYPE t_;
129
134 void apply(TYPE &t) override;
135
136 public:
141 multiOptTransform* clone() const override;
142
147 explicit multiOptTransform(const TYPE& t);
148 };
149
157 template<typename TYPE>
158 class absTransform final : public transform<TYPE> {
163 void apply(TYPE &t) override;
164
165 public:
170 absTransform* clone() const override;
171
175 explicit absTransform() = default;
176 };
177
185 template<typename TYPE, typename ALLOC = allocator<TYPE>>
186 class copyTransform final : public transform<TYPE> {
187 baseList<TYPE, ALLOC>* container_;
188
193 void apply(TYPE &t) override;
194
195 public:
200 copyTransform* clone() const override;
201
207 };
208
209} // namespace original
210
211 template<typename TYPE>
213
214 template <typename TYPE>
216 {
217 return new transform(*this);
218 }
219
220 template<typename TYPE>
222 {
223 this->apply(t);
224 }
225
226 template<typename TYPE>
229
230 template <typename TYPE>
232 {
233 return new assignOptTransform(*this);
234 }
235
236 template<typename TYPE>
237 auto original::assignOptTransform<TYPE>::apply(TYPE& t) -> void
238 {
239 t = this->val_;
240 }
241
242 template<typename TYPE>
244
245 template <typename TYPE>
247 {
248 return new addOptTransform(*this);
249 }
250
251 template<typename TYPE>
252 auto original::addOptTransform<TYPE>::apply(TYPE& t) -> void
253 {
254 t = t + this->t_;
255 }
256
257 template<typename TYPE>
259
260 template <typename TYPE>
262 {
263 return new multiOptTransform(*this);
264 }
265
266 template<typename TYPE>
267 auto original::multiOptTransform<TYPE>::apply(TYPE& t) -> void
268 {
269 t = t * this->t_;
270 }
271
272 template <typename TYPE>
274 {
275 return new absTransform(*this);
276 }
277
278 template<typename TYPE>
279 auto original::absTransform<TYPE>::apply(TYPE& t) -> void
280 {
281 t = original::abs(t);
282 }
283
284 template<typename TYPE, typename ALLOC>
287
288 template<typename TYPE, typename ALLOC>
290 {
291 return new copyTransform(*this);
292 }
293
294 template<typename TYPE, typename ALLOC>
295 auto original::copyTransform<TYPE, ALLOC>::apply(TYPE& t) -> void
296 {
297 this->container_->add(t);
298 }
299
300#endif //TRANSFORM_H
Memory allocation interface and implementations.
Provides a base class for variable-size serial containers.
absTransform * clone() const override
Clones the absTransform object.
Definition transform.h:273
absTransform()=default
Default constructor for absTransform.
addOptTransform(const TYPE &t)
Constructs an addOptTransform with the specified value.
Definition transform.h:243
addOptTransform * clone() const override
Clones the addOptTransform object.
Definition transform.h:246
assignOptTransform * clone() const override
Clones the assignOptTransform object.
Definition transform.h:231
assignOptTransform(const TYPE &val)
Constructs an assignOptTransform with the specified value.
Definition transform.h:227
Base class for variable-size serial containers.
Definition baseList.h:43
cloneable()=default
Default constructor for cloneable.
Abstract base class for containers.
Definition container.h:28
copyTransform(baseList< TYPE, ALLOC > &container)
Constructs a copyTransform with the specified container.
Definition transform.h:285
copyTransform * clone() const override
Clones the copyTransform object.
Definition transform.h:289
multiOptTransform(const TYPE &t)
Constructs a multiOptTransform with the specified value.
Definition transform.h:258
multiOptTransform * clone() const override
Clones the multiOptTransform object.
Definition transform.h:261
Base class for transformation operations.
Definition transform.h:28
virtual void apply(TYPE &t)
Applies the transformation to the given element.
Definition transform.h:212
transform * clone() const override
Clones the transform object.
Definition transform.h:215
~transform() override=default
Virtual destructor for the transform class.
virtual void operator()(TYPE &t)
Applies the transformation to the given element.
Definition transform.h:221
Abstract base class for cloneable objects.
Mathematical utilities and constants.
Main namespace for the project Original.
Definition algorithms.h:21
TYPE abs(TYPE a)
Returns the absolute value of a given number.