4 #include "traced-callback.h"
11 #define TRACED_VALUE_DEBUG(x)
21 TracedValue (const TracedValue &o)
23 TracedValue (const T &v)
28 TracedValue &operator = (const TracedValue &o) {
29 TRACED_VALUE_DEBUG ("x=");
33 TracedValue (const Integer &value)
34 : m_v (value.Get ()) {}
35 operator Integer () const {
38 TracedValue (const Uinteger &value)
39 : m_v (value.Get ()) {}
40 operator Uinteger () const {
41 return Uinteger (m_v);
43 TracedValue (const Boolean &value)
44 : m_v (value.Get ()) {}
45 operator Boolean () const {
48 TracedValue (const Enum &value)
49 : m_v (value.Get ()) {}
50 operator Enum () const {
53 void Connect (const CallbackBase &cb) {
56 void ConnectWithContext (const CallbackBase &cb, std::string path) {
57 m_cb.ConnectWithContext (cb, path);
59 void Disconnect (const CallbackBase &cb) {
62 void Set (const T &v) {
72 TracedValue &operator++ () {
73 TRACED_VALUE_DEBUG ("++x");
79 TracedValue &operator-- () {
80 TRACED_VALUE_DEBUG ("--x");
86 TracedValue operator++ (int) {
87 TRACED_VALUE_DEBUG ("x++");
88 TracedValue old (*this);
94 TracedValue operator-- (int) {
95 TRACED_VALUE_DEBUG ("x--");
96 TracedValue old (*this);
104 TracedCallback<T,T> m_cb;
107 template <typename T, typename U>
108 bool operator == (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
110 TRACED_VALUE_DEBUG ("x==x");
111 return lhs.Get () == rhs.Get ();
113 template <typename T, typename U>
114 bool operator == (const TracedValue<T> &lhs, const U &rhs)
116 TRACED_VALUE_DEBUG ("x==");
117 return lhs.Get () == rhs;
119 template <typename T, typename U>
120 bool operator == (const U &lhs, const TracedValue<T> &rhs)
122 TRACED_VALUE_DEBUG ("==x");
123 return lhs == rhs.Get ();
126 template <typename T, typename U>
127 bool operator != (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
129 TRACED_VALUE_DEBUG ("x!=x");
130 return lhs.Get () != rhs.Get ();
132 template <typename T, typename U>
133 bool operator != (const TracedValue<T> &lhs, const U &rhs)
135 TRACED_VALUE_DEBUG ("x!=");
136 return lhs.Get () != rhs;
138 template <typename T, typename U>
139 bool operator != (const U &lhs, const TracedValue<T> &rhs)
141 TRACED_VALUE_DEBUG ("!=x");
142 return lhs != rhs.Get ();
145 template <typename T, typename U>
146 bool operator <= (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
148 TRACED_VALUE_DEBUG ("x<=x");
149 return lhs.Get () <= rhs.Get ();
151 template <typename T, typename U>
152 bool operator <= (const TracedValue<T> &lhs, const U &rhs)
154 TRACED_VALUE_DEBUG ("x<=");
155 return lhs.Get () <= rhs;
157 template <typename T, typename U>
158 bool operator <= (const U &lhs, const TracedValue<T> &rhs)
160 TRACED_VALUE_DEBUG ("<=x");
161 return lhs <= rhs.Get ();
163 template <typename T, typename U>
164 bool operator >= (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
166 TRACED_VALUE_DEBUG ("x>=x");
167 return lhs.Get () >= rhs.Get ();
169 template <typename T, typename U>
170 bool operator >= (const TracedValue<T> &lhs, const U &rhs)
172 TRACED_VALUE_DEBUG ("x>=");
173 return lhs.Get () >= rhs;
175 template <typename T, typename U>
176 bool operator >= (const U &lhs, const TracedValue<T> &rhs)
178 TRACED_VALUE_DEBUG (">=x");
179 return lhs >= rhs.Get ();
182 template <typename T, typename U>
183 bool operator < (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
185 TRACED_VALUE_DEBUG ("x<x");
186 return lhs.Get () < rhs.Get ();
188 template <typename T, typename U>
189 bool operator < (const TracedValue<T> &lhs, const U &rhs)
191 TRACED_VALUE_DEBUG ("x<");
192 return lhs.Get () < rhs;
194 template <typename T, typename U>
195 bool operator < (const U &lhs, const TracedValue<T> &rhs)
197 TRACED_VALUE_DEBUG ("<x");
198 return lhs < rhs.Get ();
200 template <typename T, typename U>
201 bool operator > (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
203 TRACED_VALUE_DEBUG ("x>x");
204 return lhs.Get () > rhs.Get ();
206 template <typename T, typename U>
207 bool operator > (const TracedValue<T> &lhs, const U &rhs)
209 TRACED_VALUE_DEBUG ("x>");
210 return lhs.Get () > rhs;
212 template <typename T, typename U>
213 bool operator > (const U &lhs, const TracedValue<T> &rhs)
215 TRACED_VALUE_DEBUG (">x");
216 return lhs > rhs.Get ();
218 template <typename T, typename U>
219 TracedValue<T> &operator += (TracedValue<T> &lhs, const U &rhs) {
220 TRACED_VALUE_DEBUG ("x+=");
226 template <typename T, typename U>
227 TracedValue<T> &operator -= (TracedValue<T> &lhs, const U &rhs) {
228 TRACED_VALUE_DEBUG ("x-=");
234 template <typename T, typename U>
235 TracedValue<T> &operator *= (TracedValue<T> &lhs, const U &rhs) {
236 TRACED_VALUE_DEBUG ("x*=");
242 template <typename T, typename U>
243 TracedValue<T> &operator /= (TracedValue<T> &lhs, const U &rhs) {
244 TRACED_VALUE_DEBUG ("x/=");
250 template <typename T, typename U>
251 TracedValue<T> &operator %= (TracedValue<T> &lhs, const U &rhs) {
252 TRACED_VALUE_DEBUG ("x%=");
258 template <typename T, typename U>
259 TracedValue<T> &operator <<= (TracedValue<T> &lhs, const U &rhs) {
260 TRACED_VALUE_DEBUG ("x<<=");
266 template <typename T, typename U>
267 TracedValue<T> &operator >>= (TracedValue<T> &lhs, const U &rhs) {
268 TRACED_VALUE_DEBUG ("x>>=");
274 template <typename T, typename U>
275 TracedValue<T> &operator &= (TracedValue<T> &lhs, const U &rhs) {
276 TRACED_VALUE_DEBUG ("x&=");
282 template <typename T, typename U>
283 TracedValue<T> &operator |= (TracedValue<T> &lhs, const U &rhs) {
284 TRACED_VALUE_DEBUG ("x|=");
290 template <typename T, typename U>
291 TracedValue<T> &operator ^= (TracedValue<T> &lhs, const U &rhs) {
292 TRACED_VALUE_DEBUG ("x^=");
298 template <typename T, typename U>
299 TracedValue<T> operator + (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
300 TRACED_VALUE_DEBUG ("x+x");
301 return TracedValue<T> (lhs.Get () + rhs.Get ());
303 template <typename T, typename U>
304 TracedValue<T> operator + (const TracedValue<T> &lhs, const U &rhs) {
305 TRACED_VALUE_DEBUG ("x+");
306 return TracedValue<T> (lhs.Get () + rhs);
308 template <typename T, typename U>
309 TracedValue<T> operator + (const U &lhs, const TracedValue<T> &rhs) {
310 TRACED_VALUE_DEBUG ("+x");
311 return TracedValue<T> (lhs + rhs.Get ());
314 template <typename T, typename U>
315 TracedValue<T> operator - (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
316 TRACED_VALUE_DEBUG ("x-x");
317 return TracedValue<T> (lhs.Get () - rhs.Get ());
319 template <typename T, typename U>
320 TracedValue<T> operator - (const TracedValue<T> &lhs, const U &rhs) {
321 TRACED_VALUE_DEBUG ("x-");
322 return TracedValue<T> (lhs.Get () - rhs);
324 template <typename T, typename U>
325 TracedValue<T> operator - (const U &lhs, const TracedValue<T> &rhs) {
326 TRACED_VALUE_DEBUG ("-x");
327 return TracedValue<T> (lhs - rhs.Get ());
330 template <typename T, typename U>
331 TracedValue<T> operator * (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
332 TRACED_VALUE_DEBUG ("x*x");
333 return TracedValue<T> (lhs.Get () * rhs.Get ());
335 template <typename T, typename U>
336 TracedValue<T> operator * (const TracedValue<T> &lhs, const U &rhs) {
337 TRACED_VALUE_DEBUG ("x*");
338 return TracedValue<T> (lhs.Get () * rhs);
340 template <typename T, typename U>
341 TracedValue<T> operator * (const U &lhs, const TracedValue<T> &rhs) {
342 TRACED_VALUE_DEBUG ("*x");
343 return TracedValue<T> (lhs - rhs.Get ());
346 template <typename T, typename U>
347 TracedValue<T> operator / (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
348 TRACED_VALUE_DEBUG ("x/x");
349 return TracedValue<T> (lhs.Get () / rhs.Get ());
351 template <typename T, typename U>
352 TracedValue<T> operator / (const TracedValue<T> &lhs, const U &rhs) {
353 TRACED_VALUE_DEBUG ("x/");
354 return TracedValue<T> (lhs.Get () / rhs);
356 template <typename T, typename U>
357 TracedValue<T> operator / (const U &lhs, const TracedValue<T> &rhs) {
358 TRACED_VALUE_DEBUG ("/x");
359 return TracedValue<T> (lhs / rhs.Get ());
362 template <typename T, typename U>
363 TracedValue<T> operator % (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
364 TRACED_VALUE_DEBUG ("x%x");
365 return TracedValue<T> (lhs.Get () % rhs.Get ());
367 template <typename T, typename U>
368 TracedValue<T> operator % (const TracedValue<T> &lhs, const U &rhs) {
369 TRACED_VALUE_DEBUG ("x%");
370 return TracedValue<T> (lhs.Get () % rhs);
372 template <typename T, typename U>
373 TracedValue<T> operator % (const U &lhs, const TracedValue<T> &rhs) {
374 TRACED_VALUE_DEBUG ("%x");
375 return TracedValue<T> (lhs % rhs.Get ());
378 template <typename T, typename U>
379 TracedValue<T> operator ^ (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
380 TRACED_VALUE_DEBUG ("x^x");
381 return TracedValue<T> (lhs.Get () ^ rhs.Get ());
383 template <typename T, typename U>
384 TracedValue<T> operator ^ (const TracedValue<T> &lhs, const U &rhs) {
385 TRACED_VALUE_DEBUG ("x^");
386 return TracedValue<T> (lhs.Get () ^ rhs);
388 template <typename T, typename U>
389 TracedValue<T> operator ^ (const U &lhs, const TracedValue<T> &rhs) {
390 TRACED_VALUE_DEBUG ("^x");
391 return TracedValue<T> (lhs ^ rhs.Get ());
394 template <typename T, typename U>
395 TracedValue<T> operator | (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
396 TRACED_VALUE_DEBUG ("x|x");
397 return TracedValue<T> (lhs.Get () | rhs.Get ());
399 template <typename T, typename U>
400 TracedValue<T> operator | (const TracedValue<T> &lhs, const U &rhs) {
401 TRACED_VALUE_DEBUG ("x|");
402 return TracedValue<T> (lhs.Get () | rhs);
404 template <typename T, typename U>
405 TracedValue<T> operator | (const U &lhs, const TracedValue<T> &rhs) {
406 TRACED_VALUE_DEBUG ("|x");
407 return TracedValue<T> (lhs | rhs.Get ());
410 template <typename T, typename U>
411 TracedValue<T> operator & (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
412 TRACED_VALUE_DEBUG ("x&x");
413 return TracedValue<T> (lhs.Get () & rhs.Get ());
415 template <typename T, typename U>
416 TracedValue<T> operator & (const TracedValue<T> &lhs, const U &rhs) {
417 TRACED_VALUE_DEBUG ("x&");
418 return TracedValue<T> (lhs.Get () & rhs);
420 template <typename T, typename U>
421 TracedValue<T> operator & (const U &lhs, const TracedValue<T> &rhs) {
422 TRACED_VALUE_DEBUG ("&x");
423 return TracedValue<T> (lhs & rhs.Get ());
426 template <typename T, typename U>
427 TracedValue<T> operator << (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
428 TRACED_VALUE_DEBUG ("x<<x");
429 return TracedValue<T> (lhs.Get () << rhs.Get ());
431 template <typename T, typename U>
432 TracedValue<T> operator << (const TracedValue<T> &lhs, const U &rhs) {
433 TRACED_VALUE_DEBUG ("x<<");
434 return TracedValue<T> (lhs.Get () << rhs);
436 template <typename T, typename U>
437 TracedValue<T> operator << (const U &lhs, const TracedValue<T> &rhs) {
438 TRACED_VALUE_DEBUG ("<<x");
439 return TracedValue<T> (lhs << rhs.Get ());
442 template <typename T, typename U>
443 TracedValue<T> operator >> (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
444 TRACED_VALUE_DEBUG ("x>>x");
445 return TracedValue<T> (lhs.Get () >> rhs.Get ());
447 template <typename T, typename U>
448 TracedValue<T> operator >> (const TracedValue<T> &lhs, const U &rhs) {
449 TRACED_VALUE_DEBUG ("x>>");
450 return TracedValue<T> (lhs.Get () >> rhs);
452 template <typename T, typename U>
453 TracedValue<T> operator >> (const U &lhs, const TracedValue<T> &rhs) {
454 TRACED_VALUE_DEBUG (">>x");
455 return TracedValue<T> (lhs >> rhs.Get ());
459 template <typename T>
460 TracedValue<T> operator + (const TracedValue<T> &lhs) {
461 TRACED_VALUE_DEBUG ("(+x)");
462 return TracedValue<T> (+lhs.Get ());
464 template <typename T>
465 TracedValue<T> operator - (const TracedValue<T> &lhs) {
466 TRACED_VALUE_DEBUG ("(-x)");
467 return TracedValue<T> (-lhs.Get ());
469 template <typename T>
470 TracedValue<T> operator ~ (const TracedValue<T> &lhs) {
471 TRACED_VALUE_DEBUG ("(~x)");
472 return TracedValue<T> (~lhs.Get ());
474 template <typename T>
475 TracedValue<T> operator ! (const TracedValue<T> &lhs) {
476 TRACED_VALUE_DEBUG ("(!x)");
477 return TracedValue<T> (!lhs.Get ());
483 #endif /* TRACED_VALUE_H */