# Module Res.DefStrat

    module DefStrat: Strat.T  with type t = float * float * int

Default strategy for resizable datastructures

`type t` is a triple `(waste, shrink_trig, min_size)`, where `waste` (default: 1.5) indicates how much the array should grow in excess when reallocation is triggered, `shrink_trig` (default: 0.5) at which percentage of excess elements it should be shrunk and `min_size` (default: 16 elements) is the minimum size of the resizable array.

    type t

The abstract type of strategies.

    val default : t

Default strategy of this strategy implementation.

    val grow : t -> int -> int

`grow strat new_len`

- Returns the new real length of some contiguous datastructure using strategy `strat` given new virtual length `new_len`. The user should then use this new real length to resize the datastructure. Be careful, the new (real) length must be larger than the new virtual length, otherwise your program will crash!

    val shrink : t -> real_len:int -> new_len:int -> int

`shrink strat ~real_len ~new_len`

- Returns the new real length of a resizable datastructure given its current real length `real_len` and its required new virtual length `new_len` wrt. strategy `strat`. The user should then use this new real length to resize the datastructure. If `-1` is returned, it is not necessary to resize. Be careful, the new (real) length must be larger than the new virtual length `new_len`, otherwise your program may crash!