1

first implementation of queue

This commit is contained in:
churl
2022-06-05 15:52:06 +02:00
parent 2ae21b274a
commit 4840c91707
2 changed files with 62 additions and 7 deletions

57
c_os/lib/Queue.cc Normal file
View File

@ -0,0 +1,57 @@
#include "Queue.h"
#include <cstddef>
// #include <iostream>
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 (&current->next != this->tail) {
// More than one element in queue
current = current->next;
// std::cout << current->val << " ";
}
// std::cout << std::endl;
}
*/

12
c_os/lib/Queue.h Executable file → Normal file
View File

@ -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