From 84e7dee81bad02078876827132b60d3633469aa9 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sun, 27 Jan 2019 13:10:09 +0100 Subject: [PATCH] vmmd_console: further refactoring --- src/vmm_ring.ml | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/src/vmm_ring.ml b/src/vmm_ring.ml index ac7efa9..54980a8 100644 --- a/src/vmm_ring.ml +++ b/src/vmm_ring.ml @@ -19,38 +19,25 @@ let write t entry = let dec t n = (pred n + t.size) mod t.size -let written (ts, _) = not (Ptime.equal ts Ptime.min) +let not_written ts = Ptime.equal ts Ptime.min -let read t = +let entry_not_written (ts, _) = not_written ts + +let earlier than (ts, v) = + if not_written ts then true else Ptime.is_earlier ts ~than + +let read_some tst t = let rec go s acc idx = if idx = s then (* don't read it twice *) acc else let entry = Array.get t.data idx in - if written entry then go s (entry :: acc) (dec t idx) - else acc + if tst entry then acc else go s (entry :: acc) (dec t idx) in let idx = dec t t.write in - let s = - let entry = Array.get t.data idx in - if written entry then [entry] else [] - in - go idx s (dec t idx) + let entry = Array.get t.data idx in + if tst entry then [] else go idx [entry] (dec t idx) -let earlier ts than = - if ts = Ptime.min then true - else Ptime.is_earlier ts ~than +let read t = read_some entry_not_written t -let read_history t than = - let rec go s acc idx = - if idx = s then (* don't read it twice *) - acc - else - let ts, v = Array.get t.data idx in - if earlier ts than then acc - else go s ((ts, v) :: acc) (dec t idx) - in - let idx = dec t t.write in - let ts, v = Array.get t.data idx in - if earlier ts than then [] - else go idx [(ts,v)] (dec t idx) +let read_history t than = read_some (earlier than) t