src/simulator/scheduler-heap.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 08 Oct 2007 15:54:36 +0200
changeset 1696 0de65f4c8c43
parent 1012 7b923896f33b
child 2577 5b41cb5c3fcf
permissions -rw-r--r--
remove 'All rights reserved' mention
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2006 INRIA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * Copyright (c) 2005 Mathieu Lacage
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
 * This code started as a c++ translation of a java-based code written in 2005
1696
0de65f4c8c43 remove 'All rights reserved' mention
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1012
diff changeset
    22
 * to implement a heap sort. Which explains the "Copyright Mathieu Lacage" at the
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
 * top of this file.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
 * What is smart about this code ?
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
 *  - it does not use the index 0 in the array to avoid having to convert
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
 *    C-style array indexes (which start at zero) and heap-style indexes
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
 *    (which start at 1). This is why _all_ indexes start at 1, and that
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
 *    the index of the root is 1.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
 *  - It uses a slightly non-standard while loop for top-down heapify
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
 *    to move one if statement out of the loop.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
 */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
#include "scheduler-heap.h"
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    35
#include "scheduler-factory.h"
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
    36
#include "event-impl.h"
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 206
diff changeset
    37
#include "ns3/assert.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
631
3620e5386e0d Fixed a gcc3.4.6 error for optimized builds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 439
diff changeset
    39
#include <string>
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
#define noTRACE_HEAP 1
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
#ifdef TRACE_HEAP
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
# define TRACE(x) \
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
std::cout << "HEAP TRACE " << x << std::endl;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
#else /* TRACE_HEAP */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
# define TRACE(format,...)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
#endif /* TRACE_HEAP */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
    53
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    55
static class SchedulerHeapFactory : public SchedulerFactory 
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    56
{
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    57
public:
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    58
  SchedulerHeapFactory ()
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    59
  {
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    60
    SchedulerFactory::Add (this, "BinaryHeap");
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    61
  }
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    62
private:
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    63
  virtual Scheduler *DoCreate (void) const
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    64
  {
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    65
    return new SchedulerHeap ();
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    66
  }
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    67
} g_schedulerHeapFactory;
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    68
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
    69
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
SchedulerHeap::SchedulerHeap ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    72
  // we purposedly waste an item at the start of
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    73
  // the array to make sure the indexes in the
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    74
  // array start at one.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    75
  Scheduler::EventKey emptyKey = {0,0};
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    76
  m_heap.push_back (std::make_pair (static_cast<EventImpl *>(0), emptyKey));
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
SchedulerHeap::~SchedulerHeap ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
{}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    83
SchedulerHeap::Parent (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    85
  return id / 2;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    88
SchedulerHeap::Sibling (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    90
  return id + 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    93
SchedulerHeap::LeftChild (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    95
  return id * 2;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    98
SchedulerHeap::RightChild (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   100
  return id * 2 + 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
uint32_t
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   104
SchedulerHeap::Root (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   106
  return 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   110
SchedulerHeap::IsRoot (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   112
  return (id == Root ())?true:false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
uint32_t
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   116
SchedulerHeap::Last (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   118
  return m_heap.size () - 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   123
SchedulerHeap::IsBottom (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   125
  return (id >= m_heap.size ())?true:false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   129
SchedulerHeap::Exch (uint32_t a, uint32_t b) 
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
{
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 206
diff changeset
   131
  NS_ASSERT (b < m_heap.size () && a < m_heap.size ());
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   132
  TRACE ("Exch " << a << ", " << b);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   133
  std::pair<EventImpl*, Scheduler::EventKey> tmp (m_heap[a]);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   134
  m_heap[a] = m_heap[b];
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   135
  m_heap[b] = tmp;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
bool
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   139
SchedulerHeap::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
{
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 631
diff changeset
   141
  if (a->m_ts < b->m_ts)
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   142
    {
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   143
      return true;
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   144
    }
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 631
diff changeset
   145
  else if (a->m_ts > b->m_ts)
195
c4a63ac2c5de optmize binary heap comparison
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 193
diff changeset
   146
    {
c4a63ac2c5de optmize binary heap comparison
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 193
diff changeset
   147
      return false;
c4a63ac2c5de optmize binary heap comparison
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 193
diff changeset
   148
    } 
c4a63ac2c5de optmize binary heap comparison
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 193
diff changeset
   149
  else if (a->m_uid < b->m_uid)
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   150
    {
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   151
      return true;
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   152
    }
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   153
  else
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   154
    {
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   155
      return false;
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   156
    }
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   157
}
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   158
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   159
bool
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   160
SchedulerHeap::IsLessStrictly (uint32_t a, uint32_t b) const
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   161
{
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   162
  return IsLowerStrictly (&m_heap[a].second, &m_heap[b].second);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
uint32_t 
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   166
SchedulerHeap::Smallest (uint32_t a, uint32_t b) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
{
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   168
  return IsLessStrictly (a,b)?a:b;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
bool
1009
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   172
SchedulerHeap::IsEmpty (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   174
  return (m_heap.size () == 1)?true:false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   177
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   178
SchedulerHeap::BottomUp (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   180
  uint32_t index = Last ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   181
  while (!IsRoot (index) && 
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   182
         IsLessStrictly (index, Parent (index))) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   183
    { 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   184
      Exch(index, Parent (index)); 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   185
      index = Parent (index); 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   186
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
void
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   190
SchedulerHeap::TopDown (uint32_t start)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
{
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   192
  uint32_t index = start;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   193
  uint32_t right = RightChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   194
  while (!IsBottom (right)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   195
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   196
      uint32_t left = LeftChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   197
      uint32_t tmp = Smallest (left, right);
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   198
      if (IsLessStrictly (index, tmp)) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   199
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   200
          return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   201
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   202
      Exch (index, tmp);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   203
      index = tmp;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   204
      right = RightChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   205
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   206
  if (IsBottom (index)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   207
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   208
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   209
    }
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 206
diff changeset
   210
  NS_ASSERT (!IsBottom (index));
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   211
  uint32_t left = LeftChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   212
  if (IsBottom (left)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   213
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   214
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   215
    }
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   216
  if (IsLessStrictly (index, left)) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   217
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   218
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   219
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   220
  Exch (index, left);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   224
void
1009
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   225
SchedulerHeap::Insert (const EventId &id)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
{
1008
6f2ea723a1db use a Ptr<> to manage EventImpl instances
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1005
diff changeset
   227
  // acquire single ref
1012
7b923896f33b remove GetEventImpl
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1009
diff changeset
   228
  EventImpl *event = id.PeekEventImpl ();
7b923896f33b remove GetEventImpl
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1009
diff changeset
   229
  event->Ref ();
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   230
  Scheduler::EventKey key;
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   231
  key.m_ts = id.GetTs ();
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   232
  key.m_uid = id.GetUid ();
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   233
  m_heap.push_back (std::make_pair (event, key));
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   234
  BottomUp ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   237
EventId
1009
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   238
SchedulerHeap::PeekNext (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
{
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   240
  std::pair<EventImpl *,Scheduler::EventKey> next = m_heap[Root ()];
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   241
  return EventId (next.first, next.second.m_ts, next.second.m_uid);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
}
1009
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   243
EventId
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   244
SchedulerHeap::RemoveNext (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
{
1008
6f2ea723a1db use a Ptr<> to manage EventImpl instances
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1005
diff changeset
   246
  std::pair<EventImpl *,Scheduler::EventKey> next = m_heap[Root ()];
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   247
  Exch (Root (), Last ());
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   248
  m_heap.pop_back ();
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   249
  TopDown (Root ());
1009
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   250
  return EventId (Ptr<EventImpl> (next.first, false), next.second.m_ts, next.second.m_uid);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   253
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   254
bool
1009
adc3ac9baea8 optimize EventImpl refcounting
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1008
diff changeset
   255
SchedulerHeap::Remove (const EventId &id)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
{
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   257
  uint32_t uid = id.GetUid ();
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   258
  for (uint32_t i = 1; i < m_heap.size (); i++)
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   259
    {
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   260
      if (uid == m_heap[i].second.m_uid)
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   261
        {
1012
7b923896f33b remove GetEventImpl
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1009
diff changeset
   262
          NS_ASSERT (m_heap[i].first == id.PeekEventImpl ());
1008
6f2ea723a1db use a Ptr<> to manage EventImpl instances
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1005
diff changeset
   263
          std::pair<EventImpl *,Scheduler::EventKey> next = m_heap[i];
6f2ea723a1db use a Ptr<> to manage EventImpl instances
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1005
diff changeset
   264
          // release single ref
6f2ea723a1db use a Ptr<> to manage EventImpl instances
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1005
diff changeset
   265
          next.first->Unref ();
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   266
          Exch (i, Last ());
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   267
          m_heap.pop_back ();
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   268
          TopDown (i);
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   269
          return true;
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   270
        }
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   271
    }
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 206
diff changeset
   272
  NS_ASSERT (false);
206
525ffa5b4d24 make Heap scheduler remove operation first perform a linear search to find the target location and then perform a correct remove through a top-down heapification
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 202
diff changeset
   273
  // quiet compiler
963
3a7a66d1942c add support to cancel Now and Destroy events.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 675
diff changeset
   274
  return false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
   277
}; // namespace ns3
188
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   278