A Discrete-Event Network Simulator
API
event-garbage-collector.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007 INESC Porto
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
19  */
21 
29 namespace ns3 {
30 
31 
33  : m_nextCleanupSize (CHUNK_INIT_SIZE),
34  m_events ()
35 {
36 }
37 
38 void
40 {
41  m_events.insert (event);
42  if (m_events.size () >= m_nextCleanupSize)
43  Cleanup ();
44 }
45 
46 void
48 {
51 }
52 
53 void
55 {
56  while (m_nextCleanupSize > m_events.size ())
57  m_nextCleanupSize >>= 1;
58  Grow ();
59 }
60 
61 // Called when a new event was added and
62 // the cleanup limit was exceeded in consequence.
63 void
65 {
66  for (EventList::iterator iter = m_events.begin (); iter != m_events.end ();)
67  {
68  if ((*iter).IsExpired ())
69  {
70  m_events.erase (iter++);
71  }
72  else
73  break; // EventIds are sorted by timestamp => further events are not expired for sure
74  }
75 
76  // If after cleanup we are still over the limit, increase the limit.
77  if (m_events.size () >= m_nextCleanupSize)
78  Grow ();
79  else
80  Shrink ();
81 }
82 
83 
85 {
86  for (auto event : m_events)
87  {
88  Simulator::Cancel (event);
89  }
90 }
91 
92 } // namespace ns3
93 
94 
static void Cancel(const EventId &id)
Set the cancel bit on this event: the event&#39;s associated function will not be invoked when it expires...
Definition: simulator.cc:346
void Grow()
Grow the cleanup limit.
void Cleanup()
Called when a new event was added and the cleanup limit was exceeded in consequence.
ns3::EventGarbageCollector declaration.
EventList m_events
The tracked event list.
const EventList::size_type CHUNK_MAX_SIZE
Threshold to switch from exponential to linear growth in the cleanup frequency.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
An identifier for simulation events.
Definition: event-id.h:53
EventList::size_type m_nextCleanupSize
Batch size for cleanup.
void Track(EventId event)
Tracks a new event.
void Shrink()
Shrink the cleanup limit Reduce the cleanup size by factors of two until less than the current event ...