aboutsummaryrefslogtreecommitdiff
path: root/src/containers/priority_queue.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/containers/priority_queue.hh')
-rw-r--r--src/containers/priority_queue.hh94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/containers/priority_queue.hh b/src/containers/priority_queue.hh
deleted file mode 100644
index b48353e..0000000
--- a/src/containers/priority_queue.hh
+++ /dev/null
@@ -1,94 +0,0 @@
-#ifndef TIBIA_PRIORITY_QUEUE_HH_
-#define TIBIA_PRIORITY_QUEUE_HH_ 1
-
-#include "main.hh"
-#include "vector.hh"
-
-template<typename K, typename T>
-struct priority_queue_entry{
- K Key;
- T Data;
-};
-
-template<typename K, typename T>
-struct priority_queue{
- // REGULAR FUNCTIONS
- // =========================================================================
- priority_queue(int capacity, int increment){
- Entry = new vector<priority_queue_entry<K, T>>(1, capacity, increment);
- Entries = 0;
- }
-
- // TODO(fusion): Probably missing some inlined destructor?
-
- void insert(K Key, T *Data){
- this->Entries += 1;
- int CurrentIndex = this->Entries;
- *this->Entry->at(CurrentIndex) = {Key, *Data};
- while(CurrentIndex > 1){
- int ParentIndex = CurrentIndex / 2;
- priority_queue_entry<K, T> *Current = this->Entry->at(CurrentIndex);
- priority_queue_entry<K, T> *Parent = this->Entry->at(ParentIndex);
- if(Parent->Key <= Current->Key)
- break;
- std::swap(*Current, *Parent);
- CurrentIndex = ParentIndex;
- }
- }
-
- void deleteMin(void){
- if(this->Entries < 1){
- error("priority_queue::deleteMin: Warteschlange ist leer.\n");
- return;
- }
-
- if(this->Entries > 1){
- int CurrentIndex = 1;
- int LastIndex = this->Entries;
- std::swap(*this->Entry->at(CurrentIndex),
- *this->Entry->at(LastIndex));
-
- // TODO(fusion): This may be an oversight but the decompiled version
- // checks in the loop below would INCLUDE `LastIndex`, which I assume
- // is a bug? The first and last elements were just swapped and what
- // was the first element in the queue is now at the end and should be
- // considered "removed".
- while(1){
- int SmallestIndex = CurrentIndex * 2;
- if(SmallestIndex >= LastIndex){
- break;
- }
-
- priority_queue_entry<K, T> *Smallest = this->Entry->at(SmallestIndex);
- if((SmallestIndex + 1) < LastIndex){
- priority_queue_entry<K, T> *Other = this->Entry->at(SmallestIndex + 1);
- if(Other->Key < Smallest->Key){
- Smallest = Other;
- SmallestIndex += 1;
- }
- }
-
- priority_queue_entry<K, T> *Current = this->Entry->at(CurrentIndex);
- if(Current->Key <= Smallest->Key){
- break;
- }
-
- std::swap(*Current, *Smallest);
- CurrentIndex = SmallestIndex;
- }
- }
-
- this->Entries -= 1;
- }
-
- // DATA
- // =========================================================================
- vector<priority_queue_entry<K, T>> *Entry;
- int Entries;
-};
-
-// TODO(fusion): We only use this structure two global queues:
-// priority_queue<uint32, uint32> ToDoQueue(5000, 1000);
-// priority_queue<uint32, TAttackWave*> AttackWaveQueue(100, 100);
-
-#endif //TIBIA_PRIORITY_QUEUE_HH_