ORIGINAL
Loading...
Searching...
No Matches
transform.h
1#ifndef TRANSFORM_H
2#define TRANSFORM_H
3
4#include "baseList.h"
5#include "cloneable.h"
6#include "maths.h"
7
8namespace original{
9
10 template<typename TYPE>
11 class transform : public cloneable {
12 protected:
13 virtual void apply(TYPE& t);
14 public:
15 ~transform() override = default;
16 transform* clone() const override;
17 explicit transform() = default;
18 virtual void operator()(TYPE& t);
19 };
20
21 template<typename TYPE>
22 class addOptTransform final : public transform<TYPE>{
23 TYPE t_;
24 void apply(TYPE &t) override;
25 public:
26 addOptTransform* clone() const override;
27 explicit addOptTransform(const TYPE& t);
28 };
29
30 template<typename TYPE>
31 class assignOptTransform final : public transform<TYPE>{
32 TYPE val_;
33 void apply(TYPE &t) override;
34 public:
35 assignOptTransform* clone() const override;
36 explicit assignOptTransform(const TYPE& val);
37 };
38
39 template<typename TYPE>
40 class multiOptTransform final : public transform<TYPE>{
41 TYPE t_;
42 void apply(TYPE &t) override;
43 public:
44 multiOptTransform* clone() const override;
45 explicit multiOptTransform(const TYPE& t);
46 };
47
48 template<typename TYPE>
49 class absTransform final : public transform<TYPE>{
50 void apply(TYPE &t) override;
51 public:
52 absTransform* clone() const override;
53 explicit absTransform() = default;
54 };
55
56 template<typename TYPE>
57 class copyTransform final : public transform<TYPE>{
58 baseList<TYPE>* container_;
59 void apply(TYPE &t) override;
60 public:
61 copyTransform* clone() const override;
62 explicit copyTransform(baseList<TYPE>& container);
63 };
64
65} // namespace original
66
67 template<typename TYPE>
68 void original::transform<TYPE>::apply(TYPE&) {}
69
70 template <typename TYPE>
71 auto original::transform<TYPE>::clone() const -> transform*
72 {
73 return new transform(*this);
74 }
75
76 template<typename TYPE>
77 auto original::transform<TYPE>::operator()(TYPE& t) -> void
78 {
79 this->apply(t);
80 }
81
82 template<typename TYPE>
83 original::assignOptTransform<TYPE>::assignOptTransform(const TYPE& val)
84 : val_(val) {}
85
86 template <typename TYPE>
87 auto original::assignOptTransform<TYPE>::clone() const -> assignOptTransform*
88 {
89 return new assignOptTransform(*this);
90 }
91
92 template<typename TYPE>
93 auto original::assignOptTransform<TYPE>::apply(TYPE& t) -> void
94 {
95 t = this->val_;
96 }
97
98 template<typename TYPE>
99 original::addOptTransform<TYPE>::addOptTransform(const TYPE &t) : t_(t) {}
100
101 template <typename TYPE>
102 auto original::addOptTransform<TYPE>::clone() const -> addOptTransform*
103 {
104 return new addOptTransform(*this);
105 }
106
107 template<typename TYPE>
108 auto original::addOptTransform<TYPE>::apply(TYPE& t) -> void
109 {
110 t = t + this->t_;
111 }
112
113 template<typename TYPE>
114 original::multiOptTransform<TYPE>::multiOptTransform(const TYPE &t) : t_(t) {}
115
116 template <typename TYPE>
117 auto original::multiOptTransform<TYPE>::clone() const -> multiOptTransform*
118 {
119 return new multiOptTransform(*this);
120 }
121
122 template<typename TYPE>
123 auto original::multiOptTransform<TYPE>::apply(TYPE& t) -> void
124 {
125 t = t * this->t_;
126 }
127
128 template <typename TYPE>
129 auto original::absTransform<TYPE>::clone() const -> absTransform*
130 {
131 return new absTransform(*this);
132 }
133
134 template<typename TYPE>
135 auto original::absTransform<TYPE>::apply(TYPE& t) -> void
136 {
137 t = original::abs(t);
138 }
139
140 template<typename TYPE>
141 original::copyTransform<TYPE>::copyTransform(baseList<TYPE>& container)
142 : container_(&container) {}
143
144 template <typename TYPE>
145 auto original::copyTransform<TYPE>::clone() const -> copyTransform*
146 {
147 return new copyTransform(*this);
148 }
149
150 template<typename TYPE>
151 auto original::copyTransform<TYPE>::apply(TYPE& t) -> void
152 {
153 this->container_->add(t);
154 }
155
156#endif //TRANSFORM_H
Definition transform.h:49
Definition transform.h:22
Definition transform.h:31
Definition baseList.h:7
Definition container.h:10
Definition transform.h:57
Definition transform.h:40