NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.3: NDN, CCN, CCNx, content centric networks
API Documentation
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
ndnSIM
ndnSIM documentation
All Attributes
All GlobalValues
All LogComponents
All TraceSources
Todo List
Deprecated List
Modules
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
scheduler.cpp
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2013-2017 Regents of the University of California.
4
*
5
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6
*
7
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
8
* terms of the GNU Lesser General Public License as published by the Free Software
9
* Foundation, either version 3 of the License, or (at your option) any later version.
10
*
11
* ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14
*
15
* You should have received copies of the GNU General Public License and GNU Lesser
16
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17
* <http://www.gnu.org/licenses/>.
18
*
19
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20
*/
21
22
#include "
scheduler.hpp
"
23
#include "
detail/monotonic-deadline-timer.hpp
"
24
25
#include <boost/scope_exit.hpp>
26
27
namespace
ns3
{
28
30
31
template
<>
32
struct
EventMemberImplObjTraits<
std
::function<void()>> {
33
typedef
std::function<void()> T;
34
static
T&
35
GetReference(T& p)
36
{
37
return
p;
38
}
39
};
40
42
43
}
// namespace ns3
44
45
namespace
ndn
{
46
namespace
util {
47
namespace
scheduler {
48
49
Scheduler::Scheduler(boost::asio::io_service& ioService)
50
: m_scheduledEvent(m_events.end())
51
{
52
}
53
54
Scheduler::~Scheduler
()
55
{
56
cancelAllEvents
();
57
}
58
59
EventId
60
Scheduler::scheduleEvent
(
const
time::nanoseconds& after,
const
Event
& event)
61
{
62
EventId
eventId = std::make_shared<ns3::EventId>();
63
weak_ptr<ns3::EventId> eventWeak = eventId;
64
std::function<void()> eventWithCleanup = [
this
, event, eventWeak] () {
65
event();
66
shared_ptr<ns3::EventId> eventId = eventWeak.lock();
67
if
(eventId !=
nullptr
) {
68
this->m_events.erase(eventId);
// remove the event from the set after it is executed
69
}
70
};
71
72
ns3::EventId
id
= ns3::Simulator::Schedule(ns3::NanoSeconds(after.count()),
73
&std::function<
void
()>::operator(), eventWithCleanup);
74
*eventId = std::move(
id
);
75
m_events.insert(eventId);
76
77
return
eventId;
78
}
79
80
void
81
Scheduler::cancelEvent
(
const
EventId
& eventId)
82
{
83
if
(eventId !=
nullptr
) {
84
ns3::Simulator::Remove(*eventId);
85
const_cast<
EventId
&
>
(eventId).reset();
86
m_events.erase(eventId);
87
}
88
}
89
90
void
91
Scheduler::cancelAllEvents
()
92
{
93
for
(
auto
i = m_events.begin(); i != m_events.end(); ) {
94
auto
next = i;
95
++next;
// ns3::Simulator::Remove can call cancelEvent
96
if
((*i) !=
nullptr
) {
97
ns3::Simulator::Remove((**i));
98
const_cast<
EventId
&
>
(*i).reset();
99
}
100
i = next;
101
}
102
m_events.clear();
103
}
104
105
}
// namespace scheduler
106
}
// namespace util
107
}
// namespace ndn
ndn
Copyright (c) 2011-2015 Regents of the University of California.
Definition:
ndn-strategy-choice-helper.hpp:34
monotonic-deadline-timer.hpp
std
STL namespace.
ndn::util::scheduler::Scheduler::scheduleEvent
EventId scheduleEvent(const time::nanoseconds &after, const Event &event)
Schedule a one-time event after the specified delay.
Definition:
scheduler.cpp:60
ndn::util::scheduler::Scheduler::cancelEvent
void cancelEvent(const EventId &eventId)
Cancel a scheduled event.
Definition:
scheduler.cpp:81
ndn::util::scheduler::Scheduler::cancelAllEvents
void cancelAllEvents()
Cancel all scheduled events.
Definition:
scheduler.cpp:91
ndn::util::scheduler::EventId
std::shared_ptr< ns3::EventId > EventId
Definition:
scheduler.hpp:48
EventId
Opaque type (shared_ptr) representing ID of a scheduled event.
ndn::util::scheduler::Scheduler::~Scheduler
~Scheduler()
Definition:
scheduler.cpp:54
ns3
Copyright (c) 2011-2015 Regents of the University of California.
Definition:
content-store-impl.cpp:38
scheduler.hpp
ndn::util::scheduler::Scheduler::Event
EventCallback Event
Definition:
scheduler.hpp:59
ndnSIM
ndn-cxx
src
util
scheduler.cpp
Generated on Thu Nov 2 2017 03:30:29 for ndnSIM by
1.8.11