Skip to content

Commit d9e9c40

Browse files
fixup! Redefining Primitive kind property as template class
1 parent b283371 commit d9e9c40

File tree

1 file changed

+43
-155
lines changed

1 file changed

+43
-155
lines changed

src/property/types/PropertyPrimitive.h

Lines changed: 43 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@
55
template<typename T>
66
class PropertyPrimitive: public Property {
77
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+
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

19275
protected:
76+
inline void updateValue(const T& v) {
77+
_value = v;
78+
updateLocalTimestamp();
79+
}
80+
19381
T _value,
19482
_cloud_value;
19583
};

0 commit comments

Comments
 (0)