00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef TIL_PRIORITY_QUEUE_H
00021 #define TIL_PRIORITY_QUEUE_H
00022
00023 #include "TIL_API.h"
00024 #include "TIL_HoldingQueue.h"
00025
00026 typedef TIL_HoldingNode TIL_PNode;
00027
00028
00029 class TIL_API TIL_PriorityQueue
00030 {
00031 public:
00032
00033
00034
00035
00036
00037
00038 TIL_PriorityQueue(unsigned int nbuckets,
00039 unsigned int bucket_range,
00040 unsigned int max_entries);
00041 ~TIL_PriorityQueue();
00042
00043
00044 void add(TIL_PNode *node, unsigned int priority);
00045 void remove(TIL_PNode *node);
00046
00047
00048 TIL_PNode *pop();
00049
00050 bool isEmpty() const;
00051
00052 void empty(bool delete_nodes = true);
00053
00054
00055 void setPriorityRange(unsigned int bucket_range);
00056 unsigned int getPriorityRange() const { return myBucketPriority; }
00057
00058
00059
00060 void setMaxSize(unsigned int size);
00061 unsigned int getMaxBucketSize(int bn) const { return myMaxBucketSize[bn]; }
00062
00063 unsigned int getNumBuckets() const { return myNumBuckets; }
00064 unsigned int getBucketSize(int bucket) const;
00065
00066 int traverse(int (*tfunc)(TIL_PNode *, void *), void *data);
00067
00068 private:
00069 TIL_HoldingQueue *myBuckets;
00070 unsigned int *myMaxBucketSize;
00071 unsigned int myNumBuckets;
00072 unsigned int myBucketPriority;
00073 };
00074
00075 #endif