package hardcaml_waveterm

  1. Overview
  2. Docs
A terminal based digital waveform viewer for Hardcaml

Install

Dune Dependency

Authors

Maintainers

Sources

v0.17.0.tar.gz
sha256=a6780e4310f46cd71ff8a3cdf12bb51afdf0eaea5e84645a148a4ecd0f02920b

doc/src/hardcaml_waveterm.event_store/bits_store.ml.html

Source file bits_store.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
open Base

module Data = struct
  type t = Hardcaml.Bits.t [@@deriving sexp_of]

  let none = Hardcaml.Bits.empty
  let merge _ x = x
end

module Time = struct
  type t = int [@@deriving compare, sexp_of]

  let zero = 0
end

module Event_store = Event_store.Make (Time) (Data)

type t =
  { t : Event_store.t
  ; width : int
  ; max_time : int ref
  }
[@@deriving sexp_of]

let create width max_time = { t = Event_store.create (); width; max_time }
let length t = !(t.max_time) + 1
let get t = Event_store.get t.t
let equal _ _ = false
let width t = t.width

let get_digestible_string t =
  let num_events = Event_store.length t.t in
  let data_words = (t.width + 63) / 64 in
  let total_length = ref (8 + 8 + (8 * num_events) + (8 * data_words * num_events)) in
  let bytes = Bytes.create !total_length in
  let pos = ref 0 in
  let set_int64 x =
    assert (!pos + 8 <= !total_length);
    Bytes.unsafe_set_int64 bytes !pos x;
    pos := !pos + 8
  in
  let set_int x = set_int64 (Int64.of_int x) in
  let set_bits b =
    for i = 0 to data_words - 1 do
      set_int64 (Hardcaml.Bits.unsafe_get_int64 b i)
    done
  in
  set_int t.width;
  set_int !(t.max_time);
  for i = 0 to num_events - 1 do
    set_int (Event_store.get_time_at_index t.t i);
    set_bits (Event_store.get_data_at_index t.t i)
  done;
  assert (!pos = !total_length);
  bytes, !total_length
;;

let event_store t = t.t
OCaml

Innovation. Community. Security.