nu_is_overlapping

Gets whether 2 memory ranges are overlapping.

export extern (C) @nogc nothrow
bool
nu_is_overlapping
(
void* a
,
size_t aLength
,
void* b
,
size_t bLength
)

Parameters

a void*

Start address of first range.

aLength size_t

Length of first range, in bytes.

b void*

Start address of second range.

bLength size_t

Length of second range, in bytes.

Return Value

Type: bool

true if range a and b overlaps, false otherwise. It is assumed that start points at null and lengths of 0 never overlap.

Examples

int[] arr1 = [1, 2, 3, 4];
int[] arr2 = arr1[1..$-1];

size_t arr1len = arr1.length*int.sizeof;
size_t arr2len = arr2.length*int.sizeof;

// Test all iterations that are supported.
assert(nu_is_overlapping(arr1.ptr, arr1len, arr2.ptr, arr2len));
assert(!nu_is_overlapping(arr1.ptr, arr1len, arr2.ptr, 0));
assert(!nu_is_overlapping(arr1.ptr, 0, arr2.ptr, arr2len));
assert(!nu_is_overlapping(null, arr1len, arr2.ptr, arr2len));
assert(!nu_is_overlapping(arr1.ptr, arr1len, null, arr2len));

Meta