Hacked arraytraceresolver to compile, but segfaults upon running simple-p2p

Raj Bhattacharjea 2007-05-09 16:56:33 -04:00
parent de3b9c78f3
commit bd73c92bb5
3 changed files with 29 additions and 15 deletions

View File

@ -24,6 +24,7 @@
#include <stdint.h> #include <stdint.h>
#include <string> #include <string>
#include "ns3/callback.h" #include "ns3/callback.h"
#include "ns3/ptr.h"
#include "trace-resolver.h" #include "trace-resolver.h"
namespace ns3 { namespace ns3 {
@ -82,12 +83,15 @@ public:
ArrayTraceResolver (TraceContext const &context, ArrayTraceResolver (TraceContext const &context,
Callback<uint32_t> getSize, Callback<uint32_t> getSize,
Callback<T *, uint32_t> get); Callback<T *, uint32_t> get);
ArrayTraceResolver (TraceContext const &context,
Callback<uint32_t> getSize,
Callback<Ptr<T>, uint32_t> get);
private: private:
virtual TraceResolverList DoLookup (std::string id) const; virtual TraceResolverList DoLookup (std::string id) const;
Callback<uint32_t> m_getSize; Callback<uint32_t> m_getSize;
Callback<T *, uint32_t> m_get; Callback<T *, uint32_t> m_get;
Callback<Ptr<T>, uint32_t> m_get2;
}; };
}//namespace ns3 }//namespace ns3
namespace ns3 { namespace ns3 {
@ -115,6 +119,14 @@ ArrayTraceResolver<T>::ArrayTraceResolver (TraceContext const &context,
m_get (get) m_get (get)
{} {}
template <typename T> template <typename T>
ArrayTraceResolver<T>::ArrayTraceResolver (TraceContext const &context,
Callback<uint32_t> getSize,
Callback<Ptr<T>, uint32_t> get)
: TraceResolver (context),
m_getSize (getSize),
m_get2 (get)
{}
template <typename T>
TraceResolver::TraceResolverList TraceResolver::TraceResolverList
ArrayTraceResolver<T>::DoLookup (std::string id) const ArrayTraceResolver<T>::DoLookup (std::string id) const
{ {
@ -127,6 +139,7 @@ ArrayTraceResolver<T>::DoLookup (std::string id) const
typename ArrayTraceResolver<T>::Index index = typename ArrayTraceResolver<T>::Index (i); typename ArrayTraceResolver<T>::Index index = typename ArrayTraceResolver<T>::Index (i);
context.Add (index); context.Add (index);
list.push_back (m_get (i)->CreateTraceResolver (context)); list.push_back (m_get (i)->CreateTraceResolver (context));
} }
} }
return list; return list;

View File

@ -49,37 +49,37 @@ public:
NodeListPriv (); NodeListPriv ();
~NodeListPriv (); ~NodeListPriv ();
uint32_t Add (Node *node); uint32_t Add (Ptr<Node> node);
NodeList::Iterator Begin (void); NodeList::Iterator Begin (void);
NodeList::Iterator End (void); NodeList::Iterator End (void);
TraceResolver *CreateTraceResolver (TraceContext const &context); TraceResolver *CreateTraceResolver (TraceContext const &context);
Node *PeekNode (uint32_t n); Ptr<Node> PeekNode (uint32_t n);
uint32_t GetNNodes (void); uint32_t GetNNodes (void);
private: private:
std::vector<Node *> m_nodes; std::vector<Ptr<Node> > m_nodes;
}; };
NodeListPriv::NodeListPriv () NodeListPriv::NodeListPriv ()
{} {}
NodeListPriv::~NodeListPriv () NodeListPriv::~NodeListPriv ()
{ {
for (std::vector<Node *>::iterator i = m_nodes.begin (); for (std::vector<Ptr<Node> >::iterator i = m_nodes.begin ();
i != m_nodes.end (); i++) i != m_nodes.end (); i++)
{ {
Node *node = *i; Ptr<Node> node = *i;
node->Dispose (); node->Dispose ();
node->Unref (); //node->Unref ();
} }
m_nodes.erase (m_nodes.begin (), m_nodes.end ()); m_nodes.erase (m_nodes.begin (), m_nodes.end ());
} }
uint32_t uint32_t
NodeListPriv::Add (Node *node) NodeListPriv::Add (Ptr<Node> node)
{ {
uint32_t index = m_nodes.size (); uint32_t index = m_nodes.size ();
node->Ref (); //node->Ref ();
m_nodes.push_back (node); m_nodes.push_back (node);
return index; return index;
@ -99,7 +99,7 @@ NodeListPriv::GetNNodes (void)
{ {
return m_nodes.size (); return m_nodes.size ();
} }
Node * Ptr<Node>
NodeListPriv::PeekNode (uint32_t n) NodeListPriv::PeekNode (uint32_t n)
{ {
return m_nodes[n]; return m_nodes[n];
@ -126,7 +126,7 @@ NodeListPriv::CreateTraceResolver (TraceContext const &context)
namespace ns3 { namespace ns3 {
uint32_t uint32_t
NodeList::Add (Node *node) NodeList::Add (Ptr<Node> node)
{ {
return SimulationSingleton<NodeListPriv>::Get ()->Add (node); return SimulationSingleton<NodeListPriv>::Get ()->Add (node);
} }
@ -145,7 +145,7 @@ NodeList::CreateTraceResolver (TraceContext const &context)
{ {
return SimulationSingleton<NodeListPriv>::Get ()->CreateTraceResolver (context); return SimulationSingleton<NodeListPriv>::Get ()->CreateTraceResolver (context);
} }
Node * Ptr<Node>
NodeList::PeekNode (uint32_t n) NodeList::PeekNode (uint32_t n)
{ {
return SimulationSingleton<NodeListPriv>::Get ()->PeekNode (n); return SimulationSingleton<NodeListPriv>::Get ()->PeekNode (n);

View File

@ -24,6 +24,7 @@
#include <vector> #include <vector>
#include "ns3/array-trace-resolver.h" #include "ns3/array-trace-resolver.h"
#include "ns3/ptr.h"
namespace ns3 { namespace ns3 {
@ -35,14 +36,14 @@ class NodeList
{ {
public: public:
typedef ArrayTraceResolver<Node>::Index NodeIndex; typedef ArrayTraceResolver<Node>::Index NodeIndex;
typedef std::vector<Node *>::iterator Iterator; typedef std::vector< Ptr<Node> >::iterator Iterator;
static uint32_t Add (Node *node); static uint32_t Add (Ptr<Node> node);
static Iterator Begin (void); static Iterator Begin (void);
static Iterator End (void); static Iterator End (void);
static TraceResolver *CreateTraceResolver (TraceContext const &context); static TraceResolver *CreateTraceResolver (TraceContext const &context);
static Node *PeekNode (uint32_t n); static Ptr<Node> PeekNode (uint32_t n);
}; };
}//namespace ns3 }//namespace ns3