Module Imperative.MakeValuedNode

This creates a valued node by wrapping an elt with a pointer (same as MakeSimpleNode), but here representatives also have a Value.t attached.

Parameters

module Value : Parameters.SIMPLE_GENERIC_VALUE with type ('a, 'b) relation = ('a, 'b) Relation.t

Signature

include Parameters.UF_NODE_WITH_VALUE with module Relation = Relation and module Value = Value
include Parameters.UF_NODE with module Relation = Relation
include Parameters.SIMPLE_GENERIC_ELT
type 'a t

The type of elements (nodes) in the union-find structure

val polyeq : 'a t -> 'b t -> ('a, 'b) PatriciaTree.cmp

polymorphic equality on elements

module Relation = Relation
module Value = Value
type 'a root = {
  1. mutable value : 'a Value.t;
  2. mutable size : int;
}

The type of root nodes, attached to each representative

type 'a parent =
  1. | Node : 'b t * ('a, 'b) Relation.t -> 'a parent
  2. | Root of 'a root
    (*

    The type of parents. A term either points to:

    • a representative via a relation
    • a root if it is a representative
    *)
val get_parent : 'a t -> 'a parent
val set_parent : 'a t -> 'a parent -> unit
val payload : 'a t -> 'a Elt.t

Inspect the payload of a node

val make_node : 'a Elt.t -> 'a Value.t -> 'a t

Create a new node with given value, in its own class. At most one node should be created per element!