From fb9202248c9fc613208546360266d1ef845abb71 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Wed, 28 Aug 2024 19:34:47 +0100 Subject: [PATCH] a little refactoring (different CML loops have their own files now) --- dotscape | Bin 975096 -> 975096 bytes dotscape.mlb | 5 ++- .../{event-loop.sml => draw-thread.sml} | 34 ++++++------------ imperative-shell/shell.sml | 4 +-- imperative-shell/update-thread.sml | 18 ++++++++++ 5 files changed, 34 insertions(+), 27 deletions(-) rename imperative-shell/{event-loop.sml => draw-thread.sml} (89%) create mode 100644 imperative-shell/update-thread.sml diff --git a/dotscape b/dotscape index 71ec9d334c0a440e5b91ffad71742ea30fdc67bf..ef0bc3d6348f4a22c5e3761121afec5d6e807316 100755 GIT binary patch delta 8680 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 diff --git a/dotscape.mlb b/dotscape.mlb index d389734..43b2e0a 100644 --- a/dotscape.mlb +++ b/dotscape.mlb @@ -42,5 +42,8 @@ in end imperative-shell/input-callbacks.sml -imperative-shell/event-loop.sml + +imperative-shell/update-thread.sml +imperative-shell/draw-thread.sml + imperative-shell/shell.sml diff --git a/imperative-shell/event-loop.sml b/imperative-shell/draw-thread.sml similarity index 89% rename from imperative-shell/event-loop.sml rename to imperative-shell/draw-thread.sml index 560611d..7a04a2f 100644 --- a/imperative-shell/event-loop.sml +++ b/imperative-shell/draw-thread.sml @@ -1,23 +1,9 @@ -structure EventLoop = +structure DrawThread = struct open CML open DrawMessage - local - fun loop (inputMailbox, drawMailbox, model) = - let - val inputMsg = Mailbox.recv inputMailbox - val (model, drawMsg) = AppUpdate.update (model, inputMsg) - val _ = Mailbox.send (drawMailbox, drawMsg) - in - loop (inputMailbox, drawMailbox, model) - end - in - fun update (inputMailbox, drawMailbox, initial) = - loop (inputMailbox, drawMailbox, initial) - end - - fun draw + fun run ( drawMailbox , window , graphDrawObject @@ -42,7 +28,7 @@ struct val _ = Glfw.swapBuffers window val _ = Glfw.pollEvents () in - draw + run ( drawMailbox , window , graphDrawObject @@ -60,7 +46,7 @@ struct val _ = AppDraw.uploadDotVector (dotDrawObject, vec) val dotDrawLength = Vector.length vec div 5 in - draw + run ( drawMailbox , window , graphDrawObject @@ -79,7 +65,7 @@ struct val triangleDrawLength = Vector.length triangleVec div 2 (* dots are reset by setting dotDrawLength to 0 *) in - draw + run ( drawMailbox , window , graphDrawObject @@ -100,7 +86,7 @@ struct val _ = AppDraw.uploadDotVector (dotDrawObject, dotsVec) val dotDrawLength = Vector.length dotsVec div 5 in - draw + run ( drawMailbox , window , graphDrawObject @@ -115,7 +101,7 @@ struct let val dotDrawLength = 0 in - draw + run ( drawMailbox , window , graphDrawObject @@ -138,7 +124,7 @@ struct val _ = AppDraw.uploadDotVector (dotDrawObject, dots) val dotDrawLength = Vector.length dots div 5 in - draw + run ( drawMailbox , window , graphDrawObject @@ -154,7 +140,7 @@ struct val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines) val drawGraphLength = Vector.length graphLines div 2 in - draw + run ( drawMailbox , window , graphDrawObject @@ -166,7 +152,7 @@ struct ) end | NO_DRAW => - draw + run ( drawMailbox , window , graphDrawObject diff --git a/imperative-shell/shell.sml b/imperative-shell/shell.sml index 1e31145..f6fd18c 100644 --- a/imperative-shell/shell.sml +++ b/imperative-shell/shell.sml @@ -32,9 +32,9 @@ struct val _ = CML.spawn (fn () => InputCallbacks.registerCallbacks (window, inputMailbox)) val _ = CML.spawn (fn () => - EventLoop.update (inputMailbox, drawMailbox, initialModel)) + UpdateThread.run (inputMailbox, drawMailbox, initialModel)) val _ = CML.spawn (fn () => - EventLoop.draw + DrawThread.run ( drawMailbox , window , graphDrawObject diff --git a/imperative-shell/update-thread.sml b/imperative-shell/update-thread.sml new file mode 100644 index 0000000..e86fd22 --- /dev/null +++ b/imperative-shell/update-thread.sml @@ -0,0 +1,18 @@ +structure UpdateThread = +struct + open CML + + local + fun loop (inputMailbox, drawMailbox, model) = + let + val inputMsg = Mailbox.recv inputMailbox + val (model, drawMsg) = AppUpdate.update (model, inputMsg) + val _ = Mailbox.send (drawMailbox, drawMsg) + in + loop (inputMailbox, drawMailbox, model) + end + in + fun run (inputMailbox, drawMailbox, initial) = + loop (inputMailbox, drawMailbox, initial) + end +end