src/core/model/callback.cc
author Maja Grubišić <maja.grubisic@live.com>
Sat, 10 Nov 2012 19:16:38 +0100
changeset 9134 7a750f032acd
parent 9063 32755d0516f4
child 9193 9e679a504fc6
permissions -rw-r--r--
Clean up function logging of core module.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#include "callback.h"
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
     2
#include "log.h"
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
     3
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
     4
NS_LOG_COMPONENT_DEFINE ("Callback");
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
namespace ns3 {
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
CallbackValue::CallbackValue ()
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
  : m_value ()
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    10
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    11
  NS_LOG_FUNCTION (this);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    12
}
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
CallbackValue::CallbackValue (const CallbackBase &base)
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
  : m_value (base)
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    15
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    16
  NS_LOG_FUNCTION (&base);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    17
}
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
CallbackValue::~CallbackValue ()
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    19
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    20
  NS_LOG_FUNCTION (this);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    21
}
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    22
void
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
CallbackValue::Set (CallbackBase base)
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    25
  NS_LOG_FUNCTION (&base);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    26
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
  m_value = base;
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
}
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    29
Ptr<AttributeValue>
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
CallbackValue::Copy (void) const
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    32
  NS_LOG_FUNCTION (this);
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
  return Create<CallbackValue> (m_value);
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
}
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    35
std::string
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
CallbackValue::SerializeToString (Ptr<const AttributeChecker> checker) const
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    38
  NS_LOG_FUNCTION (this << checker);
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  std::ostringstream oss;
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  oss << PeekPointer (m_value.GetImpl ());
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
  return oss.str ();
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
}
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    43
bool
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
CallbackValue::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker)
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    46
  NS_LOG_FUNCTION (this << value << checker);
3763
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
  return false;
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
}
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
ATTRIBUTE_CHECKER_IMPLEMENT (Callback);
e46e361a4262 give attribute power to Callback.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
6468
b0f9d1408e41 bug 965: Problem building /src/core/callback.cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4206
diff changeset
    52
} // namespace ns3
b0f9d1408e41 bug 965: Problem building /src/core/callback.cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4206
diff changeset
    53
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    54
#if (__GNUC__ >= 3)
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    55
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
    56
#include <cstdlib>
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    57
#include <cxxabi.h>
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    58
#include "log.h"
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    59
6468
b0f9d1408e41 bug 965: Problem building /src/core/callback.cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4206
diff changeset
    60
namespace ns3 {
b0f9d1408e41 bug 965: Problem building /src/core/callback.cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4206
diff changeset
    61
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    62
std::string
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    63
CallbackBase::Demangle (const std::string& mangled)
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    64
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    65
  NS_LOG_FUNCTION (mangled);
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
    66
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    67
  int status;
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    68
  char* demangled = abi::__cxa_demangle (mangled.c_str (),
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    69
                                         NULL, NULL, &status);
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    70
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    71
  std::string ret;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    72
  if (status == 0) {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    73
      NS_ASSERT (demangled);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    74
      ret = demangled;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    75
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    76
  else if (status == -1) {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    77
      NS_LOG_UNCOND ("Callback demangling failed: Memory allocation failure occured.");
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    78
      ret = mangled;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    79
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    80
  else if (status == -2) {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    81
      NS_LOG_UNCOND ("Callback demangling failed: Mangled name is not a valid under the C++ ABI mangling rules.");
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    82
      ret = mangled;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    83
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    84
  else if (status == -3) {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    85
      NS_LOG_UNCOND ("Callback demangling failed: One of the arguments is invalid.");
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    86
      ret = mangled;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    87
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    88
  else {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
    89
      NS_LOG_UNCOND ("Callback demangling failed: status " << status);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    90
      ret = mangled;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    91
    }
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    92
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    93
  if (demangled) {
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
    94
      std::free (demangled);
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    95
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
    96
  return ret;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    97
}
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
    98
6468
b0f9d1408e41 bug 965: Problem building /src/core/callback.cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4206
diff changeset
    99
} // namespace ns3
b0f9d1408e41 bug 965: Problem building /src/core/callback.cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4206
diff changeset
   100
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   101
#else
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   102
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   103
std::string
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
   104
ns3::CallbackBase::Demangle (const std::string& mangled)
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   105
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 9063
diff changeset
   106
  NS_LOG_FUNCTION (this << mangled);
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6821
diff changeset
   107
  return mangled;
4205
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   108
}
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   109
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   110
#endif
751691462d36 Print demangled callback signatures if they mismatch. bug #507
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3763
diff changeset
   111