define class Iid to replace the uint32_t as suggested by Gustavo
This commit is contained in:
@@ -41,6 +41,9 @@ elif env['PLATFORM'] == 'win32':
|
||||
core.add_sources([
|
||||
'win32-system-wall-clock-ms.cc',
|
||||
])
|
||||
core.add_headers ([
|
||||
'iid-manager.h',
|
||||
])
|
||||
core.add_inst_headers([
|
||||
'system-wall-clock-ms.h',
|
||||
'reference-list.h',
|
||||
@@ -54,7 +57,6 @@ core.add_inst_headers([
|
||||
'random-variable.h',
|
||||
'rng-stream.h',
|
||||
'ns-unknown.h',
|
||||
'iid-manager.h',
|
||||
'default-value.h',
|
||||
'command-line.h',
|
||||
'type-name.h',
|
||||
|
||||
@@ -23,11 +23,10 @@
|
||||
|
||||
#include "application.h"
|
||||
#include "application-list.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
|
||||
namespace ns3{
|
||||
|
||||
const uint32_t ApplicationList::iid = IidManager::Allocate ("ApplicationList");
|
||||
const Iid ApplicationList::iid ("ApplicationList");
|
||||
|
||||
ApplicationList::ApplicationList(Node* n)
|
||||
: NsUnknown (ApplicationList::iid)
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace ns3 {
|
||||
class ApplicationList : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
ApplicationList(Node*);
|
||||
// Copy constructor not needed, default one is correct
|
||||
virtual ~ApplicationList();
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "ns-unknown.h"
|
||||
#include "iid-manager.h"
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <stdint.h>
|
||||
@@ -26,27 +27,37 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
Iid::Iid (std::string name)
|
||||
: m_iid (IidManager::Allocate (name))
|
||||
{}
|
||||
|
||||
bool operator == (const Iid &a, const Iid &b)
|
||||
{
|
||||
return a.m_iid == b.m_iid;
|
||||
}
|
||||
|
||||
|
||||
class NsUnknownImpl
|
||||
{
|
||||
public:
|
||||
NsUnknownImpl (uint32_t iid, NsUnknown *interface);
|
||||
NsUnknownImpl (Iid iid, NsUnknown *interface);
|
||||
~NsUnknownImpl ();
|
||||
void Ref (void);
|
||||
void RefAll (NsUnknownImpl *other);
|
||||
void Unref (void);
|
||||
void UnrefAll (void);
|
||||
NsUnknown *DoQueryInterface (uint32_t iid) const;
|
||||
NsUnknown *DoQueryInterface (Iid iid) const;
|
||||
void DoDisposeAll (void);
|
||||
void AddInterface (NsUnknown *interface);
|
||||
void AddSelfInterface (uint32_t iid, NsUnknown *interface);
|
||||
void AddSelfInterface (Iid iid, NsUnknown *interface);
|
||||
private:
|
||||
typedef std::list<std::pair<uint32_t,NsUnknown *> > List;
|
||||
typedef std::list<std::pair<Iid,NsUnknown *> > List;
|
||||
uint32_t m_ref;
|
||||
List m_list;
|
||||
bool m_disposed;
|
||||
};
|
||||
|
||||
NsUnknownImpl::NsUnknownImpl (uint32_t iid, NsUnknown *interface)
|
||||
NsUnknownImpl::NsUnknownImpl (Iid iid, NsUnknown *interface)
|
||||
: m_ref (1),
|
||||
m_disposed (false)
|
||||
{
|
||||
@@ -99,7 +110,7 @@ NsUnknownImpl::DoDisposeAll (void)
|
||||
m_disposed = true;
|
||||
}
|
||||
NsUnknown *
|
||||
NsUnknownImpl::DoQueryInterface (uint32_t iid) const
|
||||
NsUnknownImpl::DoQueryInterface (Iid iid) const
|
||||
{
|
||||
for (List::const_iterator i = m_list.begin ();
|
||||
i != m_list.end (); i++)
|
||||
@@ -125,14 +136,14 @@ NsUnknownImpl::AddInterface (NsUnknown *interface)
|
||||
}
|
||||
}
|
||||
void
|
||||
NsUnknownImpl::AddSelfInterface (uint32_t iid, NsUnknown *interface)
|
||||
NsUnknownImpl::AddSelfInterface (Iid iid, NsUnknown *interface)
|
||||
{
|
||||
interface->RefInternal ();
|
||||
m_list.push_back (std::make_pair (iid, interface));
|
||||
}
|
||||
|
||||
|
||||
NsUnknown::NsUnknown (uint32_t iid)
|
||||
NsUnknown::NsUnknown (Iid iid)
|
||||
: m_impl (new NsUnknownImpl (iid, this)),
|
||||
m_ref (1)
|
||||
{}
|
||||
@@ -181,7 +192,7 @@ NsUnknown::UnrefInternal (void)
|
||||
}
|
||||
|
||||
NsUnknown *
|
||||
NsUnknown::DoQueryInterface (uint32_t iid) const
|
||||
NsUnknown::DoQueryInterface (Iid iid) const
|
||||
{
|
||||
return m_impl->DoQueryInterface (iid);
|
||||
}
|
||||
@@ -196,7 +207,7 @@ NsUnknown::AddInterface (NsUnknown *interface)
|
||||
}
|
||||
|
||||
void
|
||||
NsUnknown::AddSelfInterface (uint32_t iid, NsUnknown *interface)
|
||||
NsUnknown::AddSelfInterface (Iid iid, NsUnknown *interface)
|
||||
{
|
||||
m_impl->AddSelfInterface (iid, interface);
|
||||
}
|
||||
@@ -214,7 +225,7 @@ namespace {
|
||||
class A : public ns3::NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const ns3::Iid iid;
|
||||
A ()
|
||||
: NsUnknown (A::iid)
|
||||
{}
|
||||
@@ -222,7 +233,7 @@ public:
|
||||
class B : public ns3::NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const ns3::Iid iid;
|
||||
B ()
|
||||
: NsUnknown (B::iid)
|
||||
{}
|
||||
@@ -230,7 +241,7 @@ public:
|
||||
class BaseA : public ns3::NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const ns3::Iid iid;
|
||||
BaseA ()
|
||||
: NsUnknown (BaseA::iid)
|
||||
{}
|
||||
@@ -238,7 +249,7 @@ public:
|
||||
class BaseB : public ns3::NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const ns3::Iid iid;
|
||||
BaseB ()
|
||||
: NsUnknown (BaseB::iid)
|
||||
{}
|
||||
@@ -246,7 +257,7 @@ public:
|
||||
class Base : public ns3::NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const ns3::Iid iid;
|
||||
Base ()
|
||||
: NsUnknown (Base::iid)
|
||||
{}
|
||||
@@ -254,19 +265,19 @@ public:
|
||||
class Derived : public Base
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const ns3::Iid iid;
|
||||
Derived ()
|
||||
{
|
||||
AddSelfInterface (Derived::iid, this);
|
||||
}
|
||||
};
|
||||
|
||||
const uint32_t A::iid = ns3::IidManager::Allocate ("A");
|
||||
const uint32_t B::iid = ns3::IidManager::Allocate ("B");
|
||||
const uint32_t BaseA::iid = ns3::IidManager::Allocate ("BaseA");
|
||||
const uint32_t BaseB::iid = ns3::IidManager::Allocate ("BaseB");
|
||||
const uint32_t Base::iid = ns3::IidManager::Allocate ("Base");
|
||||
const uint32_t Derived::iid = ns3::IidManager::Allocate ("Derived");
|
||||
const ns3::Iid A::iid ("A");
|
||||
const ns3::Iid B::iid ("B");
|
||||
const ns3::Iid BaseA::iid ("BaseA");
|
||||
const ns3::Iid BaseB::iid ("BaseB");
|
||||
const ns3::Iid Base::iid ("Base");
|
||||
const ns3::Iid Derived::iid ("Derived");
|
||||
|
||||
}//namespace
|
||||
|
||||
|
||||
@@ -28,6 +28,15 @@ namespace ns3 {
|
||||
|
||||
class NsUnknownImpl;
|
||||
|
||||
class Iid
|
||||
{
|
||||
public:
|
||||
Iid (std::string name);
|
||||
private:
|
||||
friend bool operator == (const Iid &a, const Iid &b);
|
||||
uint32_t m_iid;
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief COM-like IUnknown
|
||||
*
|
||||
@@ -47,7 +56,7 @@ public:
|
||||
* \param iid the NsUnknown id of the requested interface
|
||||
*/
|
||||
template <typename T>
|
||||
T *QueryInterface (uint32_t iid) const;
|
||||
T *QueryInterface (Iid iid) const;
|
||||
|
||||
/**
|
||||
* \param interface another interface
|
||||
@@ -68,7 +77,7 @@ protected:
|
||||
* If you are a direct subclass of this class, you _must_ register
|
||||
* the name of your interface with this constructor.
|
||||
*/
|
||||
NsUnknown (uint32_t iid);
|
||||
NsUnknown (Iid iid);
|
||||
/**
|
||||
* \param iid the Interface id of the interface
|
||||
* \param a pointer to the interface object
|
||||
@@ -78,7 +87,7 @@ protected:
|
||||
* (typically, your subclass has added API), you need to call
|
||||
* this method to associate an interface id to your interface.
|
||||
*/
|
||||
void AddSelfInterface (uint32_t iid, NsUnknown *interface);
|
||||
void AddSelfInterface (Iid iid, NsUnknown *interface);
|
||||
protected:
|
||||
/**
|
||||
* Subclasses who want to handle the "dispose" event should
|
||||
@@ -90,7 +99,7 @@ protected:
|
||||
private:
|
||||
friend class NsUnknownImpl;
|
||||
NsUnknown ();
|
||||
NsUnknown *DoQueryInterface (uint32_t iid) const;
|
||||
NsUnknown *DoQueryInterface (Iid iid) const;
|
||||
void RefInternal (void);
|
||||
void UnrefInternal (void);
|
||||
NsUnknownImpl *m_impl;
|
||||
@@ -103,7 +112,7 @@ namespace ns3 {
|
||||
|
||||
template <typename T>
|
||||
T *
|
||||
NsUnknown::QueryInterface (uint32_t iid) const
|
||||
NsUnknown::QueryInterface (Iid iid) const
|
||||
{
|
||||
NsUnknown *found = DoQueryInterface (iid);
|
||||
if (found != 0)
|
||||
|
||||
@@ -19,13 +19,12 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "i-arp-private.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
#include "arp.h"
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint32_t IArpPrivate::iid = IidManager::Allocate ("IArpPrivate");
|
||||
const Iid IArpPrivate::iid ("IArpPrivate");
|
||||
|
||||
IArpPrivate::IArpPrivate (Arp *arp)
|
||||
: NsUnknown (IArpPrivate::iid),
|
||||
|
||||
@@ -34,7 +34,7 @@ class Arp;
|
||||
class IArpPrivate : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
IArpPrivate (Arp *arp);
|
||||
virtual ~IArpPrivate ();
|
||||
bool Lookup (Packet &p, Ipv4Address destination,
|
||||
|
||||
@@ -21,11 +21,10 @@
|
||||
#include "i-ipv4-private.h"
|
||||
#include "ipv4.h"
|
||||
#include "ns3/assert.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint32_t IIpv4Private::iid = IidManager::Allocate ("IIpv4Private");
|
||||
const Iid IIpv4Private::iid ("IIpv4Private");
|
||||
|
||||
IIpv4Private::IIpv4Private (Ipv4 *ipv4)
|
||||
: NsUnknown (IIpv4Private::iid),
|
||||
|
||||
@@ -37,7 +37,7 @@ class NetDevice;
|
||||
class IIpv4Private : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
IIpv4Private (Ipv4 *ipv4);
|
||||
virtual ~IIpv4Private ();
|
||||
|
||||
|
||||
@@ -24,14 +24,13 @@
|
||||
|
||||
#include <sstream>
|
||||
#include "ns3/composite-trace-resolver.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
#include "ns3/node.h"
|
||||
#include "ipv4-l4-demux.h"
|
||||
#include "ipv4-l4-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint32_t Ipv4L4Demux::iid = IidManager::Allocate ("Ipv4L4Demux");
|
||||
const Iid Ipv4L4Demux::iid ("Ipv4L4Demux");
|
||||
|
||||
Ipv4L4Demux::Ipv4L4Demux (Node *node)
|
||||
: NsUnknown (Ipv4L4Demux::iid),
|
||||
|
||||
@@ -41,7 +41,7 @@ class TraceContext;
|
||||
class Ipv4L4Demux : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
typedef int Ipv4L4ProtocolTraceType;
|
||||
Ipv4L4Demux (Node *node);
|
||||
virtual ~Ipv4L4Demux();
|
||||
|
||||
@@ -23,14 +23,13 @@
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include "ns3/composite-trace-resolver.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
#include "ns3/node.h"
|
||||
#include "l3-demux.h"
|
||||
#include "l3-protocol.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint32_t L3Demux::iid = IidManager::Allocate ("L3Demux");
|
||||
const Iid L3Demux::iid ("L3Demux");
|
||||
|
||||
L3Demux::L3Demux (Node *node)
|
||||
: NsUnknown (L3Demux::iid),
|
||||
|
||||
@@ -43,7 +43,7 @@ class TraceContext;
|
||||
class L3Demux : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
typedef int ProtocolTraceType;
|
||||
L3Demux(Node *node);
|
||||
virtual ~L3Demux();
|
||||
|
||||
@@ -19,11 +19,10 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "i-ipv4.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint32_t IIpv4::iid = IidManager::Allocate ("IIpv4");
|
||||
const Iid IIpv4::iid ("IIpv4");
|
||||
|
||||
IIpv4::IIpv4 ()
|
||||
: NsUnknown (IIpv4::iid)
|
||||
|
||||
@@ -34,7 +34,7 @@ class Ipv4Route;
|
||||
class IIpv4 : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
IIpv4 ();
|
||||
virtual ~IIpv4 ();
|
||||
|
||||
|
||||
@@ -19,11 +19,10 @@
|
||||
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
|
||||
*/
|
||||
#include "i-udp.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const uint32_t IUdp::iid = IidManager::Allocate ("IUdp");
|
||||
const Iid IUdp::iid ("IUdp");
|
||||
|
||||
IUdp::IUdp ()
|
||||
: NsUnknown (IUdp::iid)
|
||||
|
||||
@@ -30,7 +30,7 @@ class Socket;
|
||||
class IUdp : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
|
||||
IUdp ();
|
||||
|
||||
|
||||
@@ -26,11 +26,10 @@
|
||||
#include "node-list.h"
|
||||
#include "net-device.h"
|
||||
#include "ns3/simulator.h"
|
||||
#include "ns3/iid-manager.h"
|
||||
|
||||
namespace ns3{
|
||||
|
||||
const uint32_t Node::iid = IidManager::Allocate ("Node");
|
||||
const Iid Node::iid ("Node");
|
||||
|
||||
Node::Node()
|
||||
: NsUnknown (Node::iid),
|
||||
|
||||
@@ -38,7 +38,7 @@ class NetDevice;
|
||||
class Node : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const uint32_t iid;
|
||||
static const Iid iid;
|
||||
|
||||
Node();
|
||||
Node(uint32_t); // Specify which system for a distributed simulation
|
||||
|
||||
Reference in New Issue
Block a user