ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
Gluco2::Heap2< Comp, Obj > Class Template Reference

#include <Heap2.h>

Public Member Functions

 Heap2 (const Comp &c)
 
int size () const
 
bool empty () const
 
bool inHeap (int n) const
 
int operator[] (int index) const
 
void decrease (int n)
 
void increase (int n)
 
void prelocate (int ext_cap)
 
int data_attr (int n) const
 
void update (const Obj &x)
 
void insert (const Obj &x)
 
int removeMin (int &_attr)
 
void clear (bool dealloc=false)
 
void clear_ (bool dealloc=false)
 

Detailed Description

template<class Comp, class Obj>
class Gluco2::Heap2< Comp, Obj >

Definition at line 35 of file Heap2.h.

Constructor & Destructor Documentation

◆ Heap2()

template<class Comp, class Obj>
Gluco2::Heap2< Comp, Obj >::Heap2 ( const Comp & c)
inline

Definition at line 79 of file Heap2.h.

79: lt(c) { }

Member Function Documentation

◆ clear()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::clear ( bool dealloc = false)
inline

Definition at line 145 of file Heap2.h.

146 {
147 int i;
148 for (i = 0; i < heap.size(); i++)
149 indices[heap[i].data()] = -1;
150 heap.clear(dealloc);
151 }
void clear(bool dealloc=false)
Definition Heap2.h:145
int size() const
Definition Heap2.h:81

◆ clear_()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::clear_ ( bool dealloc = false)
inline

Definition at line 152 of file Heap2.h.

153 {
154 int i;
155 for (i = 0; i < heap.size(); i++)
156 indices[heap[i].data()] = -1;
157
158 if( ! dealloc ) heap.shrink_( heap.size() );
159 else heap.clear(true);
160 }

◆ data_attr()

template<class Comp, class Obj>
int Gluco2::Heap2< Comp, Obj >::data_attr ( int n) const
inline

Definition at line 90 of file Heap2.h.

90{ return heap[indices[n]].attr(); }

◆ decrease()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::decrease ( int n)
inline

Definition at line 87 of file Heap2.h.

87{ assert(inHeap(n)); percolateUp (indices[n]); }
bool inHeap(int n) const
Definition Heap2.h:83
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:

◆ empty()

template<class Comp, class Obj>
bool Gluco2::Heap2< Comp, Obj >::empty ( ) const
inline

Definition at line 82 of file Heap2.h.

82{ return heap.size() == 0; }

◆ increase()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::increase ( int n)
inline

Definition at line 88 of file Heap2.h.

88{ assert(inHeap(n)); percolateDown(indices[n]); }
Here is the call graph for this function:

◆ inHeap()

template<class Comp, class Obj>
bool Gluco2::Heap2< Comp, Obj >::inHeap ( int n) const
inline

Definition at line 83 of file Heap2.h.

83{ return n < indices.size() && indices[n] >= 0; }
Here is the caller graph for this function:

◆ insert()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::insert ( const Obj & x)
inline

Definition at line 104 of file Heap2.h.

105 {
106 int n = x.data();
107 indices.growTo(n+1, -1);
108 assert(!inHeap(n));
109
110 indices[n] = heap.size();
111 heap.push(x);
112 percolateUp(indices[n]);
113 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator[]()

template<class Comp, class Obj>
int Gluco2::Heap2< Comp, Obj >::operator[] ( int index) const
inline

Definition at line 84 of file Heap2.h.

84{ assert(index < heap.size()); return heap[index].data(); }

◆ prelocate()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::prelocate ( int ext_cap)
inline

Definition at line 89 of file Heap2.h.

89{ indices.prelocate(ext_cap); }

◆ removeMin()

template<class Comp, class Obj>
int Gluco2::Heap2< Comp, Obj >::removeMin ( int & _attr)
inline

Definition at line 116 of file Heap2.h.

117 {
118 Obj x = heap[0];
119 heap[0] = heap.last();
120 indices[heap[0].data()] = 0;
121 indices[x.data()]= -1;
122 heap.pop();
123 if (heap.size() > 1) percolateDown(0);
124 //prev = x;
125 _attr = x.attr();
126 return x.data();
127 }

◆ size()

template<class Comp, class Obj>
int Gluco2::Heap2< Comp, Obj >::size ( ) const
inline

Definition at line 81 of file Heap2.h.

81{ return heap.size(); }

◆ update()

template<class Comp, class Obj>
void Gluco2::Heap2< Comp, Obj >::update ( const Obj & x)
inline

Definition at line 92 of file Heap2.h.

93 {
94 int n = x.data();
95 if (!inHeap(n))
96 insert(x);
97 else {
98 heap[indices[x.data()]] = x;
99 percolateUp(indices[n]);
100 percolateDown(indices[n]); }
101 }
void insert(const Obj &x)
Definition Heap2.h:104
Here is the call graph for this function:

The documentation for this class was generated from the following file: