2026-03-17 22:05:59 -06:00
|
|
|
#include "queue.h"
|
|
|
|
|
#include "utils.h"
|
2026-03-17 20:33:42 -06:00
|
|
|
#include <cstdlib>
|
|
|
|
|
#include <print>
|
|
|
|
|
|
2026-03-17 22:05:59 -06:00
|
|
|
void menu(Queue<int> queue);
|
|
|
|
|
|
2026-03-17 20:33:42 -06:00
|
|
|
int main(void) {
|
2026-03-17 22:05:59 -06:00
|
|
|
Queue<int> queue = {};
|
|
|
|
|
|
|
|
|
|
menu(queue);
|
2026-03-17 20:33:42 -06:00
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|
}
|
2026-03-17 22:05:59 -06:00
|
|
|
|
|
|
|
|
void menu(Queue<int> queue) {
|
|
|
|
|
while (true) {
|
|
|
|
|
clear_screen();
|
|
|
|
|
std::println("---Queue Manager---");
|
|
|
|
|
std::println("1) Enqueue.");
|
|
|
|
|
std::println("2) Dequeue.");
|
|
|
|
|
std::println("3) Peek.");
|
|
|
|
|
std::println("4) Diplay.");
|
|
|
|
|
std::println("5) Exit.");
|
|
|
|
|
int choice;
|
|
|
|
|
|
|
|
|
|
if (!read_int("", &choice)) {
|
|
|
|
|
std::println("Invalid input.");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
clear_screen();
|
|
|
|
|
switch (choice) {
|
|
|
|
|
case 1: {
|
|
|
|
|
int input;
|
|
|
|
|
|
|
|
|
|
if (!read_int("Type the integer to enqueue:\n", &input)) {
|
|
|
|
|
std::println("Invalid input.");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (queue.enqueue(input) == QueueErr::bad_alloc) {
|
|
|
|
|
std::println("Program couldn't allocate memory for queue.");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::println("Integer {} was correclty enqueued.", input);
|
|
|
|
|
wait_enter();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 2: {
|
|
|
|
|
auto out = queue.dequeue();
|
|
|
|
|
if (!out.has_value() && out.error() == QueueErr::empty) {
|
|
|
|
|
std::println("The queue is empty.");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
} else if (!out.has_value() && out.error() == QueueErr::bad_alloc) {
|
|
|
|
|
std::println("Program couldn't allocate memory for queue");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::println("The element at the tail was {}.", out.value());
|
|
|
|
|
wait_enter();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 3: {
|
|
|
|
|
auto out = queue.peek();
|
|
|
|
|
if (!out.has_value() && out.error() == QueueErr::empty) {
|
|
|
|
|
std::println("The queue is empty.");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
} else if (!out.has_value() && out.error() == QueueErr::bad_alloc) {
|
|
|
|
|
std::println("Program couldn't allocate memory for queue");
|
|
|
|
|
wait_enter();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::println("The element at the tail was {}.", out.value());
|
|
|
|
|
wait_enter();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
case 4: {
|
|
|
|
|
queue.print();
|
|
|
|
|
wait_enter();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 5: {
|
|
|
|
|
std::println("Goodbye :)");
|
|
|
|
|
wait_enter();
|
|
|
|
|
clear_screen();
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
std::println("Invalid option.");
|
|
|
|
|
wait_enter();
|
|
|
|
|
clear_screen();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|