src/simulator/scheduler-heap.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 12 Dec 2006 14:30:44 +0100
changeset 193 bc1e348fd2e6
parent 188 1d26db54338c
child 195 c4a63ac2c5de
permissions -rw-r--r--
optimize Binary Heap comparison operator
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
 * All rights reserved.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * 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
     8
 * 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
     9
 * published by the Free Software Foundation;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * 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
    12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * GNU General Public License for more details.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * 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
    17
 * 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
    18
 * 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
    19
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
 * This code started as a c++ translation of a java-based code written in 2005
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
 * to implement a heap sort. Which explains the Copyright Mathieu Lacage at the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
 * top of this file.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
 * What is smart about this code ?
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
 *  - 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
    28
 *    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
    29
 *    (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
    30
 *    the index of the root is 1.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
 *  - 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
    32
 *    to move one if statement out of the loop.
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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
#include "scheduler-heap.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"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
#include <cassert>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
#define noTRACE_HEAP 1
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
#ifdef TRACE_HEAP
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
# define TRACE(x) \
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
std::cout << "HEAP TRACE " << x << std::endl;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
#else /* TRACE_HEAP */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
# define TRACE(format,...)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
#endif /* TRACE_HEAP */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
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
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
    52
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
SchedulerHeap::SchedulerHeap ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    56
  // we purposedly waste an item at the start of
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    57
  // the array to make sure the indexes in the
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    58
  // array start at one.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    59
  Scheduler::EventKey emptyKey = {0,0};
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    60
  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
    61
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
SchedulerHeap::~SchedulerHeap ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
{}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    67
SchedulerHeap::Parent (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    69
  return id / 2;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    72
SchedulerHeap::Sibling (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    74
  return id + 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    77
SchedulerHeap::LeftChild (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    79
  return id * 2;
9
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
uint32_t 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    82
SchedulerHeap::RightChild (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    84
  return id * 2 + 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
}
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::Root (void) 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 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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
    94
SchedulerHeap::IsRoot (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
    96
  return (id == Root ())?true:false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
uint32_t
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   100
SchedulerHeap::Last (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   102
  return m_heap.size () - 1;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   107
SchedulerHeap::IsBottom (uint32_t id) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   109
  return (id >= m_heap.size ())?true:false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   113
SchedulerHeap::Exch (uint32_t a, uint32_t b) 
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   115
  assert (b < m_heap.size () && a < m_heap.size ());
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   116
  TRACE ("Exch " << a << ", " << b);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   117
  std::pair<EventImpl*, Scheduler::EventKey> tmp (m_heap[a]);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   118
  m_heap[a] = m_heap[b];
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   119
  m_heap[b] = tmp;
9
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
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   123
SchedulerHeap::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
{
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   125
  if (a->m_ns < b->m_ns)
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   126
    {
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   127
      return true;
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   128
    }
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   129
  else if (a->m_ns == b->m_ns &&
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   130
           a->m_uid < b->m_uid)
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   131
    {
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   132
      return true;
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   133
    }
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   134
  else
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   135
    {
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   136
      return false;
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   137
    }
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   138
}
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   139
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   140
bool
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   141
SchedulerHeap::IsLess (uint32_t a, uint32_t b) const
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 IsLower (&m_heap[a].second, &m_heap[b].second);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
uint32_t 
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   147
SchedulerHeap::Smallest (uint32_t a, uint32_t b) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   149
  return IsLess (a,b)?a:b;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   153
SchedulerHeap::RealIsEmpty (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   155
  return (m_heap.size () == 1)?true:false;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   159
SchedulerHeap::BottomUp (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   161
  uint32_t index = Last ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   162
  while (!IsRoot (index) && 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   163
         IsLess (index, Parent (index))) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   164
    { 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   165
      Exch(index, Parent (index)); 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   166
      index = Parent (index); 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   167
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
}
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
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   171
SchedulerHeap::TopDown (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   173
  uint32_t index = Root ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   174
  uint32_t right = RightChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   175
  while (!IsBottom (right)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   176
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   177
      uint32_t left = LeftChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   178
      uint32_t tmp = Smallest (left, right);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   179
      if (IsLess (index, tmp)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   180
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   181
          return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   182
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   183
      Exch (index, tmp);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   184
      index = tmp;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   185
      right = RightChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   186
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   187
  if (IsBottom (index)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   188
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   189
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   190
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   191
  assert (!IsBottom (index));
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   192
  uint32_t left = LeftChild (index);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   193
  if (IsBottom (left)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   194
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   195
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   196
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   197
  if (IsLess (index, left)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   198
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   199
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   200
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   201
  Exch (index, left);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   205
EventId
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   206
SchedulerHeap::RealInsert (EventImpl *event, Scheduler::EventKey key)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   208
  m_heap.push_back (std::make_pair (event, key));
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   209
  BottomUp ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   210
  return EventId (event, key.m_ns, key.m_uid);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   213
EventImpl *
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   214
SchedulerHeap::RealPeekNext (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   216
  return m_heap[Root ()].first;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
Scheduler::EventKey
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   219
SchedulerHeap::RealPeekNextKey (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   221
  return m_heap[Root ()].second;
9
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
void     
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   224
SchedulerHeap::RealRemoveNext (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   226
  Exch (Root (), Last ());
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   227
  m_heap.pop_back ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   228
  TopDown ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   231
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   232
EventImpl *
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   233
SchedulerHeap::RealRemove (EventId id, Scheduler::EventKey *key)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
{
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   235
  uint32_t top;
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   236
  uint32_t bottom;
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   237
  bottom = 1;
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   238
  top = Last ();
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   239
  key->m_ns = id.GetNs ();
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   240
  key->m_uid = id.GetUid ();
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   241
  while (top != bottom)
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   242
    {
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   243
      uint32_t i = bottom + (top - bottom) / 2;
193
bc1e348fd2e6 optimize Binary Heap comparison operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 188
diff changeset
   244
      if (IsLower (key, &m_heap[i].second))
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   245
        {
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   246
          top = i;
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   247
        }
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   248
      else
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   249
        {
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   250
          bottom = i;
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   251
        }
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   252
    }
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   253
  assert (top == bottom);
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   254
  assert (m_heap[top].second.m_uid == id.GetUid ());
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   255
  EventImpl *retval = m_heap[top].first;
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   256
  Exch (top, Last ());
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   257
  m_heap.pop_back ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 132
diff changeset
   258
  TopDown ();
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   259
  return retval;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   262
bool 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 119
diff changeset
   263
SchedulerHeap::RealIsValid (EventId id)
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   264
{
186
a6a7a9ae74d9 make SchedulerHeap not use the internal iterator void *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   265
  return true;
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   266
}
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
   267
}; // namespace ns3
188
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   268
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   269
#ifdef RUN_SELF_TESTS
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   270
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   271
#include "ns3/test.h"
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   272
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   273
namespace ns3 {
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   274
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   275
class SchedulerHeapTest : public Test 
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   276
{
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   277
public:
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   278
  SchedulerHeapTest ();
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   279
  virtual ~SchedulerHeapTest ();
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   280
  virtual bool RunTests (void);
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   281
};
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   282
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   283
SchedulerHeapTest::SchedulerHeapTest ()
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   284
  : Test ("SchedulerHeap")
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   285
{}
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   286
SchedulerHeapTest::~SchedulerHeapTest ()
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   287
{}
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   288
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   289
bool 
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   290
SchedulerHeapTest::RunTests (void)
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   291
{
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   292
  bool ok = true;
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   293
  return ok;
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   294
}
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   295
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   296
static SchedulerHeapTest g_schedulerHeapTest;
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   297
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   298
}; // namespace ns3
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   299
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   300
1d26db54338c add empty binary heap test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 186
diff changeset
   301
#endif /* RUN_SELF_TESTS */