From 4b68e3f7fe28c4e4377cae9568c31ac80b506a03 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Sun, 6 May 2007 11:20:12 +0200 Subject: [PATCH] define class Iid to replace the uint32_t as suggested by Gustavo --- SConstruct | 4 +- src/applications/application-list.cc | 3 +- src/applications/application-list.h | 2 +- src/core/ns-unknown.cc | 55 +++++++++++++++++----------- src/core/ns-unknown.h | 19 +++++++--- src/internet-node/i-arp-private.cc | 3 +- src/internet-node/i-arp-private.h | 2 +- src/internet-node/i-ipv4-private.cc | 3 +- src/internet-node/i-ipv4-private.h | 2 +- src/internet-node/ipv4-l4-demux.cc | 3 +- src/internet-node/ipv4-l4-demux.h | 2 +- src/internet-node/l3-demux.cc | 3 +- src/internet-node/l3-demux.h | 2 +- src/node/i-ipv4.cc | 3 +- src/node/i-ipv4.h | 2 +- src/node/i-udp.cc | 3 +- src/node/i-udp.h | 2 +- src/node/node.cc | 3 +- src/node/node.h | 2 +- 19 files changed, 66 insertions(+), 52 deletions(-) diff --git a/SConstruct b/SConstruct index 15826ec1e..f0ebf215d 100644 --- a/SConstruct +++ b/SConstruct @@ -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', diff --git a/src/applications/application-list.cc b/src/applications/application-list.cc index ae659d515..068b29581 100644 --- a/src/applications/application-list.cc +++ b/src/applications/application-list.cc @@ -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) diff --git a/src/applications/application-list.h b/src/applications/application-list.h index 24b3cdbae..4e37f5aa0 100644 --- a/src/applications/application-list.h +++ b/src/applications/application-list.h @@ -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(); diff --git a/src/core/ns-unknown.cc b/src/core/ns-unknown.cc index 638f78613..b7790c0a1 100644 --- a/src/core/ns-unknown.cc +++ b/src/core/ns-unknown.cc @@ -19,6 +19,7 @@ * Author: Mathieu Lacage */ #include "ns-unknown.h" +#include "iid-manager.h" #include #include #include @@ -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 > List; + typedef std::list > 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 diff --git a/src/core/ns-unknown.h b/src/core/ns-unknown.h index a5490d909..c5c6af1e4 100644 --- a/src/core/ns-unknown.h +++ b/src/core/ns-unknown.h @@ -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 - 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 T * -NsUnknown::QueryInterface (uint32_t iid) const +NsUnknown::QueryInterface (Iid iid) const { NsUnknown *found = DoQueryInterface (iid); if (found != 0) diff --git a/src/internet-node/i-arp-private.cc b/src/internet-node/i-arp-private.cc index 574a10b8a..89b628c27 100644 --- a/src/internet-node/i-arp-private.cc +++ b/src/internet-node/i-arp-private.cc @@ -19,13 +19,12 @@ * Author: Mathieu Lacage */ #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), diff --git a/src/internet-node/i-arp-private.h b/src/internet-node/i-arp-private.h index 41e57d976..39aeb04eb 100644 --- a/src/internet-node/i-arp-private.h +++ b/src/internet-node/i-arp-private.h @@ -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, diff --git a/src/internet-node/i-ipv4-private.cc b/src/internet-node/i-ipv4-private.cc index 33d62094b..2921d5262 100644 --- a/src/internet-node/i-ipv4-private.cc +++ b/src/internet-node/i-ipv4-private.cc @@ -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), diff --git a/src/internet-node/i-ipv4-private.h b/src/internet-node/i-ipv4-private.h index 4a7775625..a300f725f 100644 --- a/src/internet-node/i-ipv4-private.h +++ b/src/internet-node/i-ipv4-private.h @@ -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 (); diff --git a/src/internet-node/ipv4-l4-demux.cc b/src/internet-node/ipv4-l4-demux.cc index dfcde73bd..3547e239f 100644 --- a/src/internet-node/ipv4-l4-demux.cc +++ b/src/internet-node/ipv4-l4-demux.cc @@ -24,14 +24,13 @@ #include #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), diff --git a/src/internet-node/ipv4-l4-demux.h b/src/internet-node/ipv4-l4-demux.h index e87b90511..3e70ad9d7 100644 --- a/src/internet-node/ipv4-l4-demux.h +++ b/src/internet-node/ipv4-l4-demux.h @@ -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(); diff --git a/src/internet-node/l3-demux.cc b/src/internet-node/l3-demux.cc index 51b2704a3..5f261aca5 100644 --- a/src/internet-node/l3-demux.cc +++ b/src/internet-node/l3-demux.cc @@ -23,14 +23,13 @@ #include #include #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), diff --git a/src/internet-node/l3-demux.h b/src/internet-node/l3-demux.h index 9986312a6..40f8318f5 100644 --- a/src/internet-node/l3-demux.h +++ b/src/internet-node/l3-demux.h @@ -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(); diff --git a/src/node/i-ipv4.cc b/src/node/i-ipv4.cc index f385d91ce..d3b41abcf 100644 --- a/src/node/i-ipv4.cc +++ b/src/node/i-ipv4.cc @@ -19,11 +19,10 @@ * Author: Mathieu Lacage */ #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) diff --git a/src/node/i-ipv4.h b/src/node/i-ipv4.h index 0acb4a4e0..11197de90 100644 --- a/src/node/i-ipv4.h +++ b/src/node/i-ipv4.h @@ -34,7 +34,7 @@ class Ipv4Route; class IIpv4 : public NsUnknown { public: - static const uint32_t iid; + static const Iid iid; IIpv4 (); virtual ~IIpv4 (); diff --git a/src/node/i-udp.cc b/src/node/i-udp.cc index 963445d1f..6f825e9a7 100644 --- a/src/node/i-udp.cc +++ b/src/node/i-udp.cc @@ -19,11 +19,10 @@ * Author: Mathieu Lacage */ #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) diff --git a/src/node/i-udp.h b/src/node/i-udp.h index 4e7773b0c..85163935a 100644 --- a/src/node/i-udp.h +++ b/src/node/i-udp.h @@ -30,7 +30,7 @@ class Socket; class IUdp : public NsUnknown { public: - static const uint32_t iid; + static const Iid iid; IUdp (); diff --git a/src/node/node.cc b/src/node/node.cc index 0b5abc25c..22e1a3135 100644 --- a/src/node/node.cc +++ b/src/node/node.cc @@ -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), diff --git a/src/node/node.h b/src/node/node.h index a0fab0bb2..4b072cc3e 100644 --- a/src/node/node.h +++ b/src/node/node.h @@ -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