src/core/trace-source-accessor.h
author Tom Henderson <tomh@tomh.org>
Thu, 29 May 2008 23:24:10 -0700
changeset 3182 61fe7fe81ebd
parent 2648 736213ce179d
child 3190 51fe9001a679
permissions -rw-r--r--
Doxygen organization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     2
/*
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     3
 * Copyright (c) 2008 INRIA
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     4
 *
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     7
 * published by the Free Software Foundation;
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     8
 *
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    12
 * GNU General Public License for more details.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    13
 *
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    15
 * along with this program; if not, write to the Free Software
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    17
 *
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    18
 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    19
 */
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#ifndef TRACE_SOURCE_ACCESSOR_H
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#define TRACE_SOURCE_ACCESSOR_H
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <stdint.h>
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "callback.h"
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ptr.h"
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
namespace ns3 {
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
2634
44a92f1d3728 introduce ObjectBase::GetInstanceTypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2594
diff changeset
    29
class ObjectBase;
44a92f1d3728 introduce ObjectBase::GetInstanceTypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2594
diff changeset
    30
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    31
/**
3182
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2648
diff changeset
    32
 * \ingroup tracing
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2648
diff changeset
    33
 *
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    34
 * \brief control access to objects' trace sources
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    35
 *
2648
736213ce179d improve doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2634
diff changeset
    36
 * This class abstracts the kind of trace source to which we want to connect
736213ce179d improve doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2634
diff changeset
    37
 * and provides services to Connect and Disconnect a sink to a trace source.
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    38
 */
2634
44a92f1d3728 introduce ObjectBase::GetInstanceTypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2594
diff changeset
    39
class TraceSourceAccessor
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
{
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
public:
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  TraceSourceAccessor ();
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  virtual ~TraceSourceAccessor ();
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  void Ref (void) const;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
  void Unref (void) const;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    47
  /**
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    48
   * \param obj the object instance which contains the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    49
   * \param cb the callback to connect to the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    50
   */
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
    51
  virtual bool ConnectWithoutContext (ObjectBase *obj, const CallbackBase &cb) const = 0;
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    52
  /**
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    53
   * \param obj the object instance which contains the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    54
   * \param context the context to bind to the user callback.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    55
   * \param cb the callback to connect to the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    56
   */
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
    57
  virtual bool Connect (ObjectBase *obj, std::string context, const CallbackBase &cb) const = 0;
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    58
  /**
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    59
   * \param obj the object instance which contains the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    60
   * \param cb the callback to disconnect from the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    61
   */
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
    62
  virtual bool DisconnectWithoutContext (ObjectBase *obj, const CallbackBase &cb) const = 0;
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    63
  /**
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    64
   * \param obj the object instance which contains the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    65
   * \param context the context which was bound to the user callback.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    66
   * \param cb the callback to disconnect from the target trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    67
   */
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
    68
  virtual bool Disconnect (ObjectBase *obj, std::string context, const CallbackBase &cb) const = 0;
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
private:
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
  mutable uint32_t m_count;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
};
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
2587
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    73
/**
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    74
 * \param a the trace source
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    75
 *
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    76
 * Create a TraceSourceAccessor which will control access to the underlying
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    77
 * trace source.
d8bf55c18428 dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2569
diff changeset
    78
 */
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
template <typename T>
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a);
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
} // namespace ns3
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
namespace ns3 {
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
template <typename T, typename SOURCE>
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
Ptr<const TraceSourceAccessor> 
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
DoMakeTraceSourceAccessor (SOURCE T::*a)
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
{
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
  struct Accessor : public TraceSourceAccessor
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
  {
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
    92
    virtual bool ConnectWithoutContext (ObjectBase *obj, const CallbackBase &cb) const {
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
      T *p = dynamic_cast<T*> (obj);
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
      if (p == 0)
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
	{
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
	  return false;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
	}
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
    98
      (p->*m_source).ConnectWithoutContext (cb);
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
      return true;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
    }
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
   101
    virtual bool Connect (ObjectBase *obj, std::string context, const CallbackBase &cb) const {
2531
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   102
      T *p = dynamic_cast<T*> (obj);
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   103
      if (p == 0)
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   104
	{
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   105
	  return false;
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   106
	}
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
   107
      (p->*m_source).Connect (cb, context);
2531
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   108
      return true;
b451b5fc8b57 implement context-based trace connection
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2463
diff changeset
   109
    }
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
   110
    virtual bool DisconnectWithoutContext (ObjectBase *obj, const CallbackBase &cb) const {
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
      T *p = dynamic_cast<T*> (obj);
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
      if (p == 0)
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
	{
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
	  return false;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
	}
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
   116
      (p->*m_source).DisconnectWithoutContext (cb);
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
      return true;      
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
    }
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
   119
    virtual bool Disconnect (ObjectBase *obj, std::string context, const CallbackBase &cb) const {
2569
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   120
      T *p = dynamic_cast<T*> (obj);
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   121
      if (p == 0)
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   122
	{
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   123
	  return false;
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   124
	}
2594
a8f89acd17a1 Config::Connect -> Config::ConnectWithoutContext && Config::ConnectWithContext -> Config::Connect
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2587
diff changeset
   125
      (p->*m_source).Disconnect (cb, context);
2569
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   126
      return true;      
d5cff2968984 make Disconnect work with trace contexts.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2531
diff changeset
   127
    }
2463
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
    SOURCE T::*m_source;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  } *accessor = new Accessor ();
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  accessor->m_source = a;
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  return Ptr<const TraceSourceAccessor> (accessor, false);
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
}
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
template <typename T>
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a)
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
{
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
  return DoMakeTraceSourceAccessor (a);
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
}
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
} // namespace ns3
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
c77e43117673 actually allow connection and disconnection to trace sources registered in TypeIds
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
#endif /* TRACE_SOURCE_ACCESSOR_H */