package interval-map

  1. Overview
  2. Docs
An immutable interval map data structure

Install

Dune Dependency

Authors

Maintainers

Sources

interval-map-0.1.0.tbz
sha256=73aad4d6fd4993e3a98e0da1120d551b863c90282fc316f92d127a525aa7322c
sha512=895e2aa016a1f048e15b823080899ef996e06298167321dfdeca1d37b8c5d0730261f3fea17f6f1a8e796e0b4f7ff0cd638cf97db867f1281cc7803a2cfda2ae

Description

An immutable interval map data structure implemented as an interval tree. Based on jgblight/im_interval_tree.

Interval maps are great for finding intervals and their associated values which overlap a given interval. This interval map supports intervals with excluded, included, and unbounded bound ends. Multiple values may be associated with the same interval.

Published: 14 Mar 2021

README

interval-map

An immutable interval map data structure implemented as an interval tree. Based on jgblight/im_interval_tree.

Interval maps are great for finding intervals and their associated values which overlap a given interval. This interval map supports intervals with excluded, included, and unbounded bound ends. Multiple values may be associated with the same interval.

Installation

opam install interval-map

Usage

In OCaml

let module Ivl_map = Interval_map.Make (Int) in
let module Ivl = Ivl_map.Interval in
(* Build the map *)
let map =
  Ivl_map.empty
  |> Ivl_map.add (Ivl.create (Included 0) (Excluded 10)) "foo"
  |> Ivl_map.add (Ivl.create (Included 0) (Excluded 10)) "foo2"
  |> Ivl_map.add (Ivl.create (Excluded 0) (Included 10)) "bar"
  |> Ivl_map.add (Ivl.create (Included 5) (Included 10)) "baz"
  |> Ivl_map.add (Ivl.create (Excluded 4) (Excluded 10)) "oof"
  |> Ivl_map.add (Ivl.create Unbounded (Excluded 4)) "zab"
in

(* Query the map *)
let query = Ivl.create Unbounded (Included 4) in
Ivl_map.query_interval query map
|> Ivl_map.Query_results.to_list
(* Results in:
  [({Ivl_map.Interval.low = Ivl_map.Bound.Unbounded; high = Ivl_map.Bound.Excluded 4},
    ["zab"]);
    ({Ivl_map.Interval.low = Ivl_map.Bound.Included 0; high = Ivl_map.Bound.Excluded 10},
    ["foo2", "foo"]);
    ({Ivl_map.Interval.low = Ivl_map.Bound.Excluded 0; high = Ivl_map.Bound.Included 10},
    ["bar"])]
  *)

Dependencies (2)

  1. dune >= "2.0"
  2. ocaml >= "4.08.0"

Dev Dependencies (2)

  1. odoc with-doc
  2. alcotest with-test

Used by

None

Conflicts

None

OCaml

Innovation. Community. Security.