triangularProbeCountFromIndex

Undocumented in source. Be warned that the author may not have intended to support it.
size_t
triangularProbeCountFromIndex
(
alias pred
T
)
(
const scope T[] haystack
,
size_t index
)
if (
is(typeof(unaryFun!pred(T.init)))
)

Examples

empty case

import std.typecons : Nullable;
alias T = Nullable!int;

immutable length = 0;
immutable hitKey = T(42); // key to store
auto haystack = new T[length];

assert(haystack.triangularProbeFromIndex!((T element) => (element is hitKey ||
                                                          element.isNull))(0) == haystack.length);
assert(haystack.triangularProbeFromIndex!((size_t index, T element) => true)(0) == 0);
assert(haystack.triangularProbeFromIndex!((size_t index, T element) => false)(0) == haystack.length);

generic case

import std.typecons : Nullable;
alias T = Nullable!int;

foreach (immutable lengthPower; 0 .. 20)
{
    immutable length = 2^^lengthPower;

    immutable hitKey = T(42);  // key to store
    immutable missKey = T(43); // other key not present

    auto haystack = new T[length];
    haystack[] = T(17);     // make haystack full
    haystack[$/2] = hitKey;

    alias elementHitPredicate = element => (element is hitKey || element.isNull);
    alias elementMissPredicate = element => (element is missKey || element.isNull);

    // key hit
    assert(haystack.triangularProbeFromIndex!(elementHitPredicate)(lengthPower) != haystack.length);

    // key miss
    assert(haystack.triangularProbeFromIndex!(elementMissPredicate)(lengthPower) == haystack.length);
}

Meta