From f9137ab6db4bc05afdc2f10f1abec2b3b1378bc1 Mon Sep 17 00:00:00 2001
From: j2-tulloch <james2.tulloch@live.uwe.ac.uk>
Date: Fri, 5 Jan 2024 14:48:54 +0000
Subject: [PATCH] Upload New File

---
 Assignment/Task 3/scheduler.cpp | 47 +++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
 create mode 100644 Assignment/Task 3/scheduler.cpp

diff --git a/Assignment/Task 3/scheduler.cpp b/Assignment/Task 3/scheduler.cpp
new file mode 100644
index 0000000..00e1c29
--- /dev/null
+++ b/Assignment/Task 3/scheduler.cpp	
@@ -0,0 +1,47 @@
+#include "scheduler.h"
+#include <iostream>
+
+void scheduler::yield(fiber* f) {
+    get_context(f->get_context());
+    
+    if (!f->finished()){
+      fibers_.push_back(f);
+    }
+    set_context(&context_);
+}
+
+scheduler::scheduler() {
+    // Initialization, if necessary
+}
+
+scheduler::~scheduler() {
+    // Clean up, if necessary
+}
+
+void scheduler::spawn(fiber* f) {
+    fibers_.push_back(f);
+}
+
+void scheduler::do_it() {
+    std::cout << "Entering" << std::endl;
+
+
+
+    get_context(&context_); // Save the scheduler's context
+ 
+    while (!fibers_.empty()) {
+           fiber* currentFiber = fibers_.front();
+           std::cout << "Switching fiber" << std::endl;
+           fibers_.pop_front(); // Remove the fiber from the queue
+           set_context(currentFiber->get_context()); // Switch to the fiber's context
+            
+           // After fiber finishes execution, control returns here
+           std::cout << " returning to scheduler" << std::endl;
+    }
+    std::cout << "Exiting" << std::endl;
+ }
+
+void scheduler::fiber_exit() {
+    set_context(&context_); // Switch back to the scheduler's context
+}
+
-- 
GitLab