diff --git a/c_os/lib/Queue.cc b/c_os/lib/Queue.cc new file mode 100644 index 0000000..c55eae4 --- /dev/null +++ b/c_os/lib/Queue.cc @@ -0,0 +1,57 @@ +#include "Queue.h" +#include +// #include + +void Queue::enqueue(Chain* item) { + // std::cout << "Enqueue " << item->val << std::endl; + + *this->tail = item; // If queue is empty tail points to head pointer, + this->tail = &item->next; // otherwise to last next pointer +} + +Chain* Queue::dequeue() { + if (*this->tail == this->head) { + // This should not ever happen as the idle thread exists always + // std::cout << "Dequeue called on empty queue." << std::endl; + return NULL; + } + + Chain* item = this->head; + this->head = this->head->next; // If *item was the only item this->head->next + // is equal to this->tail + + if (*this->tail == this->head) { + // Reset after last element was removed + this->head = 0; + this->tail = &this->head; + } + + // std::cout << "Dequeue " << item->val << std::endl; + + return item; +} + +void Queue::remove(Chain* item) {} + +/* +void Queue::print() const { + if (*this->tail == this->head) { + // Queue is empty + // std::cout << "List is empty!" << std::endl; + return; + } + + // std::cout << "List: "; + + Chain* current = this->head; + // std::cout << current->val << " "; // At least one element in queue + + while (¤t->next != this->tail) { + // More than one element in queue + current = current->next; + // std::cout << current->val << " "; + } + + // std::cout << std::endl; +} +*/ diff --git a/c_os/lib/Queue.h b/c_os/lib/Queue.h old mode 100755 new mode 100644 index 584516b..e057cb8 --- a/c_os/lib/Queue.h +++ b/c_os/lib/Queue.h @@ -23,22 +23,20 @@ #include "lib/Chain.h" class Queue { - private: - Queue(const Queue& copy); // Verhindere Kopieren + Queue(const Queue& copy) = delete; // Verhindere Kopieren protected: Chain* head; Chain** tail; public: - Queue() { - head = 0; - tail = &head; - } + Queue() : head(0), tail(&head) {} + void enqueue(Chain* item); Chain* dequeue(); - void remove(Chain*); + void remove(Chain* item); + // void print() const; }; #endif