Add Channel comms helper module

Wed, 11 Dec 2019 18:45:34 +0200

author
Tuomo Valkonen <tuomov@iki.fi>
date
Wed, 11 Dec 2019 18:45:34 +0200
changeset 5
015025cf2a50
parent 4
59fd17a3cea0
child 6
a5c1eb932d19

Add Channel comms helper module

src/AlgTools.jl file | annotate | diff | comparison | revisions
src/Comms.jl file | annotate | diff | comparison | revisions
--- a/src/AlgTools.jl	Tue Nov 19 10:23:58 2019 -0500
+++ b/src/AlgTools.jl	Wed Dec 11 18:45:34 2019 +0200
@@ -7,5 +7,6 @@
 include("LinkedLists.jl")
 include("Iterate.jl")
 include("Util.jl")
+include("Comms.jl")
 
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Comms.jl	Wed Dec 11 18:45:34 2019 +0200
@@ -0,0 +1,51 @@
+#########################################
+# Helpers for communication via channels
+#########################################
+
+module Comms
+
+__precompile__()
+
+##############
+# Our exports
+##############
+
+export process_channel,
+       put_onlylatest!
+
+####################
+# Channel iteration
+####################
+
+function process_channel(fn, rc)
+    while true
+        d=take!(rc)
+        # Take only the latest image to visualise
+        while isready(rc)
+            d=take!(rc)
+        end
+        # We're done if we were fed nothing
+        if isnothing(d)
+            break
+        end
+        try
+            fn(d)
+        catch ex
+            error("Exception in process_channel handler. Terminating.\n$(ex)")
+            throw(ex)
+        end 
+    end
+end
+
+#############################################
+# Ensure only latest data is in a Channel(1)
+#############################################
+
+function put_onlylatest!(rc, d)
+    while isready(rc)
+        take!(rc)
+    end
+    put!(rc, d)
+end
+
+end # Module

mercurial