--- a/SConstruct Mon Sep 04 15:06:09 2006 +0200
+++ b/SConstruct Mon Sep 04 15:09:58 2006 +0200
@@ -536,7 +536,7 @@
'tags.cc',
'pcap-writer.cc',
'trace-container.cc',
- 'traced-variable-test.cc',
+ 'variable-tracer-test.cc',
'stream-tracer-test.cc',
])
common.add_inst_headers ([
@@ -545,9 +545,9 @@
'tags.h',
'packet.h',
'count-ptr-holder.tcc',
- 'ui-traced-variable.tcc',
- 'si-traced-variable.tcc',
- 'f-traced-variable.tcc',
+ 'ui-variable-tracer.h',
+ 'si-variable-tracer.h',
+ 'f-variable-tracer.h',
'callback-tracer.h',
'stream-tracer.h',
'trace-container.h',
--- a/samples/main-trace.cc Mon Sep 04 15:06:09 2006 +0200
+++ b/samples/main-trace.cc Mon Sep 04 15:09:58 2006 +0200
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
#include "ns3/trace-container.h"
-#include "ns3/ui-traced-variable.tcc"
+#include "ns3/ui-variable-tracer.h"
#include "ns3/callback-tracer.h"
#include "ns3/stream-tracer.h"
#include "ns3/pcap-writer.h"
--- a/src/common/f-traced-variable.tcc Mon Sep 04 15:06:09 2006 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
-/*
- * Copyright (c) 2006 INRIA
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- */
-
-#ifndef F_VARIABLE_TRACER_H
-#define F_VARIABLE_TRACER_H
-
-#include "ns3/callback.h"
-#include <stdint.h>
-
-namespace ns3 {
-
-class FVariableTracerBase {
-public:
- typedef Callback<void,double, double> ChangeNotifyCallback;
-
- FVariableTracerBase () {}
- FVariableTracerBase (FVariableTracerBase const &o) {}
- FVariableTracerBase &operator = (FVariableTracerBase const &o) {
- return *this;
- }
-
- ~FVariableTracerBase () {}
-
- void set_callback(ChangeNotifyCallback callback) {
- m_callback = callback;
- }
-protected:
- void notify (double old_val, double new_val) {
- if (old_val != new_val && !m_callback.is_null ()) {
- m_callback (old_val, new_val);
- }
- }
-private:
- ChangeNotifyCallback m_callback;
-};
-
-
-}; // namespace ns3
-
-#endif /* F_VARIABLE_TRACER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common/f-variable-tracer.h Mon Sep 04 15:09:58 2006 +0200
@@ -0,0 +1,58 @@
+/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
+/*
+ * Copyright (c) 2006 INRIA
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#ifndef F_VARIABLE_TRACER_H
+#define F_VARIABLE_TRACER_H
+
+#include "ns3/callback.h"
+#include <stdint.h>
+
+namespace ns3 {
+
+class FVariableTracerBase {
+public:
+ typedef Callback<void,double, double> ChangeNotifyCallback;
+
+ FVariableTracerBase () {}
+ FVariableTracerBase (FVariableTracerBase const &o) {}
+ FVariableTracerBase &operator = (FVariableTracerBase const &o) {
+ return *this;
+ }
+
+ ~FVariableTracerBase () {}
+
+ void set_callback(ChangeNotifyCallback callback) {
+ m_callback = callback;
+ }
+protected:
+ void notify (double old_val, double new_val) {
+ if (old_val != new_val && !m_callback.is_null ()) {
+ m_callback (old_val, new_val);
+ }
+ }
+private:
+ ChangeNotifyCallback m_callback;
+};
+
+
+}; // namespace ns3
+
+#endif /* F_VARIABLE_TRACER_H */
--- a/src/common/si-traced-variable.tcc Mon Sep 04 15:06:09 2006 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
-/*
- * Copyright (c) 2006 INRIA
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- */
-
-#ifndef SI_VARIABLE_TRACER_H
-#define SI_VARIABLE_TRACER_H
-
-#include "ns3/callback.h"
-#include <stdint.h>
-
-namespace ns3 {
-
-class SiVariableTracerBase {
-public:
- typedef Callback<void,int64_t, int64_t> ChangeNotifyCallback;
-
- SiVariableTracerBase () {}
- SiVariableTracerBase (SiVariableTracerBase const &o) {}
- SiVariableTracerBase &operator = (SiVariableTracerBase const &o) {
- return *this;
- }
-
- ~SiVariableTracerBase () {}
-
- void set_callback(ChangeNotifyCallback callback) {
- m_callback = callback;
- }
-protected:
- void notify (int64_t old_val, int64_t new_val) {
- if (old_val != new_val && !m_callback.is_null ()) {
- m_callback (old_val, new_val);
- }
- }
-private:
- ChangeNotifyCallback m_callback;
-};
-
-template <typename T>
-class UiVariableTracer;
-
-
-/**
- * \brief trace variables of type "signed integer"
- *
- * This template class implements a POD type: it
- * behaves like any other variable of type "signed integer"
- * except that it also reports any changes to its
- * value with its internal callback.
- *
- * To instantiate a 32-bit signed variable (to store
- * a TCP counter for example), you would create a variable of type
- * ns3::UiVariableTracer<int32_t> :
- \code
- #include <stdint.h>
- #include "ns3/si-traced-variable.tcc"
-
- ns3::SiVariableTracer<uint16_t> var;
- \endcode
- * and you would use it like any other variable of type int32_t:
- \code
- var += 12;
- var = 10;
- var = -10;
- \endcode
- */
-template <typename T>
-class SiVariableTracer : public SiVariableTracerBase {
-public:
- SiVariableTracer ()
- : m_var (0)
- {}
- SiVariableTracer (T const &var)
- : m_var (var)
- {}
-
- SiVariableTracer &operator = (SiVariableTracer const &o) {
- assign (o.get ());
- return *this;
- }
- template <typename TT>
- SiVariableTracer &operator = (SiVariableTracer<TT> const &o) {
- assign (o.get ());
- return *this;
- }
- template <typename TT>
- SiVariableTracer &operator = (UiVariableTracer<TT> const &o) {
- assign (o.get ());
- return *this;
- }
- SiVariableTracer &operator++ () {
- assign (get () + 1);
- return *this;
- }
- SiVariableTracer &operator-- () {
- assign (get () - 1);
- return *this;
- }
- SiVariableTracer operator++ (int) {
- SiVariableTracer old (*this);
- ++*this;
- return old;
- }
- SiVariableTracer operator-- (int) {
- SiVariableTracer old (*this);
- --*this;
- return old;
- }
- operator T () const {
- return get ();
- }
-
-
- void assign (T var) {
- notify (m_var, var);
- m_var = var;
- }
- T get (void) const {
- return m_var;
- }
-
-private:
- T m_var;
-};
-
-template <typename T>
-SiVariableTracer<T> &operator += (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () + rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator -= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () - rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator *= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () * rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator /= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () / rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator <<= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () << rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator >>= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () >> rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator &= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () & rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator |= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () | rhs.get ());
- return lhs;
-}
-template <typename T>
-SiVariableTracer<T> &operator ^= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () ^ rhs.get ());
- return lhs;
-}
-
-
-template <typename T, typename U>
-SiVariableTracer<T> &operator += (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () + rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator -= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () - rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator *= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () * rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator /= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () / rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator <<= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () << rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator >>= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () >> rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator &= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () & rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator |= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () | rhs);
- return lhs;
-}
-template <typename T, typename U>
-SiVariableTracer<T> &operator ^= (SiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () ^ rhs);
- return lhs;
-}
-
-}; // namespace ns3
-
-#endif /* SI_VARIABLE_TRACER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common/si-variable-tracer.h Mon Sep 04 15:09:58 2006 +0200
@@ -0,0 +1,237 @@
+/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
+/*
+ * Copyright (c) 2006 INRIA
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#ifndef SI_VARIABLE_TRACER_H
+#define SI_VARIABLE_TRACER_H
+
+#include "ns3/callback.h"
+#include <stdint.h>
+
+namespace ns3 {
+
+class SiVariableTracerBase {
+public:
+ typedef Callback<void,int64_t, int64_t> ChangeNotifyCallback;
+
+ SiVariableTracerBase () {}
+ SiVariableTracerBase (SiVariableTracerBase const &o) {}
+ SiVariableTracerBase &operator = (SiVariableTracerBase const &o) {
+ return *this;
+ }
+
+ ~SiVariableTracerBase () {}
+
+ void set_callback(ChangeNotifyCallback callback) {
+ m_callback = callback;
+ }
+protected:
+ void notify (int64_t old_val, int64_t new_val) {
+ if (old_val != new_val && !m_callback.is_null ()) {
+ m_callback (old_val, new_val);
+ }
+ }
+private:
+ ChangeNotifyCallback m_callback;
+};
+
+template <typename T>
+class UiVariableTracer;
+
+
+/**
+ * \brief trace variables of type "signed integer"
+ *
+ * This template class implements a POD type: it
+ * behaves like any other variable of type "signed integer"
+ * except that it also reports any changes to its
+ * value with its internal callback.
+ *
+ * To instantiate a 32-bit signed variable (to store
+ * a TCP counter for example), you would create a variable of type
+ * ns3::UiVariableTracer<int32_t> :
+ \code
+ #include <stdint.h>
+ #include "ns3/si-traced-variable.tcc"
+
+ ns3::SiVariableTracer<uint16_t> var;
+ \endcode
+ * and you would use it like any other variable of type int32_t:
+ \code
+ var += 12;
+ var = 10;
+ var = -10;
+ \endcode
+ */
+template <typename T>
+class SiVariableTracer : public SiVariableTracerBase {
+public:
+ SiVariableTracer ()
+ : m_var (0)
+ {}
+ SiVariableTracer (T const &var)
+ : m_var (var)
+ {}
+
+ SiVariableTracer &operator = (SiVariableTracer const &o) {
+ assign (o.get ());
+ return *this;
+ }
+ template <typename TT>
+ SiVariableTracer &operator = (SiVariableTracer<TT> const &o) {
+ assign (o.get ());
+ return *this;
+ }
+ template <typename TT>
+ SiVariableTracer &operator = (UiVariableTracer<TT> const &o) {
+ assign (o.get ());
+ return *this;
+ }
+ SiVariableTracer &operator++ () {
+ assign (get () + 1);
+ return *this;
+ }
+ SiVariableTracer &operator-- () {
+ assign (get () - 1);
+ return *this;
+ }
+ SiVariableTracer operator++ (int) {
+ SiVariableTracer old (*this);
+ ++*this;
+ return old;
+ }
+ SiVariableTracer operator-- (int) {
+ SiVariableTracer old (*this);
+ --*this;
+ return old;
+ }
+ operator T () const {
+ return get ();
+ }
+
+
+ void assign (T var) {
+ notify (m_var, var);
+ m_var = var;
+ }
+ T get (void) const {
+ return m_var;
+ }
+
+private:
+ T m_var;
+};
+
+template <typename T>
+SiVariableTracer<T> &operator += (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () + rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator -= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () - rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator *= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () * rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator /= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () / rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator <<= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () << rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator >>= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () >> rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator &= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () & rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator |= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () | rhs.get ());
+ return lhs;
+}
+template <typename T>
+SiVariableTracer<T> &operator ^= (SiVariableTracer<T> &lhs, SiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () ^ rhs.get ());
+ return lhs;
+}
+
+
+template <typename T, typename U>
+SiVariableTracer<T> &operator += (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () + rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator -= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () - rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator *= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () * rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator /= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () / rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator <<= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () << rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator >>= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () >> rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator &= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () & rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator |= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () | rhs);
+ return lhs;
+}
+template <typename T, typename U>
+SiVariableTracer<T> &operator ^= (SiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () ^ rhs);
+ return lhs;
+}
+
+}; // namespace ns3
+
+#endif /* SI_VARIABLE_TRACER_H */
--- a/src/common/trace-container.h Mon Sep 04 15:06:09 2006 +0200
+++ b/src/common/trace-container.h Mon Sep 04 15:09:58 2006 +0200
@@ -22,9 +22,9 @@
#ifndef TRACE_CONTAINER_H
#define TRACE_CONTAINER_H
-#include "ui-traced-variable.tcc"
-#include "si-traced-variable.tcc"
-#include "f-traced-variable.tcc"
+#include "ui-variable-tracer.h"
+#include "si-variable-tracer.h"
+#include "f-variable-tracer.h"
#include "callback-tracer.h"
#include "ns3/callback.h"
#include <list>
--- a/src/common/traced-variable-test.cc Mon Sep 04 15:06:09 2006 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,252 +0,0 @@
-/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
-/*
- * Copyright (c) 2006 INRIA
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- */
-
-#include "ui-traced-variable.tcc"
-#include "si-traced-variable.tcc"
-#include "ns3/test.h"
-#include "ns3/callback.h"
-
-
-namespace ns3 {
-
-class Foo {
-public:
- void notify (uint64_t old_val, uint64_t new_val) {}
-};
-
-class VariableTracerTest: public Test {
-public:
- VariableTracerTest ();
- void run_unsigned_tests (void);
- void run_signed_unsigned_tests (void);
- virtual bool run_tests (void);
-};
-void
-VariableTracerTest::run_unsigned_tests (void)
-{
- UiVariableTracer<uint32_t> var, ovar, tmp;
- uint32_t utmp;
- Foo *foo = new Foo ();
-
- var.set_callback (make_callback (&Foo::notify, foo));
-
- var = 10;
- ovar = var;
-
- if (var == ovar) {
- }
- if (var != ovar) {
- }
- if (var > ovar) {
- }
- if (var >= ovar) {
- }
- if (var < ovar) {
- }
- if (var <= ovar) {
- }
-
- if (var == 1) {
- }
- if (var != 1) {
- }
- if (var > 1) {
- }
- if (var >= 1) {
- }
- if (var < 1) {
- }
- if (var <= 1) {
- }
-
- if (1 == ovar) {
- }
- if (1 != ovar) {
- }
- if (1 > ovar) {
- }
- if (1 >= ovar) {
- }
- if (1 < ovar) {
- }
- if (1 <= ovar) {
- }
-
- var++;
- ++var;
- var--;
- --var;
-
- tmp = var + ovar;
- tmp = var - ovar;
- tmp = var / ovar;
- tmp = var * ovar;
- tmp = var << ovar;
- tmp = var >> ovar;
- tmp = var & ovar;
- tmp = var | ovar;
- tmp = var ^ ovar;
-
- tmp = var + 1;
- tmp = var - 1;
- tmp = var / 1;
- tmp = var * 1;
- tmp = var << 1;
- tmp = var >> 1;
- tmp = var & 1;
- tmp = var | 1;
- tmp = var ^ 1;
-
- tmp = 1 + ovar;
- tmp = 1 - ovar;
- tmp = 1 / ovar;
- tmp = 1 * ovar;
- tmp = 1 << ovar;
- tmp = 1 >> ovar;
- tmp = 1 & ovar;
- tmp = 1 | ovar;
- tmp = 1 ^ ovar;
-
- tmp += var;
- tmp -= var;
- tmp /= var;
- tmp *= var;
- tmp <<= var;
- tmp >>= var;
- tmp &= var;
- tmp |= var;
- tmp ^= var;
-
- tmp += 1;
- tmp -= 1;
- tmp /= 1;
- tmp *= 1;
- tmp <<= 1;
- tmp >>= 1;
- tmp &= 1;
- tmp |= 1;
- tmp ^= 1;
-
-
- utmp = var + ovar;
- utmp = var - ovar;
- utmp = var / ovar;
- utmp = var * ovar;
- utmp = var << ovar;
- utmp = var >> ovar;
- utmp = var & ovar;
- utmp = var | ovar;
- utmp = var ^ ovar;
-
- utmp = var + 1;
- utmp = var - 1;
- utmp = var / 1;
- utmp = var * 1;
- utmp = var << 1;
- utmp = var >> 1;
- utmp = var & 1;
- utmp = var | 1;
- utmp = var ^ 1;
-
- utmp = 1 + ovar;
- utmp = 1 - ovar;
- utmp = 1 / ovar;
- utmp = 1 * ovar;
- utmp = 1 << ovar;
- utmp = 1 >> ovar;
- utmp = 1 & ovar;
- utmp = 1 | ovar;
- utmp = 1 ^ ovar;
-
- utmp += var;
- utmp -= var;
- utmp /= var;
- utmp *= var;
- utmp <<= var;
- utmp >>= var;
- utmp &= var;
- utmp |= var;
- utmp ^= var;
-
- utmp += 1;
- utmp -= 1;
- utmp /= 1;
- utmp *= 1;
- utmp <<= 1;
- utmp >>= 1;
- utmp &= 1;
- utmp |= 1;
- utmp ^= 1;
-}
-
-void
-VariableTracerTest::run_signed_unsigned_tests (void)
-{
- unsigned short utmp = 10;
- unsigned int uitmp = 7;
- short stmp = 5;
- utmp = stmp;
- utmp += stmp;
- uitmp = utmp;
- utmp = uitmp;
-
- UiVariableTracer<unsigned short> uvar = 10;
- UiVariableTracer<unsigned int> uivar = 5;
- SiVariableTracer<short> svar = 5;
- SiVariableTracer<int> sivar = 5;
- uvar = svar;
- svar = uvar;
- uvar += svar;
- svar += uvar;
-
- uvar = sivar;
- sivar = uvar;
- uvar += sivar;
- sivar += uvar;
-
- uivar = uvar;
- uvar = uivar;
- uivar += uvar;
- uvar += uivar;
-
- sivar = svar;
- svar = sivar;
- sivar += svar;
- svar += sivar;
-}
-
-bool
-VariableTracerTest::run_tests (void)
-{
- run_unsigned_tests ();
- run_signed_unsigned_tests ();
-
- return true;
-}
-
-VariableTracerTest::VariableTracerTest ()
- : Test ("VariableTracer") {}
-
-static VariableTracerTest g_variable_tracer_test;
-
-}; // namespace ns3
-
-
--- a/src/common/ui-traced-variable.tcc Mon Sep 04 15:06:09 2006 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
-/*
- * Copyright (c) 2006 INRIA
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- */
-
-#ifndef UI_VARIABLE_TRACER_H
-#define UI_VARIABLE_TRACER_H
-
-#include "ns3/callback.h"
-#include <stdint.h>
-
-namespace ns3 {
-
-class UiVariableTracerBase {
-public:
- typedef Callback<void, uint64_t, uint64_t> ChangeNotifyCallback;
-
- UiVariableTracerBase ()
- : m_callback () {}
- /* We don't want to copy the base callback. Only set_callback on
- * a specific instance will do something to it. */
- UiVariableTracerBase (UiVariableTracerBase const &o)
- : m_callback () {}
- UiVariableTracerBase &operator = (UiVariableTracerBase const &o) {
- return *this;
- }
- ~UiVariableTracerBase () {}
-
- void set_callback(ChangeNotifyCallback callback) {
- m_callback = callback;
- }
-protected:
- void notify (uint64_t old_val, uint64_t new_val) {
- if (old_val != new_val && !m_callback.is_null ()) {
- m_callback (old_val, new_val);
- }
- }
-private:
- ChangeNotifyCallback m_callback;
-};
-
-template <typename T>
-class SiVariableTracer;
-
-
-/**
- * \brief trace variables of type "unsigned integer"
- *
- * This template class implements a POD type: it
- * behaves like any other variable of type "unsigned integer"
- * except that it also reports any changes to its
- * value with its internal callback.
- *
- * To instantiate a 32-bit unsigned variable (to store
- * a TCP counter for example), you would create a variable of type
- * ns3::UiVariableTracer<uint32_t> :
- \code
- #include <stdint.h>
- #include "ns3/ui-traced-variable.tcc"
-
- ns3::UiVariableTracer<uint32_t> var;
- \endcode
- * and you would use it like any other variable of type uint32_t:
- \code
- var += 12;
- var = 10;
- \endcode
- */
-template <typename T>
-class UiVariableTracer : public UiVariableTracerBase {
-public:
- UiVariableTracer ()
- : m_var ()
- {}
- UiVariableTracer (T const &var)
- : m_var (var)
- {}
-
- UiVariableTracer &operator = (UiVariableTracer const &o) {
- assign (o.get ());
- return *this;
- }
- template <typename TT>
- UiVariableTracer &operator = (UiVariableTracer<TT> const &o) {
- assign (o.get ());
- return *this;
- }
- template <typename TT>
- UiVariableTracer &operator = (SiVariableTracer<TT> const &o) {
- assign (o.get ());
- return *this;
- }
- UiVariableTracer &operator++ () {
- assign (get () + 1);
- return *this;
- }
- UiVariableTracer &operator-- () {
- assign (get () - 1);
- return *this;
- }
- UiVariableTracer operator++ (int) {
- UiVariableTracer old (*this);
- ++*this;
- return old;
- }
- UiVariableTracer operator-- (int) {
- UiVariableTracer old (*this);
- --*this;
- return old;
- }
- operator T () const {
- return get ();
- }
-
-
- void assign (T var) {
- notify (m_var, var);
- m_var = var;
- }
- T get (void) const {
- return m_var;
- }
-
-private:
- T m_var;
-};
-
-template <typename T>
-UiVariableTracer<T> &operator += (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () + rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator -= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () - rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator *= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () * rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator /= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () / rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator <<= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () << rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator >>= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () >> rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator &= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () & rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator |= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () | rhs.get ());
- return lhs;
-}
-template <typename T>
-UiVariableTracer<T> &operator ^= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
- lhs.assign (lhs.get () ^ rhs.get ());
- return lhs;
-}
-
-
-template <typename T, typename U>
-UiVariableTracer<T> &operator += (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () + rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator -= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () - rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator *= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () * rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator /= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () / rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator <<= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () << rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator >>= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () >> rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator &= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () & rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator |= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () | rhs);
- return lhs;
-}
-template <typename T, typename U>
-UiVariableTracer<T> &operator ^= (UiVariableTracer<T> &lhs, U const &rhs) {
- lhs.assign (lhs.get () ^ rhs);
- return lhs;
-}
-
-}; // namespace ns3
-
-#endif /* UI_VARIABLE_TRACER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common/ui-variable-tracer.h Mon Sep 04 15:09:58 2006 +0200
@@ -0,0 +1,239 @@
+/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
+/*
+ * Copyright (c) 2006 INRIA
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#ifndef UI_VARIABLE_TRACER_H
+#define UI_VARIABLE_TRACER_H
+
+#include "ns3/callback.h"
+#include <stdint.h>
+
+namespace ns3 {
+
+class UiVariableTracerBase {
+public:
+ typedef Callback<void, uint64_t, uint64_t> ChangeNotifyCallback;
+
+ UiVariableTracerBase ()
+ : m_callback () {}
+ /* We don't want to copy the base callback. Only set_callback on
+ * a specific instance will do something to it. */
+ UiVariableTracerBase (UiVariableTracerBase const &o)
+ : m_callback () {}
+ UiVariableTracerBase &operator = (UiVariableTracerBase const &o) {
+ return *this;
+ }
+ ~UiVariableTracerBase () {}
+
+ void set_callback(ChangeNotifyCallback callback) {
+ m_callback = callback;
+ }
+protected:
+ void notify (uint64_t old_val, uint64_t new_val) {
+ if (old_val != new_val && !m_callback.is_null ()) {
+ m_callback (old_val, new_val);
+ }
+ }
+private:
+ ChangeNotifyCallback m_callback;
+};
+
+template <typename T>
+class SiVariableTracer;
+
+
+/**
+ * \brief trace variables of type "unsigned integer"
+ *
+ * This template class implements a POD type: it
+ * behaves like any other variable of type "unsigned integer"
+ * except that it also reports any changes to its
+ * value with its internal callback.
+ *
+ * To instantiate a 32-bit unsigned variable (to store
+ * a TCP counter for example), you would create a variable of type
+ * ns3::UiVariableTracer<uint32_t> :
+ \code
+ #include <stdint.h>
+ #include "ns3/ui-traced-variable.tcc"
+
+ ns3::UiVariableTracer<uint32_t> var;
+ \endcode
+ * and you would use it like any other variable of type uint32_t:
+ \code
+ var += 12;
+ var = 10;
+ \endcode
+ */
+template <typename T>
+class UiVariableTracer : public UiVariableTracerBase {
+public:
+ UiVariableTracer ()
+ : m_var ()
+ {}
+ UiVariableTracer (T const &var)
+ : m_var (var)
+ {}
+
+ UiVariableTracer &operator = (UiVariableTracer const &o) {
+ assign (o.get ());
+ return *this;
+ }
+ template <typename TT>
+ UiVariableTracer &operator = (UiVariableTracer<TT> const &o) {
+ assign (o.get ());
+ return *this;
+ }
+ template <typename TT>
+ UiVariableTracer &operator = (SiVariableTracer<TT> const &o) {
+ assign (o.get ());
+ return *this;
+ }
+ UiVariableTracer &operator++ () {
+ assign (get () + 1);
+ return *this;
+ }
+ UiVariableTracer &operator-- () {
+ assign (get () - 1);
+ return *this;
+ }
+ UiVariableTracer operator++ (int) {
+ UiVariableTracer old (*this);
+ ++*this;
+ return old;
+ }
+ UiVariableTracer operator-- (int) {
+ UiVariableTracer old (*this);
+ --*this;
+ return old;
+ }
+ operator T () const {
+ return get ();
+ }
+
+
+ void assign (T var) {
+ notify (m_var, var);
+ m_var = var;
+ }
+ T get (void) const {
+ return m_var;
+ }
+
+private:
+ T m_var;
+};
+
+template <typename T>
+UiVariableTracer<T> &operator += (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () + rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator -= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () - rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator *= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () * rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator /= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () / rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator <<= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () << rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator >>= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () >> rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator &= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () & rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator |= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () | rhs.get ());
+ return lhs;
+}
+template <typename T>
+UiVariableTracer<T> &operator ^= (UiVariableTracer<T> &lhs, UiVariableTracer<T> const &rhs) {
+ lhs.assign (lhs.get () ^ rhs.get ());
+ return lhs;
+}
+
+
+template <typename T, typename U>
+UiVariableTracer<T> &operator += (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () + rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator -= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () - rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator *= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () * rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator /= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () / rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator <<= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () << rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator >>= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () >> rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator &= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () & rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator |= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () | rhs);
+ return lhs;
+}
+template <typename T, typename U>
+UiVariableTracer<T> &operator ^= (UiVariableTracer<T> &lhs, U const &rhs) {
+ lhs.assign (lhs.get () ^ rhs);
+ return lhs;
+}
+
+}; // namespace ns3
+
+#endif /* UI_VARIABLE_TRACER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common/variable-tracer-test.cc Mon Sep 04 15:09:58 2006 +0200
@@ -0,0 +1,252 @@
+/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
+/*
+ * Copyright (c) 2006 INRIA
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#include "ui-variable-tracer.h"
+#include "si-variable-tracer.h"
+#include "ns3/test.h"
+#include "ns3/callback.h"
+
+
+namespace ns3 {
+
+class Foo {
+public:
+ void notify (uint64_t old_val, uint64_t new_val) {}
+};
+
+class VariableTracerTest: public Test {
+public:
+ VariableTracerTest ();
+ void run_unsigned_tests (void);
+ void run_signed_unsigned_tests (void);
+ virtual bool run_tests (void);
+};
+void
+VariableTracerTest::run_unsigned_tests (void)
+{
+ UiVariableTracer<uint32_t> var, ovar, tmp;
+ uint32_t utmp;
+ Foo *foo = new Foo ();
+
+ var.set_callback (make_callback (&Foo::notify, foo));
+
+ var = 10;
+ ovar = var;
+
+ if (var == ovar) {
+ }
+ if (var != ovar) {
+ }
+ if (var > ovar) {
+ }
+ if (var >= ovar) {
+ }
+ if (var < ovar) {
+ }
+ if (var <= ovar) {
+ }
+
+ if (var == 1) {
+ }
+ if (var != 1) {
+ }
+ if (var > 1) {
+ }
+ if (var >= 1) {
+ }
+ if (var < 1) {
+ }
+ if (var <= 1) {
+ }
+
+ if (1 == ovar) {
+ }
+ if (1 != ovar) {
+ }
+ if (1 > ovar) {
+ }
+ if (1 >= ovar) {
+ }
+ if (1 < ovar) {
+ }
+ if (1 <= ovar) {
+ }
+
+ var++;
+ ++var;
+ var--;
+ --var;
+
+ tmp = var + ovar;
+ tmp = var - ovar;
+ tmp = var / ovar;
+ tmp = var * ovar;
+ tmp = var << ovar;
+ tmp = var >> ovar;
+ tmp = var & ovar;
+ tmp = var | ovar;
+ tmp = var ^ ovar;
+
+ tmp = var + 1;
+ tmp = var - 1;
+ tmp = var / 1;
+ tmp = var * 1;
+ tmp = var << 1;
+ tmp = var >> 1;
+ tmp = var & 1;
+ tmp = var | 1;
+ tmp = var ^ 1;
+
+ tmp = 1 + ovar;
+ tmp = 1 - ovar;
+ tmp = 1 / ovar;
+ tmp = 1 * ovar;
+ tmp = 1 << ovar;
+ tmp = 1 >> ovar;
+ tmp = 1 & ovar;
+ tmp = 1 | ovar;
+ tmp = 1 ^ ovar;
+
+ tmp += var;
+ tmp -= var;
+ tmp /= var;
+ tmp *= var;
+ tmp <<= var;
+ tmp >>= var;
+ tmp &= var;
+ tmp |= var;
+ tmp ^= var;
+
+ tmp += 1;
+ tmp -= 1;
+ tmp /= 1;
+ tmp *= 1;
+ tmp <<= 1;
+ tmp >>= 1;
+ tmp &= 1;
+ tmp |= 1;
+ tmp ^= 1;
+
+
+ utmp = var + ovar;
+ utmp = var - ovar;
+ utmp = var / ovar;
+ utmp = var * ovar;
+ utmp = var << ovar;
+ utmp = var >> ovar;
+ utmp = var & ovar;
+ utmp = var | ovar;
+ utmp = var ^ ovar;
+
+ utmp = var + 1;
+ utmp = var - 1;
+ utmp = var / 1;
+ utmp = var * 1;
+ utmp = var << 1;
+ utmp = var >> 1;
+ utmp = var & 1;
+ utmp = var | 1;
+ utmp = var ^ 1;
+
+ utmp = 1 + ovar;
+ utmp = 1 - ovar;
+ utmp = 1 / ovar;
+ utmp = 1 * ovar;
+ utmp = 1 << ovar;
+ utmp = 1 >> ovar;
+ utmp = 1 & ovar;
+ utmp = 1 | ovar;
+ utmp = 1 ^ ovar;
+
+ utmp += var;
+ utmp -= var;
+ utmp /= var;
+ utmp *= var;
+ utmp <<= var;
+ utmp >>= var;
+ utmp &= var;
+ utmp |= var;
+ utmp ^= var;
+
+ utmp += 1;
+ utmp -= 1;
+ utmp /= 1;
+ utmp *= 1;
+ utmp <<= 1;
+ utmp >>= 1;
+ utmp &= 1;
+ utmp |= 1;
+ utmp ^= 1;
+}
+
+void
+VariableTracerTest::run_signed_unsigned_tests (void)
+{
+ unsigned short utmp = 10;
+ unsigned int uitmp = 7;
+ short stmp = 5;
+ utmp = stmp;
+ utmp += stmp;
+ uitmp = utmp;
+ utmp = uitmp;
+
+ UiVariableTracer<unsigned short> uvar = 10;
+ UiVariableTracer<unsigned int> uivar = 5;
+ SiVariableTracer<short> svar = 5;
+ SiVariableTracer<int> sivar = 5;
+ uvar = svar;
+ svar = uvar;
+ uvar += svar;
+ svar += uvar;
+
+ uvar = sivar;
+ sivar = uvar;
+ uvar += sivar;
+ sivar += uvar;
+
+ uivar = uvar;
+ uvar = uivar;
+ uivar += uvar;
+ uvar += uivar;
+
+ sivar = svar;
+ svar = sivar;
+ sivar += svar;
+ svar += sivar;
+}
+
+bool
+VariableTracerTest::run_tests (void)
+{
+ run_unsigned_tests ();
+ run_signed_unsigned_tests ();
+
+ return true;
+}
+
+VariableTracerTest::VariableTracerTest ()
+ : Test ("VariableTracer") {}
+
+static VariableTracerTest g_variable_tracer_test;
+
+}; // namespace ns3
+
+