package bap-std
Prefix Tree
This module provides a trie data structure where a sequence of instructions is used as a key (and an individual instruction as a token). Two implementations are provided, a regular, where insns are compared as-is, and normalized, where instructions are compared using normalized comparison.
In normalized comparison concerete immediate values are ignored, and if instructions have different number of operands, then only then excess operands are excluded from the comparison.
key_of_insns insns
takes a list of instructions and transforms it to key
module Normalized : Trie.S with type key = key
include Trie.S with type key := key
include Core_kernel.Bin_prot.Binable.S1 with type 'a t := 'a t
val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
val create : unit -> 'a t
create ()
creates new empty trie
add trie ~key ~data
associates data
with key
. If trie
already has some value associated with key
, then the value will be overwritten (rebound)
change trie key f
if trie has data
associated with key
then f
will be called with Some data
, otherwise it will be called with None
. If f
returns None
then there will be no data associated with key
, if f
returns Some thing
, then thing
will be associated with key
walk trie key ~init ~f
walks down the tree starting from the root and ending with the last token of the key. Function f
is fold over values associated with all substrings of the key, starting from a zero substring.
longest_match trie key
find a value associated with a longest substring of key
. Returns a pair - a length of matched key and the value, associated with that key.
val length : 'a t -> int
length trie
returns the number of values in trie
val pp :
(Stdlib.Format.formatter -> 'a -> unit) ->
Stdlib.Format.formatter ->
'a t ->
unit
pp pp_val
creates a printer for a given value printer pp_val
. Example:
let int_trie = String.Trie.pp pp_int
will create a printer for a String.Trie
that is populated by integers.