#include "queue.h" #include "utils.h" #include #include void menu(Queue queue); int main(void) { Queue queue = {}; menu(queue); return EXIT_SUCCESS; } void menu(Queue 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; } } } }