The OpenD Programming Language

mir_slice.lightImmutable

struct mir_slice(Iterator_, size_t N_ = 1, SliceKind kind_ = Contiguous, Labels_...)
return scope immutable @property
lightImmutable
()
()
if (
0 < N_ &&
N_ < 255
&&
!(
kind_ == Canonical &&
N_ == 1
)
&&
Labels_.length <= N_
&&
isIterator!Iterator_
)

Return Value

Type: Slice!(LightImmutableOf!Iterator, N, kind, staticMap!(LightImmutableOf, Labels))

Mutable slice over immutable data.

Examples

import mir.algorithm.iteration: equal;

immutable Slice!(int*, 1) x = [1, 2].sliced;
auto y = x.lightImmutable;
// this._iterator is copied to the new slice (i.e. both point to the same underlying data)
assert(x._iterator == y._iterator);
assert(x[0] == 1);
assert(x[1] == 2);
assert(y[0] == 1);
assert(y[1] == 2);
// Outer immutable is moved to iteration type
static assert(is(typeof(y) == Slice!(immutable(int)*, 1)));
// meaning that y can be modified, even if its elements can't
y.popFront;
// even if x can't be modified
//x.popFront; //error

Meta