5
5
template <typename T>
6
6
class PropertyPrimitive : public Property {
7
7
public:
8
- PropertyPrimitive () {
9
- PropertyPrimitive (0 );
10
- }
11
- PropertyPrimitive (T v) : _value(v), _cloud_value(v) {}
12
- operator T () const {
13
- return _value;
14
- }
8
+ PropertyPrimitive (T v=0 ) : _value(v), _cloud_value(v) {}
9
+ PropertyPrimitive (PropertyPrimitive<T> &&) = default ;
10
+
11
+ PropertyPrimitive (const PropertyPrimitive<T>&) = delete ;
12
+
15
13
bool isDifferentFromCloud () override {
16
14
return _value != _cloud_value && (abs (float (_value - _cloud_value)) >= Property::_min_delta_property);
17
15
}
@@ -28,168 +26,58 @@ class PropertyPrimitive: public Property {
28
26
setAttribute (_cloud_value, " " );
29
27
}
30
28
31
- // modifiers
32
- PropertyPrimitive& operator =(T v) {
33
- _value = v;
34
- updateLocalTimestamp ();
29
+ inline PropertyPrimitive& operator =(const T& v) {
30
+ updateValue (v);
35
31
return *this ;
36
32
}
37
- PropertyPrimitive& operator =(PropertyPrimitive v) {
38
- return operator =((T)v);
39
- }
40
- PropertyPrimitive& operator +=(T v) {
41
- return operator =(_value += v);
42
- }
43
- PropertyPrimitive& operator -=(T v) {
44
- return operator =(_value -= v);
45
- }
46
- PropertyPrimitive& operator *=(T v) {
47
- return operator =(_value *= v);
48
- }
49
- PropertyPrimitive& operator /=(T v) {
50
- return operator =(_value /= v);
51
- }
52
- PropertyPrimitive& operator %=(T v) {
53
- return operator =(_value %= v);
54
- }
55
- PropertyPrimitive& operator ++() {
56
- return operator =(++_value);
57
- }
58
- PropertyPrimitive& operator --() {
59
- return operator =(--_value);
60
- }
61
- PropertyPrimitive operator ++(int ) {
62
- operator =(_value + 1 );
63
- return PropertyPrimitive (_value);
64
- }
65
- PropertyPrimitive operator --(int ) {
66
- operator =(_value - 1 );
67
- return PropertyPrimitive (_value);
68
- }
69
- PropertyPrimitive& operator &=(T v) {
70
- return operator =(_value &= v);
71
- }
72
- PropertyPrimitive& operator |=(T v) {
73
- return operator =(_value |= v);
74
- }
75
- PropertyPrimitive& operator ^=(T v) {
76
- return operator =(_value ^= v);
77
- }
78
- PropertyPrimitive& operator <<=(T v) {
79
- return operator =(_value <<= v);
80
- }
81
- PropertyPrimitive& operator >>=(T v) {
82
- return operator =(_value >>= v);
83
- }
84
33
85
- // accessors
86
- PropertyPrimitive operator +() const {
87
- return PropertyPrimitive (+_value);
88
- }
89
- PropertyPrimitive operator -() const {
90
- return PropertyPrimitive (-_value);
91
- }
92
- PropertyPrimitive operator !() const {
93
- return PropertyPrimitive (!_value);
94
- }
95
- PropertyPrimitive operator ~() const {
96
- return PropertyPrimitive (~_value);
34
+ inline PropertyPrimitive& operator =(const PropertyPrimitive &v) {
35
+ updateValue (v._value );
36
+ return *this ;
97
37
}
98
38
99
- // friends
100
- // TODO second parameter should not be T, but another template?
101
- friend PropertyPrimitive operator +(PropertyPrimitive iw, PropertyPrimitive v) {
102
- return iw += v; // FIXME this should return a new property primitive
103
- }
104
- friend PropertyPrimitive operator +(PropertyPrimitive iw, T v) { // TODO may not be required -> T can become property primitive
105
- return iw += v;
106
- }
107
- friend PropertyPrimitive operator +(T v, PropertyPrimitive iw) { // TODO may not be required -> T can become property primitive
108
- return PropertyPrimitive (v) += iw; // FIXME this doesn't seem to make sense
109
- }
110
- friend PropertyPrimitive operator -(PropertyPrimitive iw, PropertyPrimitive v) {
111
- return iw -= v;
112
- }
113
- friend PropertyPrimitive operator -(PropertyPrimitive iw, T v) {
114
- return iw -= v;
115
- }
116
- friend PropertyPrimitive operator -(T v, PropertyPrimitive iw) {
117
- return PropertyPrimitive (v) -= iw;
118
- }
119
- friend PropertyPrimitive operator *(PropertyPrimitive iw, PropertyPrimitive v) {
120
- return iw *= v;
121
- }
122
- friend PropertyPrimitive operator *(PropertyPrimitive iw, T v) {
123
- return iw *= v;
124
- }
125
- friend PropertyPrimitive operator *(T v, PropertyPrimitive iw) {
126
- return PropertyPrimitive (v) *= iw;
127
- }
128
- friend PropertyPrimitive operator /(PropertyPrimitive iw, PropertyPrimitive v) {
129
- return iw /= v;
130
- }
131
- friend PropertyPrimitive operator /(PropertyPrimitive iw, T v) {
132
- return iw /= v;
133
- }
134
- friend PropertyPrimitive operator /(T v, PropertyPrimitive iw) {
135
- return PropertyPrimitive (v) /= iw;
136
- }
137
- friend PropertyPrimitive operator %(PropertyPrimitive iw, PropertyPrimitive v) {
138
- return iw %= v;
139
- }
140
- friend PropertyPrimitive operator %(PropertyPrimitive iw, T v) {
141
- return iw %= v;
142
- }
143
- friend PropertyPrimitive operator %(T v, PropertyPrimitive iw) {
144
- return PropertyPrimitive (v) %= iw;
145
- }
146
- friend PropertyPrimitive operator &(PropertyPrimitive iw, PropertyPrimitive v) {
147
- return iw &= v;
148
- }
149
- friend PropertyPrimitive operator &(PropertyPrimitive iw, T v) {
150
- return iw &= v;
151
- }
152
- friend PropertyPrimitive operator &(T v, PropertyPrimitive iw) {
153
- return PropertyPrimitive (v) &= iw;
154
- }
155
- friend PropertyPrimitive operator |(PropertyPrimitive iw, PropertyPrimitive v) {
156
- return iw |= v;
157
- }
158
- friend PropertyPrimitive operator |(PropertyPrimitive iw, T v) {
159
- return iw |= v;
160
- }
161
- friend PropertyPrimitive operator |(T v, PropertyPrimitive iw) {
162
- return PropertyPrimitive (v) |= iw;
163
- }
164
- friend PropertyPrimitive operator ^(PropertyPrimitive iw, PropertyPrimitive v) {
165
- return iw ^= v;
166
- }
167
- friend PropertyPrimitive operator ^(PropertyPrimitive iw, T v) {
168
- return iw ^= v;
169
- }
170
- friend PropertyPrimitive operator ^(T v, PropertyPrimitive iw) {
171
- return PropertyPrimitive (v) ^= iw;
39
+ PropertyPrimitive& operator =(PropertyPrimitive &&) = default ;
40
+
41
+ inline operator T () const {
42
+ return _value;
172
43
}
173
- friend PropertyPrimitive operator <<(PropertyPrimitive iw, PropertyPrimitive v) {
174
- return iw <<= v;
44
+
45
+ inline PropertyPrimitive& operator +=(const T& v) {
46
+ updateValue (_value + v);
47
+ return *this ;
175
48
}
176
- friend PropertyPrimitive operator <<(PropertyPrimitive iw, T v) {
177
- return iw <<= v;
49
+
50
+ inline PropertyPrimitive& operator -=(const T& v) {
51
+ updateValue (_value - v);
52
+ return *this ;
178
53
}
179
- friend PropertyPrimitive operator <<(T v, PropertyPrimitive iw) {
180
- return PropertyPrimitive (v) <<= iw;
54
+
55
+ inline PropertyPrimitive& operator /=(const T& v) {
56
+ updateValue (_value / v);
57
+ return *this ;
181
58
}
182
- friend PropertyPrimitive operator >>(PropertyPrimitive iw, PropertyPrimitive v) {
183
- return iw >>= v;
59
+
60
+ inline PropertyPrimitive& operator *=(const T& v) {
61
+ updateValue (_value * v);
62
+ return *this ;
184
63
}
185
- friend PropertyPrimitive operator >>(PropertyPrimitive iw, T v) {
186
- return iw >>= v;
64
+
65
+ inline PropertyPrimitive& operator ++(int ) {
66
+ updateValue (_value + 1 );
67
+ return *this ;
187
68
}
188
- friend PropertyPrimitive operator >>(T v, PropertyPrimitive iw) {
189
- return PropertyPrimitive (v) >>= iw;
69
+
70
+ inline PropertyPrimitive& operator --(int ) {
71
+ updateValue (_value - 1 );
72
+ return *this ;
190
73
}
191
74
192
75
protected:
76
+ inline void updateValue (const T& v) {
77
+ _value = v;
78
+ updateLocalTimestamp ();
79
+ }
80
+
193
81
T _value,
194
82
_cloud_value;
195
83
};
0 commit comments