Mir Algorithm v0.5.16: @safe ndslice; shortcuts; topology.pairwise instead of isSorted and isStrictlyMonotonic

9il via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat May 13 01:08:19 PDT 2017


### Slice is safe now

User-defined iterators must care about their safety except bounds 
checks.
Bounds are checked in ndslice code.

### Deprecations

  - `tuple` was renamed to `refTuple`
  - `isSorted` and `isStrictlyMonotonic` are deprecated. Use 
`pairwise` and `all` instead.

`[float.nan, 1].isSorted` is true both for Mir and Phobos, but it 
must be false.
`*.pairwise!"a <= b".all` solves this issue explicitly.

```d
import mir.ndslice.algorithm: all;
import mir.ndslice.slice;
import mir.ndslice.sorting: sort;
import mir.ndslice.topology: pairwise;

auto arr = [1, 1, 2].sliced;

assert(arr.pairwise!"a <= b".all);
assert(!arr.pairwise!"a < b".all);

arr = [4, 3, 2, 1].sliced;

assert(!arr.pairwise!"a <= b".all);
assert(!arr.pairwise!"a < b".all);

sort(arr);

assert(arr.pairwise!"a <= b".all);
assert(arr.pairwise!"a < b".all);
```

### New API

- `pairwise` - pairwise map for vectors. It is shortcut for 
`topology.slide`.
- `Slice.field` - returns underlying array for contiguous ndslices
- Definition shortcuts for Slice
   - `UniversalVector`
   - `ContiguousMatrix`
   - `CanonicalMatrix`
   - `UniversalMatrix`
   - `ContiguousTensor`
   - `CanonicalTensor`
   - `UniversalTensor`



More information about the Digitalmars-d-announce mailing list