define class Iid to replace the uint32_t as suggested by Gustavo

This commit is contained in:
Mathieu Lacage
2007-05-06 11:20:12 +02:00
parent 6e437f5103
commit 4b68e3f7fe
19 changed files with 66 additions and 52 deletions

View File

@@ -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',

View File

@@ -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)

View File

@@ -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();

View File

@@ -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

View File

@@ -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)

View File

@@ -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),

View File

@@ -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,

View File

@@ -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),

View File

@@ -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 ();

View File

@@ -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),

View File

@@ -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();

View File

@@ -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),

View File

@@ -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();

View File

@@ -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)

View File

@@ -34,7 +34,7 @@ class Ipv4Route;
class IIpv4 : public NsUnknown
{
public:
static const uint32_t iid;
static const Iid iid;
IIpv4 ();
virtual ~IIpv4 ();

View File

@@ -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)

View File

@@ -30,7 +30,7 @@ class Socket;
class IUdp : public NsUnknown
{
public:
static const uint32_t iid;
static const Iid iid;
IUdp ();

View File

@@ -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),

View File

@@ -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