src/contrib/event-garbage-collector.cc
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Thu, 06 Dec 2007 11:05:17 +0000
changeset 1878 f947cd18f0bb
parent 1778 src/routing/olsr/event-garbage-collector.cc@ae7c637dfa8e
child 5318 7802ee909df7
permissions -rw-r--r--
Create a new contrib module; move event-garbage-collector.{h,cc} to the contrib module.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1671
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     2
/*
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     3
 * Copyright (c) 2007 INESC Porto
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     4
 *
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     8
 *
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    12
 * GNU General Public License for more details.
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    13
 *
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    17
 *
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    18
 * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    19
 */
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    20
#include "event-garbage-collector.h"
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    21
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    22
#define CLEANUP_CHUNK_MIN_SIZE 8
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    23
#define CLEANUP_CHUNK_MAX_SIZE 128
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    24
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    25
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    26
namespace ns3 {
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    27
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    28
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    29
EventGarbageCollector::EventGarbageCollector () :
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    30
  m_nextCleanupSize (CLEANUP_CHUNK_MIN_SIZE)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    31
{}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    32
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    33
void
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    34
EventGarbageCollector::Track (EventId event)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    35
{
1769
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    36
  m_events.insert (event);
1671
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    37
  if (m_events.size () >= m_nextCleanupSize)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    38
    Cleanup ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    39
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    40
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    41
void
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    42
EventGarbageCollector::Grow ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    43
{
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    44
  m_nextCleanupSize += (m_nextCleanupSize < CLEANUP_CHUNK_MAX_SIZE?
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    45
                        m_nextCleanupSize : CLEANUP_CHUNK_MAX_SIZE);
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    46
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    47
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    48
void
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    49
EventGarbageCollector::Shrink ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    50
{
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    51
  while (m_nextCleanupSize > m_events.size ())
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    52
    m_nextCleanupSize >>= 1;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    53
  Grow ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    54
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    55
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    56
// Called when a new event was added and the cleanup limit was exceeded in consequence.
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    57
void
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    58
EventGarbageCollector::Cleanup ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    59
{
1769
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    60
  for (EventList::iterator iter = m_events.begin (); iter != m_events.end ();)
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    61
    {
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    62
      if ((*iter).IsExpired ())
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    63
        {
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    64
          m_events.erase (iter++);
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    65
        }
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    66
      else
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    67
        break; // EventIds are sorted by timestamp => further events are not expired for sure
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    68
    }
1671
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    69
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    70
  // If after cleanup we are still over the limit, increase the limit.
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    71
  if (m_events.size () >= m_nextCleanupSize)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    72
    Grow ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    73
  else
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    74
    Shrink ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    75
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    76
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    77
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    78
EventGarbageCollector::~EventGarbageCollector ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    79
{
1769
0ca4a39dca8b Optimize EventGarbageCollector by using std::multiset with EventIds sorted by expiration time.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1768
diff changeset
    80
  for (EventList::iterator event = m_events.begin ();
1671
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    81
       event != m_events.end (); event++)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    82
    {
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    83
      Simulator::Cancel (*event);
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    84
    }
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    85
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    86
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    87
}; // namespace ns3
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    88
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    89
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    90
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    91
#ifdef RUN_SELF_TESTS
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    92
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    93
#include "ns3/test.h"
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    94
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    95
namespace ns3 {
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    96
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    97
class EventGarbageCollectorTests : public Test
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    98
{
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    99
  int m_counter;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   100
  EventGarbageCollector *m_events;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   101
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   102
  void EventGarbageCollectorCallback ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   103
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   104
public:
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   105
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   106
  EventGarbageCollectorTests ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   107
  virtual ~EventGarbageCollectorTests ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   108
  virtual bool RunTests (void);
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   109
};
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   110
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   111
EventGarbageCollectorTests::EventGarbageCollectorTests ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   112
  : Test ("EventGarbageCollector"), m_counter (0), m_events (0)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   113
{}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   114
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   115
EventGarbageCollectorTests::~EventGarbageCollectorTests ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   116
{}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   117
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   118
void
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   119
EventGarbageCollectorTests::EventGarbageCollectorCallback ()
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   120
{
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   121
  m_counter++;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   122
  if (m_counter == 50)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   123
    {
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   124
      // this should cause the remaining (50) events to be cancelled
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   125
      delete m_events;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   126
      m_events = 0;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   127
    }
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   128
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   129
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   130
bool EventGarbageCollectorTests::RunTests (void)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   131
{
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   132
  bool result = true;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   133
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   134
  m_events = new EventGarbageCollector ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   135
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   136
  for (int n = 0; n < 100; n++)
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   137
    {
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   138
      m_events->Track (Simulator::Schedule
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   139
                       (Simulator::Now (),
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   140
                        &EventGarbageCollectorTests::EventGarbageCollectorCallback,
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   141
                        this));
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   142
    }
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   143
  Simulator::Run ();
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   144
  NS_TEST_ASSERT_EQUAL (m_events, 0);
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   145
  NS_TEST_ASSERT_EQUAL (m_counter, 50);
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   146
  return result;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   147
}
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   148
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   149
static EventGarbageCollectorTests g_eventCollectorTests;
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   150
    
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   151
};
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   152
878a9e02bcd6 Event Garbage Collector
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   153
#endif /* RUN_SELF_TESTS */