55template <typename T>
66class PropertyPrimitive : public Property {
77public:
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+
1513 bool isDifferentFromCloud () override {
1614 return _value != _cloud_value && (abs (float (_value - _cloud_value)) >= Property::_min_delta_property);
1715 }
@@ -28,168 +26,58 @@ class PropertyPrimitive: public Property {
2826 setAttribute (_cloud_value, " " );
2927 }
3028
31- // modifiers
32- PropertyPrimitive& operator =(T v) {
33- _value = v;
34- updateLocalTimestamp ();
29+ inline PropertyPrimitive& operator =(const T& v) {
30+ updateValue (v);
3531 return *this ;
3632 }
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- }
8433
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 ;
9737 }
9838
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;
17243 }
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 ;
17548 }
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 ;
17853 }
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 ;
18158 }
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 ;
18463 }
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 ;
18768 }
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 ;
19073 }
19174
19275protected:
76+ inline void updateValue (const T& v) {
77+ _value = v;
78+ updateLocalTimestamp ();
79+ }
80+
19381 T _value,
19482 _cloud_value;
19583};
0 commit comments