20 #ifndef TRACED_VALUE_H
21 #define TRACED_VALUE_H
23 #include "traced-callback.h"
30 #define TRACED_VALUE_DEBUG(x)
66 TRACED_VALUE_DEBUG (
"x=");
81 void Connect (
const CallbackBase &cb, std::string path) {
87 void Disconnect (
const CallbackBase &cb, std::string path) {
90 void Set (
const T &v) {
101 TRACED_VALUE_DEBUG (
"++x");
108 TRACED_VALUE_DEBUG (
"--x");
115 TRACED_VALUE_DEBUG (
"x++");
123 TRACED_VALUE_DEBUG (
"x--");
135 template <
typename T>
136 std::ostream& operator << (std::ostream& os, const TracedValue<T>& rhs)
138 return os<<rhs.Get ();
141 template <
typename T,
typename U>
142 bool operator == (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs)
144 TRACED_VALUE_DEBUG (
"x==x");
145 return lhs.Get () == rhs.Get ();
147 template <
typename T,
typename U>
148 bool operator == (
const TracedValue<T> &lhs,
const U &rhs)
150 TRACED_VALUE_DEBUG (
"x==");
151 return lhs.Get () == rhs;
153 template <
typename T,
typename U>
154 bool operator == (
const U &lhs,
const TracedValue<T> &rhs)
156 TRACED_VALUE_DEBUG (
"==x");
157 return lhs == rhs.Get ();
160 template <
typename T,
typename U>
161 bool operator != (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs)
163 TRACED_VALUE_DEBUG (
"x!=x");
164 return lhs.Get () != rhs.Get ();
166 template <
typename T,
typename U>
167 bool operator != (
const TracedValue<T> &lhs,
const U &rhs)
169 TRACED_VALUE_DEBUG (
"x!=");
170 return lhs.Get () != rhs;
172 template <
typename T,
typename U>
173 bool operator != (
const U &lhs,
const TracedValue<T> &rhs)
175 TRACED_VALUE_DEBUG (
"!=x");
176 return lhs != rhs.Get ();
179 template <
typename T,
typename U>
180 bool operator <= (const TracedValue<T> &lhs,
const TracedValue<U> &rhs)
182 TRACED_VALUE_DEBUG (
"x<=x");
183 return lhs.Get () <= rhs.Get ();
185 template <
typename T,
typename U>
186 bool operator <= (const TracedValue<T> &lhs,
const U &rhs)
188 TRACED_VALUE_DEBUG (
"x<=");
189 return lhs.Get () <= rhs;
191 template <
typename T,
typename U>
192 bool operator <= (const U &lhs, const TracedValue<T> &rhs)
194 TRACED_VALUE_DEBUG (
"<=x");
195 return lhs <= rhs.Get ();
197 template <
typename T,
typename U>
198 bool operator >= (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs)
200 TRACED_VALUE_DEBUG (
"x>=x");
201 return lhs.Get () >= rhs.Get ();
203 template <
typename T,
typename U>
204 bool operator >= (
const TracedValue<T> &lhs,
const U &rhs)
206 TRACED_VALUE_DEBUG (
"x>=");
207 return lhs.Get () >= rhs;
209 template <
typename T,
typename U>
210 bool operator >= (
const U &lhs,
const TracedValue<T> &rhs)
212 TRACED_VALUE_DEBUG (
">=x");
213 return lhs >= rhs.Get ();
216 template <
typename T,
typename U>
217 bool operator < (const TracedValue<T> &lhs,
const TracedValue<U> &rhs)
219 TRACED_VALUE_DEBUG (
"x<x");
220 return lhs.Get () < rhs.Get ();
222 template <
typename T,
typename U>
223 bool operator < (const TracedValue<T> &lhs,
const U &rhs)
225 TRACED_VALUE_DEBUG (
"x<");
226 return lhs.Get () < rhs;
228 template <
typename T,
typename U>
229 bool operator < (const U &lhs, const TracedValue<T> &rhs)
231 TRACED_VALUE_DEBUG (
"<x");
232 return lhs < rhs.Get ();
234 template <
typename T,
typename U>
235 bool operator > (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs)
237 TRACED_VALUE_DEBUG (
"x>x");
238 return lhs.Get () > rhs.Get ();
240 template <
typename T,
typename U>
241 bool operator > (
const TracedValue<T> &lhs,
const U &rhs)
243 TRACED_VALUE_DEBUG (
"x>");
244 return lhs.Get () > rhs;
246 template <
typename T,
typename U>
247 bool operator > (
const U &lhs,
const TracedValue<T> &rhs)
249 TRACED_VALUE_DEBUG (
">x");
250 return lhs > rhs.Get ();
252 template <
typename T,
typename U>
253 TracedValue<T> &operator += (TracedValue<T> &lhs,
const U &rhs) {
254 TRACED_VALUE_DEBUG (
"x+=");
260 template <
typename T,
typename U>
261 TracedValue<T> &operator -= (TracedValue<T> &lhs,
const U &rhs) {
262 TRACED_VALUE_DEBUG (
"x-=");
268 template <
typename T,
typename U>
269 TracedValue<T> &operator *= (TracedValue<T> &lhs,
const U &rhs) {
270 TRACED_VALUE_DEBUG (
"x*=");
276 template <
typename T,
typename U>
277 TracedValue<T> &operator /= (TracedValue<T> &lhs,
const U &rhs) {
278 TRACED_VALUE_DEBUG (
"x/=");
284 template <
typename T,
typename U>
285 TracedValue<T> &operator %= (TracedValue<T> &lhs,
const U &rhs) {
286 TRACED_VALUE_DEBUG (
"x%=");
292 template <
typename T,
typename U>
293 TracedValue<T> &operator <<= (TracedValue<T> &lhs,
const U &rhs) {
294 TRACED_VALUE_DEBUG (
"x<<=");
300 template <
typename T,
typename U>
301 TracedValue<T> &operator >>= (TracedValue<T> &lhs,
const U &rhs) {
302 TRACED_VALUE_DEBUG (
"x>>=");
308 template <
typename T,
typename U>
309 TracedValue<T> &operator &= (TracedValue<T> &lhs,
const U &rhs) {
310 TRACED_VALUE_DEBUG (
"x&=");
316 template <
typename T,
typename U>
317 TracedValue<T> &operator |= (TracedValue<T> &lhs,
const U &rhs) {
318 TRACED_VALUE_DEBUG (
"x|=");
324 template <
typename T,
typename U>
325 TracedValue<T> &operator ^= (TracedValue<T> &lhs,
const U &rhs) {
326 TRACED_VALUE_DEBUG (
"x^=");
332 template <
typename T,
typename U>
333 TracedValue<T> operator + (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
334 TRACED_VALUE_DEBUG (
"x+x");
335 return TracedValue<T> (lhs.Get () + rhs.Get ());
337 template <
typename T,
typename U>
338 TracedValue<T> operator + (
const TracedValue<T> &lhs,
const U &rhs) {
339 TRACED_VALUE_DEBUG (
"x+");
340 return TracedValue<T> (lhs.Get () + rhs);
342 template <
typename T,
typename U>
343 TracedValue<T> operator + (
const U &lhs,
const TracedValue<T> &rhs) {
344 TRACED_VALUE_DEBUG (
"+x");
345 return TracedValue<T> (lhs + rhs.Get ());
348 template <
typename T,
typename U>
349 TracedValue<T> operator - (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
350 TRACED_VALUE_DEBUG (
"x-x");
351 return TracedValue<T> (lhs.Get () - rhs.Get ());
353 template <
typename T,
typename U>
354 TracedValue<T> operator - (
const TracedValue<T> &lhs,
const U &rhs) {
355 TRACED_VALUE_DEBUG (
"x-");
356 return TracedValue<T> (lhs.Get () - rhs);
358 template <
typename T,
typename U>
359 TracedValue<T> operator - (
const U &lhs,
const TracedValue<T> &rhs) {
360 TRACED_VALUE_DEBUG (
"-x");
361 return TracedValue<T> (lhs - rhs.Get ());
364 template <
typename T,
typename U>
365 TracedValue<T> operator * (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
366 TRACED_VALUE_DEBUG (
"x*x");
367 return TracedValue<T> (lhs.Get () * rhs.Get ());
369 template <
typename T,
typename U>
370 TracedValue<T> operator * (
const TracedValue<T> &lhs,
const U &rhs) {
371 TRACED_VALUE_DEBUG (
"x*");
372 return TracedValue<T> (lhs.Get () * rhs);
374 template <
typename T,
typename U>
375 TracedValue<T> operator * (
const U &lhs,
const TracedValue<T> &rhs) {
376 TRACED_VALUE_DEBUG (
"*x");
377 return TracedValue<T> (lhs * rhs.Get ());
380 template <
typename T,
typename U>
381 TracedValue<T> operator / (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
382 TRACED_VALUE_DEBUG (
"x/x");
383 return TracedValue<T> (lhs.Get () / rhs.Get ());
385 template <
typename T,
typename U>
386 TracedValue<T> operator / (
const TracedValue<T> &lhs,
const U &rhs) {
387 TRACED_VALUE_DEBUG (
"x/");
388 return TracedValue<T> (lhs.Get () / rhs);
390 template <
typename T,
typename U>
391 TracedValue<T> operator / (
const U &lhs,
const TracedValue<T> &rhs) {
392 TRACED_VALUE_DEBUG (
"/x");
393 return TracedValue<T> (lhs / rhs.Get ());
396 template <
typename T,
typename U>
397 TracedValue<T> operator % (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
398 TRACED_VALUE_DEBUG (
"x%x");
399 return TracedValue<T> (lhs.Get () % rhs.Get ());
401 template <
typename T,
typename U>
402 TracedValue<T> operator % (
const TracedValue<T> &lhs,
const U &rhs) {
403 TRACED_VALUE_DEBUG (
"x%");
404 return TracedValue<T> (lhs.Get () % rhs);
406 template <
typename T,
typename U>
407 TracedValue<T> operator % (
const U &lhs,
const TracedValue<T> &rhs) {
408 TRACED_VALUE_DEBUG (
"%x");
409 return TracedValue<T> (lhs % rhs.Get ());
412 template <
typename T,
typename U>
413 TracedValue<T> operator ^ (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
414 TRACED_VALUE_DEBUG (
"x^x");
415 return TracedValue<T> (lhs.Get () ^ rhs.Get ());
417 template <
typename T,
typename U>
418 TracedValue<T> operator ^ (
const TracedValue<T> &lhs,
const U &rhs) {
419 TRACED_VALUE_DEBUG (
"x^");
420 return TracedValue<T> (lhs.Get () ^ rhs);
422 template <
typename T,
typename U>
423 TracedValue<T> operator ^ (
const U &lhs,
const TracedValue<T> &rhs) {
424 TRACED_VALUE_DEBUG (
"^x");
425 return TracedValue<T> (lhs ^ rhs.Get ());
428 template <
typename T,
typename U>
429 TracedValue<T> operator | (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
430 TRACED_VALUE_DEBUG (
"x|x");
431 return TracedValue<T> (lhs.Get () | rhs.Get ());
433 template <
typename T,
typename U>
434 TracedValue<T> operator | (
const TracedValue<T> &lhs,
const U &rhs) {
435 TRACED_VALUE_DEBUG (
"x|");
436 return TracedValue<T> (lhs.Get () | rhs);
438 template <
typename T,
typename U>
439 TracedValue<T> operator | (
const U &lhs,
const TracedValue<T> &rhs) {
440 TRACED_VALUE_DEBUG (
"|x");
441 return TracedValue<T> (lhs | rhs.Get ());
444 template <
typename T,
typename U>
445 TracedValue<T> operator & (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
446 TRACED_VALUE_DEBUG (
"x&x");
447 return TracedValue<T> (lhs.Get () & rhs.Get ());
449 template <
typename T,
typename U>
450 TracedValue<T> operator & (
const TracedValue<T> &lhs,
const U &rhs) {
451 TRACED_VALUE_DEBUG (
"x&");
452 return TracedValue<T> (lhs.Get () & rhs);
454 template <
typename T,
typename U>
455 TracedValue<T> operator & (
const U &lhs,
const TracedValue<T> &rhs) {
456 TRACED_VALUE_DEBUG (
"&x");
457 return TracedValue<T> (lhs & rhs.Get ());
460 template <
typename T,
typename U>
461 TracedValue<T> operator << (const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
462 TRACED_VALUE_DEBUG (
"x<<x");
463 return TracedValue<T> (lhs.Get () << rhs.Get ());
465 template <
typename T,
typename U>
466 TracedValue<T> operator << (const TracedValue<T> &lhs,
const U &rhs) {
467 TRACED_VALUE_DEBUG (
"x<<");
468 return TracedValue<T> (lhs.Get () << rhs);
470 template <
typename T,
typename U>
471 TracedValue<T> operator << (const U &lhs, const TracedValue<T> &rhs) {
472 TRACED_VALUE_DEBUG (
"<<x");
473 return TracedValue<T> (lhs << rhs.Get ());
476 template <
typename T,
typename U>
477 TracedValue<T>
operator >> (
const TracedValue<T> &lhs,
const TracedValue<U> &rhs) {
478 TRACED_VALUE_DEBUG (
"x>>x");
479 return TracedValue<T> (lhs.Get () >> rhs.Get ());
481 template <
typename T,
typename U>
482 TracedValue<T>
operator >> (
const TracedValue<T> &lhs,
const U &rhs) {
483 TRACED_VALUE_DEBUG (
"x>>");
484 return TracedValue<T> (lhs.Get () >> rhs);
486 template <
typename T,
typename U>
487 TracedValue<T>
operator >> (
const U &lhs,
const TracedValue<T> &rhs) {
488 TRACED_VALUE_DEBUG (
">>x");
489 return TracedValue<T> (lhs >> rhs.Get ());
493 template <
typename T>
494 TracedValue<T> operator + (
const TracedValue<T> &lhs) {
495 TRACED_VALUE_DEBUG (
"(+x)");
496 return TracedValue<T> (+lhs.Get ());
498 template <
typename T>
499 TracedValue<T> operator - (
const TracedValue<T> &lhs) {
500 TRACED_VALUE_DEBUG (
"(-x)");
501 return TracedValue<T> (-lhs.Get ());
503 template <
typename T>
504 TracedValue<T> operator ~ (
const TracedValue<T> &lhs) {
505 TRACED_VALUE_DEBUG (
"(~x)");
506 return TracedValue<T> (~lhs.Get ());
508 template <
typename T>
509 TracedValue<T> operator ! (
const TracedValue<T> &lhs) {
510 TRACED_VALUE_DEBUG (
"(!x)");
511 return TracedValue<T> (!lhs.Get ());
std::istream & operator>>(std::istream &is, Angles &a)
trace classes with value semantics
void DisconnectWithoutContext(const CallbackBase &callback)
void Disconnect(const CallbackBase &callback, std::string path)
void Connect(const CallbackBase &callback, std::string path)
void ConnectWithoutContext(const CallbackBase &callback)