package bap-std
Memory maps. Memory map is an assosiative data structure that maps memory regions to values. Unlike in the Table, memory regions in the Memmap can intersect in an arbitrary ways. This data structure is also known as an Interval Tree.
Memmap
is an instance of the Interval_tree
with the Memory
serving as an interval.
type 'a t = 'a memmap
memory map, aka interval trees
val sexp_of_t :
('a -> Ppx_sexp_conv_lib.Sexp.t) ->
'a t ->
Ppx_sexp_conv_lib.Sexp.t
val empty : 'a t
empty
map
add map mem tag
adds a new memory region mem
tagged with tag
. If the same region was already in the map
it will be tagged with the tag
again, even if it has had the same tag.
dominators map mem
an ordered sequence of all memory regions, containing mem
. A memory region (x,y)
contains region (p,q)
, iff p >= x && q <= y
, where memory regions are depicted using closed intervals.
intersections map mem
an ordered sequence of all memory regions, that intersects with mem
. Memory region (x,y)
intersects with region (p,q)
iff there exists such z
that
z >= p || z <= q && z >= x && z <= y
.
In other words if there exists such byte that belongs to both memory regions.
intersects map mem
is true if intersections map mem
is not empty
contains map addr
true if there exists such memory region mem
, that Memory.contains mem addr
lookup map addr
returns an ordered sequence of all memory containing the addr
map m f
returns a new map with each tag mapped with function f
mapi m f
the same as map
, but f
is called with two arguments: mem
and tag
, where mem
is a memory region, and tag
is a tag
associated with that region.
filter map f
returns a map that contains only those elements for which f
evaluated to true
filter_map m f
creates a new map by applying a function f
to each tag. If f
returns Some x
then this region will be mapped to x
in a new map, otherwise it will be dropped.
filter_mapi
is like filter_map
but use function also accepts would associated memory region
remove_intersections map mem
removes all bindings that that intersects with mem
remove_dominators map mem
removes all bindings that are dominators to mem
to_sequence map
converts the memmap 'a t
to a sequence of key-value pairs
include Core_kernel.Container.S1 with type 'a t := 'a t
val mem : 'a t -> 'a -> equal:('a -> 'a -> bool) -> bool
val length : 'a t -> int
val is_empty : 'a t -> bool
val iter : 'a t -> f:('a -> unit) -> unit
val fold : 'a t -> init:'accum -> f:('accum -> 'a -> 'accum) -> 'accum
val fold_result :
'a t ->
init:'accum ->
f:('accum -> 'a -> ('accum, 'e) Base__.Result.t) ->
('accum, 'e) Base__.Result.t
val fold_until :
'a t ->
init:'accum ->
f:('accum -> 'a -> ('accum, 'final) Base__Container_intf.Continue_or_stop.t) ->
finish:('accum -> 'final) ->
'final
val exists : 'a t -> f:('a -> bool) -> bool
val for_all : 'a t -> f:('a -> bool) -> bool
val count : 'a t -> f:('a -> bool) -> int
val sum :
(module Base__Container_intf.Summable with type t = 'sum) ->
'a t ->
f:('a -> 'sum) ->
'sum
val find : 'a t -> f:('a -> bool) -> 'a option
val find_map : 'a t -> f:('a -> 'b option) -> 'b option
val to_list : 'a t -> 'a list
val to_array : 'a t -> 'a array
val min_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option
val max_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option
val pp :
(Stdlib.Format.formatter -> 'a -> unit) ->
Stdlib.Format.formatter ->
'a t ->
unit
pp pp_elem
constracts a printer for a memmap to the given element.