From 6fae75f94d5e475d383b313ad9cf216ac7bfc4de Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 12 Oct 2021 22:13:05 -0400 Subject: [PATCH] add Vec_unit to util --- src/util/Sidekick_util.ml | 2 ++ src/util/Vec_unit.ml | 28 ++++++++++++++++++++++++++++ src/util/Vec_unit.mli | 2 ++ 3 files changed, 32 insertions(+) create mode 100644 src/util/Vec_unit.ml create mode 100644 src/util/Vec_unit.mli diff --git a/src/util/Sidekick_util.ml b/src/util/Sidekick_util.ml index 52121c62..3e70f3da 100644 --- a/src/util/Sidekick_util.ml +++ b/src/util/Sidekick_util.ml @@ -6,7 +6,9 @@ module Util = Util module Vec = Vec module VecI32 = VecI32 module Vec_float = Vec_float +module Vec_unit = Vec_unit module Vec_sig = Vec_sig + module Bitvec = Bitvec module Int_id = Int_id diff --git a/src/util/Vec_unit.ml b/src/util/Vec_unit.ml new file mode 100644 index 00000000..40c3fb81 --- /dev/null +++ b/src/util/Vec_unit.ml @@ -0,0 +1,28 @@ + +type elt = unit + +(* no need to store anything so we don't even provide an actual vector + since unit is a "zero sized type" as rustaceans would say. *) +type t = { + mutable size: int; +} + +let create ?cap:_ () : t = { size=0 } +let clear self = self.size <- 0 +let copy {size} = {size} +let get (_self:t) _ = () +let size self = self.size +let iter ~f:_ (_self:t) = () +let iteri ~f:_ (_self:t) = () +let is_empty self = self.size = 0 +let push (self:t) _ = self.size <- 1 + self.size +let fast_remove (self:t) _ = self.size <- self.size - 1 +let ensure_size (self:t) i = self.size <- max self.size i +let set _ _ _ = () +let pop self = self.size <- self.size - 1; () +let filter_in_place _ _ = () +let shrink (self:t) i = self.size <- i +let to_iter self k = for _i=0 to self.size - 1 do k () done +let to_array self = Iter.to_array (to_iter self) +let fold_left f acc self = Iter.fold f acc (to_iter self) +let pp ppx out self = Iter.pp_seq ppx out (to_iter self) diff --git a/src/util/Vec_unit.mli b/src/util/Vec_unit.mli new file mode 100644 index 00000000..8e7ab1c6 --- /dev/null +++ b/src/util/Vec_unit.mli @@ -0,0 +1,2 @@ + +include Vec_sig.S with type elt= unit