merge with HEAD

This commit is contained in:
Mathieu Lacage
2008-04-17 15:54:35 -07:00
20 changed files with 135 additions and 110 deletions

View File

@@ -41,7 +41,7 @@ CommandLine::Item::~Item ()
{}
void
CommandLine::Parse (int &iargc, char *argv[]) const
CommandLine::Parse (int iargc, char *argv[]) const
{
int argc = iargc;
for (argc--, argv++; argc > 0; argc--, argv++)

View File

@@ -64,7 +64,7 @@ public:
* Obviously, this method will parse the input command-line arguments and
* will attempt to handle them all.
*/
void Parse (int &argc, char *argv[]) const;
void Parse (int argc, char *argv[]) const;
private:
class Item
{

View File

@@ -399,6 +399,7 @@ DcaTxop::NotifyAccessGranted (void)
m_currentPacket = 0;
m_dcf->ResetCw ();
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
StartAccessIfNeeded ();
MY_DEBUG ("tx broadcast");
}
else

View File

@@ -108,6 +108,11 @@ ArpL3Protocol::Receive(Ptr<NetDevice> device, Ptr<Packet> packet, uint16_t proto
arp.GetDestinationIpv4Address () << "; we have address " <<
cache->GetInterface ()->GetAddress ());
/**
* Note: we do not update the ARP cache when we receive an ARP request
* from an unknown node. See bug #107
*/
if (arp.IsRequest () &&
arp.GetDestinationIpv4Address () == cache->GetInterface ()->GetAddress ())
{

View File

@@ -681,6 +681,7 @@ bool TcpSocket::ProcessPacketAction (Actions_t a, Ptr<Packet> p,
// TCP SYN consumes one byte
m_nextRxSequence = tcpHeader.GetSequenceNumber() + SequenceNumber(1);
m_nextTxSequence = tcpHeader.GetAckNumber ();
m_firstPendingSequence = m_nextTxSequence; //bug 166
NS_LOG_DEBUG ("TcpSocket " << this << " ACK_TX_1" <<
" nextRxSeq " << m_nextRxSequence);
SendEmptyPacket (TcpHeader::ACK);

View File

@@ -295,14 +295,15 @@ UdpSocket::DoSendTo (Ptr<Packet> p, Ipv4Address dest, uint16_t port)
NotifyDataSent (p->GetSize ());
}
NS_LOG_LOGIC ("Limited broadcast end.");
return p->GetSize();
}
else if (ipv4->GetIfIndexForDestination(dest, localIfIndex))
{
NS_LOG_LOGIC ("Route exists");
m_udp->Send (p, ipv4->GetAddress (localIfIndex), dest,
m_udp->Send (p->Copy (), ipv4->GetAddress (localIfIndex), dest,
m_endPoint->GetLocalPort (), port);
NotifyDataSent (p->GetSize ());
return 0;
return p->GetSize();;
}
else
{
@@ -471,7 +472,7 @@ UdpSocketTest::RunTests (void)
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234),
Create<Packet> (123)), 0);
Create<Packet> (123)), 123);
Simulator::Run ();
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // second interface should receive it
@@ -482,7 +483,7 @@ UdpSocketTest::RunTests (void)
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234),
Create<Packet> (123)), 0);
Create<Packet> (123)), 123);
Simulator::Run ();
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
// second socket should not receive it (it is bound specifically to the second interface's address
@@ -502,7 +503,7 @@ UdpSocketTest::RunTests (void)
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234),
Create<Packet> (123)), 0);
Create<Packet> (123)), 123);
Simulator::Run ();
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 123);

View File

@@ -111,9 +111,10 @@ ATTRIBUTE_HELPER_CPP (Address);
bool operator == (const Address &a, const Address &b)
{
NS_ASSERT (a.m_type == b.m_type ||
a.m_type == 0 ||
b.m_type == 0);
if (a.m_type != b.m_type)
{
return false;
}
NS_ASSERT (a.GetLength() == b.GetLength());
return memcmp (a.m_data, b.m_data, a.m_len) == 0;
}

View File

@@ -572,12 +572,15 @@ AgentImpl::MprComputation()
// (not in RFC but I think is needed: remove the 2-hop
// neighbors reachable by the MPR from N2)
for (TwoHopNeighborSet::iterator twoHopNeigh = N2.begin ();
twoHopNeigh != N2.end (); twoHopNeigh++)
twoHopNeigh != N2.end (); )
{
if (twoHopNeigh->neighborMainAddr == neighbor->neighborMainAddr)
{
twoHopNeigh = N2.erase (twoHopNeigh);
twoHopNeigh--;
}
else
{
twoHopNeigh++;
}
}
}
@@ -617,12 +620,15 @@ AgentImpl::MprComputation()
}
// Remove the nodes from N2 which are now covered by a node in the MPR set.
for (TwoHopNeighborSet::iterator twoHopNeigh = N2.begin ();
twoHopNeigh != N2.end (); twoHopNeigh++)
twoHopNeigh != N2.end (); )
{
if (coveredTwoHopNeighbors.find (twoHopNeigh->twoHopNeighborAddr) != coveredTwoHopNeighbors.end ())
{
twoHopNeigh = N2.erase (twoHopNeigh);
twoHopNeigh--;
}
else
{
twoHopNeigh++;
}
}
@@ -699,12 +705,15 @@ AgentImpl::MprComputation()
{
mprSet.insert (max->neighborMainAddr);
for (TwoHopNeighborSet::iterator twoHopNeigh = N2.begin ();
twoHopNeigh != N2.end (); twoHopNeigh++)
twoHopNeigh != N2.end (); )
{
if (twoHopNeigh->neighborMainAddr == max->neighborMainAddr)
{
twoHopNeigh = N2.erase (twoHopNeigh);
twoHopNeigh--;
}
else
{
twoHopNeigh++;
}
}
}

View File

@@ -64,12 +64,15 @@ void
OlsrState::EraseMprSelectorTuples (const Ipv4Address &mainAddr)
{
for (MprSelectorSet::iterator it = m_mprSelectorSet.begin ();
it != m_mprSelectorSet.end (); it++)
it != m_mprSelectorSet.end ();)
{
if (it->mainAddr == mainAddr)
{
it = m_mprSelectorSet.erase (it);
it--;
}
else
{
it++;
}
}
}
@@ -203,15 +206,18 @@ OlsrState::EraseTwoHopNeighborTuples (const Ipv4Address &neighborMainAddr,
const Ipv4Address &twoHopNeighborAddr)
{
for (TwoHopNeighborSet::iterator it = m_twoHopNeighborSet.begin ();
it != m_twoHopNeighborSet.end (); it++)
it != m_twoHopNeighborSet.end ();)
{
if (it->neighborMainAddr == neighborMainAddr
&& it->twoHopNeighborAddr == twoHopNeighborAddr)
{
it = m_twoHopNeighborSet.erase (it);
it--; // FIXME: is this correct in the case 'it' pointed to the first element?
m_modified = true;
}
else
{
it++;
}
}
}
@@ -219,13 +225,17 @@ void
OlsrState::EraseTwoHopNeighborTuples (const Ipv4Address &neighborMainAddr)
{
for (TwoHopNeighborSet::iterator it = m_twoHopNeighborSet.begin ();
it != m_twoHopNeighborSet.end (); it++)
it != m_twoHopNeighborSet.end ();)
{
if (it->neighborMainAddr == neighborMainAddr) {
it = m_twoHopNeighborSet.erase (it);
it--;
m_modified = true;
}
if (it->neighborMainAddr == neighborMainAddr)
{
it = m_twoHopNeighborSet.erase (it);
m_modified = true;
}
else
{
it++;
}
}
}
@@ -385,14 +395,17 @@ void
OlsrState::EraseOlderTopologyTuples (const Ipv4Address &lastAddr, uint16_t ansn)
{
for (TopologySet::iterator it = m_topologySet.begin();
it != m_topologySet.end(); it++)
it != m_topologySet.end();)
{
if (it->lastAddr == lastAddr && it->sequenceNumber < ansn)
{
it = m_topologySet.erase (it);
it--;
m_modified = true;
}
else
{
it++;
}
}
}

View File

@@ -31,7 +31,7 @@
* to move one if statement out of the loop.
*/
#include "scheduler-heap.h"
#include "heap-scheduler.h"
#include "event-impl.h"
#include "ns3/assert.h"
@@ -52,7 +52,7 @@ std::cout << "HEAP TRACE " << x << std::endl;
namespace ns3 {
SchedulerHeap::SchedulerHeap ()
HeapScheduler::HeapScheduler ()
{
// we purposedly waste an item at the start of
// the array to make sure the indexes in the
@@ -61,57 +61,57 @@ SchedulerHeap::SchedulerHeap ()
m_heap.push_back (std::make_pair (static_cast<EventImpl *>(0), emptyKey));
}
SchedulerHeap::~SchedulerHeap ()
HeapScheduler::~HeapScheduler ()
{}
uint32_t
SchedulerHeap::Parent (uint32_t id) const
HeapScheduler::Parent (uint32_t id) const
{
return id / 2;
}
uint32_t
SchedulerHeap::Sibling (uint32_t id) const
HeapScheduler::Sibling (uint32_t id) const
{
return id + 1;
}
uint32_t
SchedulerHeap::LeftChild (uint32_t id) const
HeapScheduler::LeftChild (uint32_t id) const
{
return id * 2;
}
uint32_t
SchedulerHeap::RightChild (uint32_t id) const
HeapScheduler::RightChild (uint32_t id) const
{
return id * 2 + 1;
}
uint32_t
SchedulerHeap::Root (void) const
HeapScheduler::Root (void) const
{
return 1;
}
bool
SchedulerHeap::IsRoot (uint32_t id) const
HeapScheduler::IsRoot (uint32_t id) const
{
return (id == Root ())?true:false;
}
uint32_t
SchedulerHeap::Last (void) const
HeapScheduler::Last (void) const
{
return m_heap.size () - 1;
}
bool
SchedulerHeap::IsBottom (uint32_t id) const
HeapScheduler::IsBottom (uint32_t id) const
{
return (id >= m_heap.size ())?true:false;
}
void
SchedulerHeap::Exch (uint32_t a, uint32_t b)
HeapScheduler::Exch (uint32_t a, uint32_t b)
{
NS_ASSERT (b < m_heap.size () && a < m_heap.size ());
TRACE ("Exch " << a << ", " << b);
@@ -121,7 +121,7 @@ SchedulerHeap::Exch (uint32_t a, uint32_t b)
}
bool
SchedulerHeap::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const
HeapScheduler::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const
{
if (a->m_ts < b->m_ts)
{
@@ -142,25 +142,25 @@ SchedulerHeap::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey
}
bool
SchedulerHeap::IsLessStrictly (uint32_t a, uint32_t b) const
HeapScheduler::IsLessStrictly (uint32_t a, uint32_t b) const
{
return IsLowerStrictly (&m_heap[a].second, &m_heap[b].second);
}
uint32_t
SchedulerHeap::Smallest (uint32_t a, uint32_t b) const
HeapScheduler::Smallest (uint32_t a, uint32_t b) const
{
return IsLessStrictly (a,b)?a:b;
}
bool
SchedulerHeap::IsEmpty (void) const
HeapScheduler::IsEmpty (void) const
{
return (m_heap.size () == 1)?true:false;
}
void
SchedulerHeap::BottomUp (void)
HeapScheduler::BottomUp (void)
{
uint32_t index = Last ();
while (!IsRoot (index) &&
@@ -172,7 +172,7 @@ SchedulerHeap::BottomUp (void)
}
void
SchedulerHeap::TopDown (uint32_t start)
HeapScheduler::TopDown (uint32_t start)
{
uint32_t index = start;
uint32_t right = RightChild (index);
@@ -207,7 +207,7 @@ SchedulerHeap::TopDown (uint32_t start)
void
SchedulerHeap::Insert (const EventId &id)
HeapScheduler::Insert (const EventId &id)
{
// acquire single ref
EventImpl *event = id.PeekEventImpl ();
@@ -220,13 +220,13 @@ SchedulerHeap::Insert (const EventId &id)
}
EventId
SchedulerHeap::PeekNext (void) const
HeapScheduler::PeekNext (void) const
{
std::pair<EventImpl *,Scheduler::EventKey> next = m_heap[Root ()];
return EventId (next.first, next.second.m_ts, next.second.m_uid);
}
EventId
SchedulerHeap::RemoveNext (void)
HeapScheduler::RemoveNext (void)
{
std::pair<EventImpl *,Scheduler::EventKey> next = m_heap[Root ()];
Exch (Root (), Last ());
@@ -237,7 +237,7 @@ SchedulerHeap::RemoveNext (void)
bool
SchedulerHeap::Remove (const EventId &id)
HeapScheduler::Remove (const EventId &id)
{
uint32_t uid = id.GetUid ();
for (uint32_t i = 1; i < m_heap.size (); i++)

View File

@@ -29,10 +29,10 @@ namespace ns3 {
class EventHolder;
class SchedulerHeap : public Scheduler {
class HeapScheduler : public Scheduler {
public:
SchedulerHeap ();
virtual ~SchedulerHeap ();
HeapScheduler ();
virtual ~HeapScheduler ();
virtual void Insert (const EventId &id);
virtual bool IsEmpty (void) const;

View File

@@ -18,7 +18,7 @@
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#include "scheduler-list.h"
#include "list-scheduler.h"
#include "event-impl.h"
#include <utility>
#include <string>
@@ -27,13 +27,13 @@
namespace ns3 {
SchedulerList::SchedulerList ()
ListScheduler::ListScheduler ()
{}
SchedulerList::~SchedulerList ()
ListScheduler::~ListScheduler ()
{}
bool
SchedulerList::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const
ListScheduler::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const
{
if (a->m_ts < b->m_ts)
{
@@ -51,7 +51,7 @@ SchedulerList::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b
}
void
SchedulerList::Insert (const EventId &id)
ListScheduler::Insert (const EventId &id)
{
Scheduler::EventKey key;
// acquire refcount on EventImpl
@@ -70,19 +70,19 @@ SchedulerList::Insert (const EventId &id)
m_events.push_back (std::make_pair (event, key));
}
bool
SchedulerList::IsEmpty (void) const
ListScheduler::IsEmpty (void) const
{
return m_events.empty ();
}
EventId
SchedulerList::PeekNext (void) const
ListScheduler::PeekNext (void) const
{
std::pair<EventImpl *, EventKey> next = m_events.front ();
return EventId (next.first, next.second.m_ts, next.second.m_uid);
}
EventId
SchedulerList::RemoveNext (void)
ListScheduler::RemoveNext (void)
{
std::pair<EventImpl *, EventKey> next = m_events.front ();
m_events.pop_front ();
@@ -90,7 +90,7 @@ SchedulerList::RemoveNext (void)
}
bool
SchedulerList::Remove (const EventId &id)
ListScheduler::Remove (const EventId &id)
{
for (EventsI i = m_events.begin (); i != m_events.end (); i++)
{

View File

@@ -31,10 +31,10 @@ namespace ns3 {
class EventImpl;
class SchedulerList : public Scheduler {
class ListScheduler : public Scheduler {
public:
SchedulerList ();
virtual ~SchedulerList ();
ListScheduler ();
virtual ~ListScheduler ();
virtual void Insert (const EventId &id);
virtual bool IsEmpty (void) const;

View File

@@ -19,7 +19,7 @@
* The idea to use a std c++ map came from GTNetS
*/
#include "scheduler-map.h"
#include "map-scheduler.h"
#include "event-impl.h"
#include "ns3/assert.h"
#include <string>
@@ -37,9 +37,9 @@ std::cout << "MAP TRACE " << x << std::endl;
namespace ns3 {
SchedulerMap::SchedulerMap ()
MapScheduler::MapScheduler ()
{}
SchedulerMap::~SchedulerMap ()
MapScheduler::~MapScheduler ()
{}
/* Note the invariants which this function must provide:
@@ -48,7 +48,7 @@ SchedulerMap::~SchedulerMap ()
* - transitivity: f(x,y) and f(y,z) => f(x,z)
*/
bool
SchedulerMap::EventKeyCompare::operator () (struct EventKey const&a, struct EventKey const&b)
MapScheduler::EventKeyCompare::operator () (struct EventKey const&a, struct EventKey const&b)
{
if (a.m_ts < b.m_ts)
{
@@ -71,7 +71,7 @@ SchedulerMap::EventKeyCompare::operator () (struct EventKey const&a, struct Even
void
SchedulerMap::Insert (const EventId &id)
MapScheduler::Insert (const EventId &id)
{
// acquire a single ref
EventImpl *event = id.PeekEventImpl ();
@@ -85,13 +85,13 @@ SchedulerMap::Insert (const EventId &id)
}
bool
SchedulerMap::IsEmpty (void) const
MapScheduler::IsEmpty (void) const
{
return m_list.empty ();
}
EventId
SchedulerMap::PeekNext (void) const
MapScheduler::PeekNext (void) const
{
EventMapCI i = m_list.begin ();
NS_ASSERT (i != m_list.end ());
@@ -99,7 +99,7 @@ SchedulerMap::PeekNext (void) const
return EventId (i->second, i->first.m_ts, i->first.m_uid);
}
EventId
SchedulerMap::RemoveNext (void)
MapScheduler::RemoveNext (void)
{
EventMapI i = m_list.begin ();
std::pair<Scheduler::EventKey, EventImpl*> next = *i;
@@ -108,7 +108,7 @@ SchedulerMap::RemoveNext (void)
}
bool
SchedulerMap::Remove (const EventId &id)
MapScheduler::Remove (const EventId &id)
{
Scheduler::EventKey key;
key.m_ts = id.GetTs ();

View File

@@ -30,10 +30,10 @@ namespace ns3 {
class EventImpl;
class SchedulerMap : public Scheduler {
class MapScheduler : public Scheduler {
public:
SchedulerMap ();
virtual ~SchedulerMap ();
MapScheduler ();
virtual ~MapScheduler ();
virtual void Insert (const EventId &id);
virtual bool IsEmpty (void) const;
@@ -47,9 +47,9 @@ private:
bool operator () (struct EventKey const&a, struct EventKey const&b);
};
typedef std::map<Scheduler::EventKey, EventImpl*, SchedulerMap::EventKeyCompare> EventMap;
typedef std::map<Scheduler::EventKey, EventImpl*, SchedulerMap::EventKeyCompare>::iterator EventMapI;
typedef std::map<Scheduler::EventKey, EventImpl*, SchedulerMap::EventKeyCompare>::const_iterator EventMapCI;
typedef std::map<Scheduler::EventKey, EventImpl*, MapScheduler::EventKeyCompare> EventMap;
typedef std::map<Scheduler::EventKey, EventImpl*, MapScheduler::EventKeyCompare>::iterator EventMapI;
typedef std::map<Scheduler::EventKey, EventImpl*, MapScheduler::EventKeyCompare>::const_iterator EventMapCI;
EventMap m_list;

View File

@@ -274,6 +274,7 @@ TimeUnit<N1+N2> operator * (TimeUnit<N1> const &lhs, TimeUnit<N2> const &rhs)
template <int N1, int N2>
TimeUnit<N1-N2> operator / (TimeUnit<N1> const &lhs, TimeUnit<N2> const &rhs)
{
NS_ASSERT (rhs.GetHighPrecision ().GetDouble () != 0);
HighPrecision retval = lhs.GetHighPrecision ();
retval.Div (rhs.GetHighPrecision ());
return TimeUnit<N1-N2> (retval);

View File

@@ -393,9 +393,7 @@ SimulatorPrivate::GetMaximumSimulationTime (void) const
}; // namespace ns3
#include "scheduler-list.h"
#include "scheduler-heap.h"
#include "scheduler-map.h"
#include "map-scheduler.h"
namespace ns3 {
@@ -426,7 +424,7 @@ Simulator::GetPriv (void)
{
LogRegisterTimePrinter (&TimePrinter);
m_priv = CreateObject<SimulatorPrivate> ();
Ptr<Scheduler> scheduler = CreateObject<SchedulerMap> ();
Ptr<Scheduler> scheduler = CreateObject<MapScheduler> ();
m_priv->SetScheduler (scheduler);
}
TRACE_S ("priv " << m_priv);
@@ -572,6 +570,8 @@ Simulator::GetMaximumSimulationTime (void)
#include "ns3/test.h"
#include "ns3/ptr.h"
#include "list-scheduler.h"
#include "heap-scheduler.h"
namespace ns3 {
@@ -942,19 +942,19 @@ SimulatorTests::RunTests (void)
bool result = true;
Simulator::Destroy ();
Simulator::SetScheduler (CreateObject<SchedulerList> ());
Simulator::SetScheduler (CreateObject<ListScheduler> ());
if (!RunOneTest ())
{
result = false;
}
Simulator::Destroy ();
Simulator::SetScheduler (CreateObject<SchedulerHeap> ());
Simulator::SetScheduler (CreateObject<HeapScheduler> ());
if (!RunOneTest ())
{
result = false;
}
Simulator::Destroy ();
Simulator::SetScheduler (CreateObject<SchedulerMap> ());
Simulator::SetScheduler (CreateObject<MapScheduler> ());
if (!RunOneTest ())
{
result = false;

View File

@@ -53,9 +53,9 @@ def build(bld):
'time.cc',
'event-id.cc',
'scheduler.cc',
'scheduler-list.cc',
'scheduler-heap.cc',
'scheduler-map.cc',
'list-scheduler.cc',
'map-scheduler.cc',
'heap-scheduler.cc',
'event-impl.cc',
'simulator.cc',
'timer.cc',
@@ -71,9 +71,9 @@ def build(bld):
'event-impl.h',
'simulator.h',
'scheduler.h',
'scheduler-list.h',
'scheduler-map.h',
'scheduler-heap.h',
'list-scheduler.h',
'map-scheduler.h',
'heap-scheduler.h',
'simulation-singleton.h',
'timer.h',
'timer-impl.h',

View File

@@ -18,11 +18,8 @@
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#include "ns3/simulator.h"
#include "ns3/scheduler-list.h"
#include "ns3/scheduler-map.h"
#include "ns3/scheduler-heap.h"
#include "ns3/system-wall-clock-ms.h"
#include "ns3/simulator-module.h"
#include "ns3/core-module.h"
#include <iostream>
#include <fstream>
#include <vector>
@@ -161,15 +158,15 @@ int main (int argc, char *argv[])
{
if (strcmp ("--list", argv[0]) == 0)
{
Simulator::SetScheduler (CreateObject<SchedulerList> ());
Simulator::SetScheduler (CreateObject<ListScheduler> ());
}
else if (strcmp ("--heap", argv[0]) == 0)
{
Simulator::SetScheduler (CreateObject<SchedulerHeap> ());
Simulator::SetScheduler (CreateObject<HeapScheduler> ());
}
else if (strcmp ("--map", argv[0]) == 0)
{
Simulator::SetScheduler (CreateObject<SchedulerMap> ());
Simulator::SetScheduler (CreateObject<MapScheduler> ());
}
else if (strcmp ("--debug", argv[0]) == 0)
{

View File

@@ -18,12 +18,8 @@
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#include "ns3/simulator.h"
#include "ns3/scheduler-list.h"
#include "ns3/scheduler-map.h"
#include "ns3/scheduler-heap.h"
#include "ns3/nstime.h"
#include "ns3/system-wall-clock-ms.h"
#include "ns3/simulator-module.h"
#include "ns3/core-module.h"
#include <vector>
#include <deque>
#include <fstream>
@@ -317,15 +313,15 @@ int main (int argc, char *argv[])
{
if (is_map)
{
Simulator::SetScheduler (CreateObject<SchedulerMap> ());
Simulator::SetScheduler (CreateObject<MapScheduler> ());
}
else if (is_list)
{
Simulator::SetScheduler (CreateObject<SchedulerList> ());
Simulator::SetScheduler (CreateObject<ListScheduler> ());
}
else if (is_heap)
{
Simulator::SetScheduler (CreateObject<SchedulerHeap> ());
Simulator::SetScheduler (CreateObject<HeapScheduler> ());
}
log.Run ();
Simulator::Destroy ();