|
|
- #ifndef C_SRC_PRIORITY_QUEUE_H_
- #define C_SRC_PRIORITY_QUEUE_H_
-
- #include "macros.h"
-
- typedef bool(*LessFun)(void*, void*);
- typedef void(*UpdatePositionFun)(void*, int);
- typedef void(*DestroyElementFun)(void*);
-
- class PriorityQueue
- {
- public:
-
- PriorityQueue(LessFun ls, UpdatePositionFun upd, DestroyElementFun dtor);
- ~PriorityQueue();
-
- bool insert(void* item);
- bool remove(void* item, int pos);
- void* remove(int pos);
- void* pop() {return remove(0);}
- void* peek();
- int size() const { return length_;}
-
- private:
-
- inline void set(int pos, void* item);
- inline void pos_swap(int pos1, int pos2);
- void bubble_down(int pos);
- void bubble_up(int pos);
-
- int capacity_;
- int length_;
- void** heap_;
- LessFun less_;
- UpdatePositionFun update_pos_fun_;
- DestroyElementFun item_dtor_;
-
- DISALLOW_COPY_AND_ASSIGN(PriorityQueue);
- };
-
- #endif // C_SRC_PRIORITY_QUEUE_H_
|