# HG changeset patch # User Jonathan Knowles # Date 1265039942 0 # Node ID 647fd458b3759aaa726a4fa5fffb28eab378ba15 # Parent 3aaa09cfd961b30c2d3af22e3b057d4c22203d9c [PCR0047] Adds the predicates "VM_memory_constraints.are_{pinned, pinned_at_static_max, valid, valid_and_pinned_at_static_max}", which take a set of memory constraints and return true if (and only if) the constraints match some condition. Signed-off-by: Jonathan Knowles diff -r 3aaa09cfd961 -r 647fd458b375 ocaml/util/vm_memory_constraints.ml --- a/ocaml/util/vm_memory_constraints.ml Mon Feb 01 15:59:01 2010 +0000 +++ b/ocaml/util/vm_memory_constraints.ml Mon Feb 01 15:59:02 2010 +0000 @@ -28,6 +28,22 @@ static_max : Int64.t; } + (** Given a set of constraints [c], returns [true] if and only if + [c.dynamic_min] = [c.dynamic_max]. *) + val are_pinned : constraints:t -> bool + + (** Given a set of constraints [c], returns [true] if and only if + [c.dynamic_min] = [c.dynamic_max] = [c.static-max]. *) + val are_pinned_at_static_max : constraints:t -> bool + + (** Given a set of constraints [c], returns [true] if and only if + [c.static_min] ≤ [c.dynamic_min] ≤ [c.dynamic_max] ≤ [c.static_max]. *) + val are_valid : constraints:t -> bool + + (** Given a set of constraints [c], returns [true] if and only if + [c.static_min] ≤ [c.dynamic_min] = [c.dynamic_max] = [c.static-max]. *) + val are_valid_and_pinned_at_static_max : constraints:t -> bool + (** Creates a set of memory constraints from the given tuple whose * elements appear in order of increasing size. *) @@ -52,11 +68,6 @@ * modifying the dynamic constraints, this function function returns None. *) val transform : constraints:t -> t option - - (** Returns true if and only if the given memory constraints are in valid - * order such that: static_min <= dynamic_min <= dynamic_max <= static_max - *) - val are_valid : constraints:t -> bool (** Takes the given set of possibly-invalid memory constraints {i s}, and * returns a new set of valid and unballooned constraints {i t} s.t.: @@ -114,13 +125,21 @@ dynamic_max = dynamic_max; } - let are_valid ~constraints = - Listext.List.is_sorted compare [ - constraints.static_min; - constraints.dynamic_min; - constraints.dynamic_max; - constraints.static_max - ] + let are_pinned ~constraints = + constraints.dynamic_min = constraints.dynamic_max + + let are_pinned_at_static_max ~constraints = true + && constraints.dynamic_max = constraints.static_max + && are_pinned constraints + + let are_valid ~constraints = true + && constraints.static_min <= constraints.dynamic_min + && constraints.dynamic_min <= constraints.dynamic_max + && constraints.dynamic_max <= constraints.static_max + + let are_valid_and_pinned_at_static_max ~constraints = true + && constraints.static_min <= constraints.dynamic_min + && are_pinned_at_static_max constraints let reset_to_safe_defaults ~constraints = let max = constraints.static_max in