Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
mir.primitives
Templates used to check primitives and
range primitives for arrays with multi-dimensional like API support.
Note UTF strings behaves like common arrays in Mir. std.uni.byCodePoint can be used to create a range of characters.
License:
Authors:
Ilya Yaroshenko
- enum bool
hasLength
(R); - Returns:true if R has a length member that returns an integral type implicitly convertible to size_t. R does not have to be a range.Examples:
static assert(hasLength!(char[])); static assert(hasLength!(int[])); static assert(hasLength!(inout(int)[])); struct B { size_t length() const { return 0; } } struct C { @property size_t length() const { return 0; } } static assert(hasLength!(B)); static assert(hasLength!(C));
- enum bool
hasShape
(R); - Returns:true if R has a shape member that returns an static array type of size_t[N].Examples:
static assert(hasShape!(char[])); static assert(hasShape!(int[])); static assert(hasShape!(inout(int)[])); struct B { size_t length() const { return 0; } } struct C { @property size_t length() const { return 0; } } static assert(hasShape!(B)); static assert(hasShape!(C));
- @property auto
shape
(Range)(auto ref scope const Rangerange
)
if (hasLength!Range || hasShape!Range); - Examples:
static assert([2, 2, 2].shape == [3]);
- template
DimensionCount
(T) -
- enum size_t
DimensionCount
;
- @property bool
anyEmpty
(Range)(auto ref scope const Rangerange
)
if (hasShape!Range || __traits(hasMember, Range, "anyEmpty
")); - @property size_t
elementCount
(Range)(auto ref scope const Rangerange
)
if (hasShape!Range || __traits(hasMember, Range, "elementCount
")); - template
DeepElementType
(S) if (is(S == struct) || is(S == class) || is(S == interface))
templateDeepElementType
(S : T[], T) - Returns the element type of a struct with .DeepElement inner alias or a type of common array. Returns ForeachType if struct does not have .DeepElement member.
- bool
empty
(size_t dim = 0, T)(scope const T[]ar
)
if (!dim); - Examples:
assert((int[]).init.empty); assert(![1].empty!0); // Slice-like API
- ref inout(T)
front
(size_t dim = 0, T)(return scope inout(T)[]ar
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
assert(*&[3, 4].front == 3); // access be ref assert([3, 4].front!0 == 3); // Slice-like API
- ref inout(T)
back
(size_t dim = 0, T)(return scope inout(T)[]ar
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
assert(*&[3, 4].back == 4); // access be ref assert([3, 4].back!0 == 4); // Slice-like API
- void
popFront
(size_t dim = 0, T)(ref scope inout(T)[]ar
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
auto ar = [3, 4]; ar.popFront; assert(ar == [4]); ar.popFront!0; // Slice-like API assert(ar == []);
- void
popBack
(size_t dim = 0, T)(ref scope inout(T)[]ar
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
auto ar = [3, 4]; ar.popBack; assert(ar == [3]); ar.popBack!0; // Slice-like API assert(ar == []);
- size_t
popFrontN
(size_t dim = 0, T)(ref scope inout(T)[]ar
, size_tn
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
auto ar = [3, 4]; ar.popFrontN(1); assert(ar == [4]); ar.popFrontN!0(10); // Slice-like API assert(ar == []);
- size_t
popBackN
(size_t dim = 0, T)(ref scope inout(T)[]ar
, size_tn
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
auto ar = [3, 4]; ar.popBackN(1); assert(ar == [3]); ar.popBackN!0(10); // Slice-like API assert(ar == []);
- void
popFrontExactly
(size_t dim = 0, T)(ref scope inout(T)[]ar
, size_tn
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
auto ar = [3, 4, 5]; ar.popFrontExactly(2); assert(ar == [5]); ar.popFrontExactly!0(1); // Slice-like API assert(ar == []);
- void
popBackExactly
(size_t dim = 0, T)(ref scope inout(T)[]ar
, size_tn
)
if (!dim && !is(Unqual!T[] == void[])); - Examples:
auto ar = [3, 4, 5]; ar.popBackExactly(2); assert(ar == [3]); ar.popBackExactly!0(1); // Slice-like API assert(ar == []);
- size_t
length
(size_t d : 0, T)(in T[]array
)
if (d == 0); - Examples:
assert([1, 2].length!0 == 2); assert([1, 2].elementCount == 2);
- inout(T)[]
save
(T)(return scope inout(T)[]array
); - Examples:
auto a = [1, 2]; assert(a is a.save);
Copyright © 2016-2021 by Ilya Yaroshenko | Page generated by
Ddoc on Thu Feb 11 02:25:02 2021