Coverage Report

Created: 2026-09-04 06:48

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/nalgebra-0.35.0/src/base/indexing.rs
Line
Count
Source
1
//! Indexing
2
#![allow(clippy::reversed_empty_ranges)]
3
4
use crate::base::storage::{RawStorage, RawStorageMut};
5
use crate::base::{
6
    Const, Dim, DimDiff, DimName, DimSub, Dyn, Matrix, MatrixView, MatrixViewMut, Scalar, U1,
7
};
8
9
use std::ops;
10
11
// N.B.: Not a public trait!
12
trait DimRange<D: Dim> {
13
    /// The number of elements indexed by this range.
14
    type Length: Dim;
15
16
    /// The lower bound of the range, inclusive.
17
    fn lower(&self, dimension: D) -> usize;
18
19
    /// The number of elements included in the range.
20
    fn length(&self, dimension: D) -> Self::Length;
21
22
    /// Produces true if `Self` is contained within `dimension`.
23
    fn contained_by(&self, dimension: D) -> bool;
24
}
25
26
impl<D: Dim> DimRange<D> for usize {
27
    type Length = U1;
28
29
    #[inline(always)]
30
    fn lower(&self, _: D) -> usize {
31
        *self
32
    }
33
34
    #[inline(always)]
35
    fn length(&self, _: D) -> Self::Length {
36
        Const::<1>
37
    }
38
39
    #[inline(always)]
40
    fn contained_by(&self, dimension: D) -> bool {
41
        *self < dimension.value()
42
    }
43
}
44
45
#[test]
46
fn dimrange_usize() {
47
    assert!(!DimRange::contained_by(&0, Const::<0>));
48
    assert!(DimRange::contained_by(&0, Const::<1>));
49
}
50
51
impl<D: Dim> DimRange<D> for ops::Range<usize> {
52
    type Length = Dyn;
53
54
    #[inline(always)]
55
    fn lower(&self, _: D) -> usize {
56
        self.start
57
    }
58
59
    #[inline(always)]
60
    fn length(&self, _: D) -> Self::Length {
61
        Dyn(self.end.saturating_sub(self.start))
62
    }
63
64
    #[inline(always)]
65
    fn contained_by(&self, dimension: D) -> bool {
66
        (self.start < dimension.value()) && (self.end <= dimension.value())
67
    }
68
}
69
70
#[test]
71
fn dimrange_range_usize() {
72
    assert!(!DimRange::contained_by(&(0..0), Const::<0>));
73
    assert!(!DimRange::contained_by(&(0..1), Const::<0>));
74
    assert!(DimRange::contained_by(&(0..1), Const::<1>));
75
    assert!(DimRange::contained_by(
76
        &((usize::MAX - 1)..usize::MAX),
77
        Dyn(usize::MAX)
78
    ));
79
    assert_eq!(
80
        DimRange::length(&((usize::MAX - 1)..usize::MAX), Dyn(usize::MAX)),
81
        Dyn(1)
82
    );
83
    assert_eq!(
84
        DimRange::length(&(usize::MAX..(usize::MAX - 1)), Dyn(usize::MAX)),
85
        Dyn(0)
86
    );
87
    assert_eq!(
88
        DimRange::length(&(usize::MAX..usize::MAX), Dyn(usize::MAX)),
89
        Dyn(0)
90
    );
91
}
92
93
impl<D: Dim> DimRange<D> for ops::RangeFrom<usize> {
94
    type Length = Dyn;
95
96
    #[inline(always)]
97
    fn lower(&self, _: D) -> usize {
98
        self.start
99
    }
100
101
    #[inline(always)]
102
    fn length(&self, dimension: D) -> Self::Length {
103
        (self.start..dimension.value()).length(dimension)
104
    }
105
106
    #[inline(always)]
107
    fn contained_by(&self, dimension: D) -> bool {
108
        self.start < dimension.value()
109
    }
110
}
111
112
#[test]
113
fn dimrange_rangefrom_usize() {
114
    assert!(!DimRange::contained_by(&(0..), Const::<0>));
115
    assert!(!DimRange::contained_by(&(0..), Const::<0>));
116
    assert!(DimRange::contained_by(&(0..), Const::<1>));
117
    assert!(DimRange::contained_by(
118
        &((usize::MAX - 1)..),
119
        Dyn(usize::MAX)
120
    ));
121
    assert_eq!(
122
        DimRange::length(&((usize::MAX - 1)..), Dyn(usize::MAX)),
123
        Dyn(1)
124
    );
125
    assert_eq!(DimRange::length(&(usize::MAX..), Dyn(usize::MAX)), Dyn(0));
126
}
127
128
impl<D: Dim, T: Dim> DimRange<D> for ops::RangeFrom<T>
129
where
130
    D: DimSub<T>,
131
{
132
    type Length = DimDiff<D, T>;
133
134
    #[inline(always)]
135
    fn lower(&self, _: D) -> usize {
136
        self.start.value()
137
    }
138
139
    #[inline(always)]
140
    fn length(&self, dimension: D) -> Self::Length {
141
        dimension.sub(self.start)
142
    }
143
144
    #[inline(always)]
145
    fn contained_by(&self, _: D) -> bool {
146
        true
147
    }
148
}
149
150
#[test]
151
fn dimrange_rangefrom_dimname() {
152
    assert_eq!(DimRange::length(&(Const::<1>..), Const::<5>), Const::<4>);
153
}
154
155
impl<D: Dim> DimRange<D> for ops::RangeFull {
156
    type Length = D;
157
158
    #[inline(always)]
159
    fn lower(&self, _: D) -> usize {
160
        0
161
    }
162
163
    #[inline(always)]
164
    fn length(&self, dimension: D) -> Self::Length {
165
        dimension
166
    }
167
168
    #[inline(always)]
169
    fn contained_by(&self, _: D) -> bool {
170
        true
171
    }
172
}
173
174
#[test]
175
fn dimrange_rangefull() {
176
    assert!(DimRange::contained_by(&(..), Const::<0>));
177
    assert_eq!(DimRange::length(&(..), Const::<1>), Const::<1>);
178
}
179
180
impl<D: Dim> DimRange<D> for ops::RangeInclusive<usize> {
181
    type Length = Dyn;
182
183
    #[inline(always)]
184
    fn lower(&self, _: D) -> usize {
185
        *self.start()
186
    }
187
188
    #[inline(always)]
189
    fn length(&self, _: D) -> Self::Length {
190
        Dyn(if self.end() < self.start() {
191
            0
192
        } else {
193
            self.end().wrapping_sub(self.start().wrapping_sub(1))
194
        })
195
    }
196
197
    #[inline(always)]
198
    fn contained_by(&self, dimension: D) -> bool {
199
        (*self.start() < dimension.value()) && (*self.end() < dimension.value())
200
    }
201
}
202
203
#[test]
204
fn dimrange_rangeinclusive_usize() {
205
    assert!(!DimRange::contained_by(&(0..=0), Const::<0>));
206
    assert!(DimRange::contained_by(&(0..=0), Const::<1>));
207
    assert!(!DimRange::contained_by(
208
        &(usize::MAX..=usize::MAX),
209
        Dyn(usize::MAX)
210
    ));
211
    assert!(!DimRange::contained_by(
212
        &((usize::MAX - 1)..=usize::MAX),
213
        Dyn(usize::MAX)
214
    ));
215
    assert!(DimRange::contained_by(
216
        &((usize::MAX - 1)..=(usize::MAX - 1)),
217
        Dyn(usize::MAX)
218
    ));
219
    assert_eq!(DimRange::length(&(0..=0), Const::<1>), Dyn(1));
220
    assert_eq!(
221
        DimRange::length(&((usize::MAX - 1)..=usize::MAX), Dyn(usize::MAX)),
222
        Dyn(2)
223
    );
224
    assert_eq!(
225
        DimRange::length(&(usize::MAX..=(usize::MAX - 1)), Dyn(usize::MAX)),
226
        Dyn(0)
227
    );
228
    assert_eq!(
229
        DimRange::length(&(usize::MAX..=usize::MAX), Dyn(usize::MAX)),
230
        Dyn(1)
231
    );
232
}
233
234
impl<D: Dim> DimRange<D> for ops::RangeTo<usize> {
235
    type Length = Dyn;
236
237
    #[inline(always)]
238
    fn lower(&self, _: D) -> usize {
239
        0
240
    }
241
242
    #[inline(always)]
243
    fn length(&self, _: D) -> Self::Length {
244
        Dyn(self.end)
245
    }
246
247
    #[inline(always)]
248
    fn contained_by(&self, dimension: D) -> bool {
249
        self.end <= dimension.value()
250
    }
251
}
252
253
#[test]
254
fn dimrange_rangeto_usize() {
255
    assert!(DimRange::contained_by(&(..0), Const::<0>));
256
    assert!(!DimRange::contained_by(&(..1), Const::<0>));
257
    assert!(DimRange::contained_by(&(..0), Const::<1>));
258
    assert!(DimRange::contained_by(
259
        &(..(usize::MAX - 1)),
260
        Dyn(usize::MAX)
261
    ));
262
    assert_eq!(
263
        DimRange::length(&(..(usize::MAX - 1)), Dyn(usize::MAX)),
264
        Dyn(usize::MAX - 1)
265
    );
266
    assert_eq!(
267
        DimRange::length(&(..usize::MAX), Dyn(usize::MAX)),
268
        Dyn(usize::MAX)
269
    );
270
}
271
272
impl<D: Dim> DimRange<D> for ops::RangeToInclusive<usize> {
273
    type Length = Dyn;
274
275
    #[inline(always)]
276
    fn lower(&self, _: D) -> usize {
277
        0
278
    }
279
280
    #[inline(always)]
281
    fn length(&self, _: D) -> Self::Length {
282
        Dyn(self.end + 1)
283
    }
284
285
    #[inline(always)]
286
    fn contained_by(&self, dimension: D) -> bool {
287
        self.end < dimension.value()
288
    }
289
}
290
291
#[test]
292
fn dimrange_rangetoinclusive_usize() {
293
    assert!(!DimRange::contained_by(&(..=0), Const::<0>));
294
    assert!(!DimRange::contained_by(&(..=1), Const::<0>));
295
    assert!(DimRange::contained_by(&(..=0), Const::<1>));
296
    assert!(!DimRange::contained_by(&(..=(usize::MAX)), Dyn(usize::MAX)));
297
    assert!(DimRange::contained_by(
298
        &(..=(usize::MAX - 1)),
299
        Dyn(usize::MAX)
300
    ));
301
    assert_eq!(
302
        DimRange::length(&(..=(usize::MAX - 1)), Dyn(usize::MAX)),
303
        Dyn(usize::MAX)
304
    );
305
}
306
307
/// A helper trait used for indexing operations.
308
pub trait MatrixIndex<'a, T, R: Dim, C: Dim, S: RawStorage<T, R, C>>: Sized {
309
    /// The output type returned by methods.
310
    type Output: 'a;
311
312
    /// Produces true if the given matrix is contained by this index.
313
    #[doc(hidden)]
314
    fn contained_by(&self, matrix: &Matrix<T, R, C, S>) -> bool;
315
316
    /// Produces a shared view of the data at this location if in bounds,
317
    /// or `None`, otherwise.
318
    #[doc(hidden)]
319
    #[inline(always)]
320
    fn get(self, matrix: &'a Matrix<T, R, C, S>) -> Option<Self::Output> {
321
        if self.contained_by(matrix) {
322
            Some(unsafe { self.get_unchecked(matrix) })
323
        } else {
324
            None
325
        }
326
    }
327
328
    /// Produces a shared view of the data at this location if in bounds
329
    /// without any bounds checking.
330
    #[doc(hidden)]
331
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output;
332
333
    /// Produces a shared view to the data at this location, or panics
334
    /// if out of bounds.
335
    #[doc(hidden)]
336
    #[inline(always)]
337
    fn index(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
338
        self.get(matrix).expect("Index out of bounds.")
339
    }
340
}
341
342
/// A helper trait used for indexing operations.
343
pub trait MatrixIndexMut<'a, T, R: Dim, C: Dim, S: RawStorageMut<T, R, C>>:
344
    MatrixIndex<'a, T, R, C, S>
345
{
346
    /// The output type returned by methods.
347
    type OutputMut: 'a;
348
349
    /// Produces a mutable view of the data at this location, without
350
    /// performing any bounds checking.
351
    #[doc(hidden)]
352
    unsafe fn get_unchecked_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Self::OutputMut;
353
354
    /// Produces a mutable view of the data at this location, if in
355
    /// bounds.
356
    #[doc(hidden)]
357
    #[inline(always)]
358
    fn get_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Option<Self::OutputMut> {
359
        if self.contained_by(matrix) {
360
            Some(unsafe { self.get_unchecked_mut(matrix) })
361
        } else {
362
            None
363
        }
364
    }
365
366
    /// Produces a mutable view of the data at this location, or panics
367
    /// if out of bounds.
368
    #[doc(hidden)]
369
    #[inline(always)]
370
    fn index_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Self::OutputMut {
371
        self.get_mut(matrix).expect("Index out of bounds.")
372
    }
373
}
374
375
/// # Views based on ranges
376
/// ## Indices to Individual Elements
377
/// ### Two-Dimensional Indices
378
/// ```
379
/// # use nalgebra::*;
380
/// let matrix = Matrix2::new(0, 2,
381
///                           1, 3);
382
///
383
/// assert_eq!(matrix.index((0, 0)), &0);
384
/// assert_eq!(matrix.index((1, 0)), &1);
385
/// assert_eq!(matrix.index((0, 1)), &2);
386
/// assert_eq!(matrix.index((1, 1)), &3);
387
/// ```
388
///
389
/// ### Linear Address Indexing
390
/// ```
391
/// # use nalgebra::*;
392
/// let matrix = Matrix2::new(0, 2,
393
///                           1, 3);
394
///
395
/// assert_eq!(matrix.get(0), Some(&0));
396
/// assert_eq!(matrix.get(1), Some(&1));
397
/// assert_eq!(matrix.get(2), Some(&2));
398
/// assert_eq!(matrix.get(3), Some(&3));
399
/// ```
400
///
401
/// ## Indices to Individual Rows and Columns
402
/// ### Index to a Row
403
/// ```
404
/// # use nalgebra::*;
405
/// let matrix = Matrix2::new(0, 2,
406
///                           1, 3);
407
///
408
/// assert!(matrix.index((0, ..))
409
///     .eq(&Matrix1x2::new(0, 2)));
410
/// ```
411
///
412
/// ### Index to a Column
413
/// ```
414
/// # use nalgebra::*;
415
/// let matrix = Matrix2::new(0, 2,
416
///                           1, 3);
417
///
418
/// assert!(matrix.index((.., 0))
419
///     .eq(&Matrix2x1::new(0,
420
///                         1)));
421
/// ```
422
///
423
/// ## Indices to Parts of Individual Rows and Columns
424
/// ### Index to a Partial Row
425
/// ```
426
/// # use nalgebra::*;
427
/// let matrix = Matrix3::new(0, 3, 6,
428
///                           1, 4, 7,
429
///                           2, 5, 8);
430
///
431
/// assert!(matrix.index((0, ..2))
432
///     .eq(&Matrix1x2::new(0, 3)));
433
/// ```
434
///
435
/// ### Index to a Partial Column
436
/// ```
437
/// # use nalgebra::*;
438
/// let matrix = Matrix3::new(0, 3, 6,
439
///                           1, 4, 7,
440
///                           2, 5, 8);
441
///
442
/// assert!(matrix.index((..2, 0))
443
///     .eq(&Matrix2x1::new(0,
444
///                         1)));
445
///
446
/// assert!(matrix.index((Const::<1>.., 0))
447
///     .eq(&Matrix2x1::new(1,
448
///                         2)));
449
/// ```
450
/// ## Indices to Ranges of Rows and Columns
451
/// ### Index to a Range of Rows
452
/// ```
453
/// # use nalgebra::*;
454
/// let matrix = Matrix3::new(0, 3, 6,
455
///                           1, 4, 7,
456
///                           2, 5, 8);
457
///
458
/// assert!(matrix.index((1..3, ..))
459
///     .eq(&Matrix2x3::new(1, 4, 7,
460
///                         2, 5, 8)));
461
/// ```
462
/// ### Index to a Range of Columns
463
/// ```
464
/// # use nalgebra::*;
465
/// let matrix = Matrix3::new(0, 3, 6,
466
///                           1, 4, 7,
467
///                           2, 5, 8);
468
///
469
/// assert!(matrix.index((.., 1..3))
470
///     .eq(&Matrix3x2::new(3, 6,
471
///                         4, 7,
472
///                         5, 8)));
473
/// ```
474
impl<T, R: Dim, C: Dim, S: RawStorage<T, R, C>> Matrix<T, R, C, S> {
475
    /// Produces a view of the data at the given index, or
476
    /// `None` if the index is out of bounds.
477
    #[inline]
478
    #[must_use]
479
    pub fn get<'a, I>(&'a self, index: I) -> Option<I::Output>
480
    where
481
        I: MatrixIndex<'a, T, R, C, S>,
482
    {
483
        index.get(self)
484
    }
485
486
    /// Produces a mutable view of the data at the given index, or
487
    /// `None` if the index is out of bounds.
488
    #[inline]
489
    #[must_use]
490
    pub fn get_mut<'a, I>(&'a mut self, index: I) -> Option<I::OutputMut>
491
    where
492
        S: RawStorageMut<T, R, C>,
493
        I: MatrixIndexMut<'a, T, R, C, S>,
494
    {
495
        index.get_mut(self)
496
    }
497
498
    /// Produces a view of the data at the given index, or
499
    /// panics if the index is out of bounds.
500
    #[inline]
501
    #[must_use]
502
    pub fn index<'a, I>(&'a self, index: I) -> I::Output
503
    where
504
        I: MatrixIndex<'a, T, R, C, S>,
505
    {
506
        index.index(self)
507
    }
508
509
    /// Produces a mutable view of the data at the given index, or
510
    /// panics if the index is out of bounds.
511
    #[inline]
512
    pub fn index_mut<'a, I>(&'a mut self, index: I) -> I::OutputMut
513
    where
514
        S: RawStorageMut<T, R, C>,
515
        I: MatrixIndexMut<'a, T, R, C, S>,
516
    {
517
        index.index_mut(self)
518
    }
519
520
    /// Produces a view of the data at the given index, without doing
521
    /// any bounds checking.
522
    ///
523
    /// # Safety
524
    ///
525
    /// `index` must within bounds of the array.
526
    #[inline]
527
    #[must_use]
528
290k
    pub unsafe fn get_unchecked<'a, I>(&'a self, index: I) -> I::Output
529
290k
    where
530
290k
        I: MatrixIndex<'a, T, R, C, S>,
531
    {
532
290k
        unsafe { index.get_unchecked(self) }
533
290k
    }
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>, 3, 1>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 1, 1>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<f64, 1, 6>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 2>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 1>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
<nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<3>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 3>>>::get_unchecked::<(usize, usize)>
Line
Count
Source
528
264k
    pub unsafe fn get_unchecked<'a, I>(&'a self, index: I) -> I::Output
529
264k
    where
530
264k
        I: MatrixIndex<'a, T, R, C, S>,
531
    {
532
264k
        unsafe { index.get_unchecked(self) }
533
264k
    }
<nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked::<(usize, usize)>
Line
Count
Source
528
2.82k
    pub unsafe fn get_unchecked<'a, I>(&'a self, index: I) -> I::Output
529
2.82k
    where
530
2.82k
        I: MatrixIndex<'a, T, R, C, S>,
531
    {
532
2.82k
        unsafe { index.get_unchecked(self) }
533
2.82k
    }
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
<nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 1>>>::get_unchecked::<(usize, usize)>
Line
Count
Source
528
1.12k
    pub unsafe fn get_unchecked<'a, I>(&'a self, index: I) -> I::Output
529
1.12k
    where
530
1.12k
        I: MatrixIndex<'a, T, R, C, S>,
531
    {
532
1.12k
        unsafe { index.get_unchecked(self) }
533
1.12k
    }
<nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<4>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 4, 1>>>::get_unchecked::<(usize, usize)>
Line
Count
Source
528
22.0k
    pub unsafe fn get_unchecked<'a, I>(&'a self, index: I) -> I::Output
529
22.0k
    where
530
22.0k
        I: MatrixIndex<'a, T, R, C, S>,
531
    {
532
22.0k
        unsafe { index.get_unchecked(self) }
533
22.0k
    }
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<5>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 5, 1>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 6>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 1>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<7>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 7, 1>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<5>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked::<(usize, usize)>
534
535
    /// Returns a mutable view of the data at the given index, without doing
536
    /// any bounds checking.
537
    /// # Safety
538
    ///
539
    /// `index` must within bounds of the array.
540
    #[inline]
541
    #[must_use]
542
51.1k
    pub unsafe fn get_unchecked_mut<'a, I>(&'a mut self, index: I) -> I::OutputMut
543
51.1k
    where
544
51.1k
        S: RawStorageMut<T, R, C>,
545
51.1k
        I: MatrixIndexMut<'a, T, R, C, S>,
546
    {
547
51.1k
        unsafe { index.get_unchecked_mut(self) }
548
51.1k
    }
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>>, 3, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 1, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<3>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 3, 3>>>::get_unchecked_mut::<(usize, usize)>
<nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 3, 1>>>::get_unchecked_mut::<(usize, usize)>
Line
Count
Source
542
564
    pub unsafe fn get_unchecked_mut<'a, I>(&'a mut self, index: I) -> I::OutputMut
543
564
    where
544
564
        S: RawStorageMut<T, R, C>,
545
564
        I: MatrixIndexMut<'a, T, R, C, S>,
546
    {
547
564
        unsafe { index.get_unchecked_mut(self) }
548
564
    }
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<4>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 4, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<5>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 5, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 6, 6>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 6, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<7>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 7, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<(usize, usize), nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<(usize, usize), 3, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 2>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut::<(usize, usize)>
<nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<3>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 3>>>::get_unchecked_mut::<(usize, usize)>
Line
Count
Source
542
50.5k
    pub unsafe fn get_unchecked_mut<'a, I>(&'a mut self, index: I) -> I::OutputMut
543
50.5k
    where
544
50.5k
        S: RawStorageMut<T, R, C>,
545
50.5k
        I: MatrixIndexMut<'a, T, R, C, S>,
546
    {
547
50.5k
        unsafe { index.get_unchecked_mut(self) }
548
50.5k
    }
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<4>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 4, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<5>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 5, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 6>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Const<7>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 7, 1>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<5>>>>::get_unchecked_mut::<(usize, usize)>
Unexecuted instantiation: <nalgebra::base::matrix::Matrix<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut::<(usize, usize)>
549
}
550
551
// EXTRACT A SINGLE ELEMENT BY 1D LINEAR ADDRESS
552
553
impl<'a, T, R, C, S> MatrixIndex<'a, T, R, C, S> for usize
554
where
555
    T: Scalar,
556
    R: Dim,
557
    C: Dim,
558
    S: RawStorage<T, R, C>,
559
{
560
    type Output = &'a T;
561
562
    #[doc(hidden)]
563
    #[inline(always)]
564
    fn contained_by(&self, matrix: &Matrix<T, R, C, S>) -> bool {
565
        *self < matrix.len()
566
    }
567
568
    #[doc(hidden)]
569
    #[inline(always)]
570
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
571
        unsafe {
572
            let nrows = matrix.shape().0;
573
            let row = self % nrows;
574
            let col = self / nrows;
575
            matrix.data.get_unchecked(row, col)
576
        }
577
    }
578
}
579
580
impl<'a, T, R, C, S> MatrixIndexMut<'a, T, R, C, S> for usize
581
where
582
    T: Scalar,
583
    R: Dim,
584
    C: Dim,
585
    S: RawStorageMut<T, R, C>,
586
{
587
    type OutputMut = &'a mut T;
588
589
    #[doc(hidden)]
590
    #[inline(always)]
591
    unsafe fn get_unchecked_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Self::OutputMut
592
    where
593
        S: RawStorageMut<T, R, C>,
594
    {
595
        unsafe {
596
            let nrows = matrix.shape().0;
597
            let row = self % nrows;
598
            let col = self / nrows;
599
            matrix.data.get_unchecked_mut(row, col)
600
        }
601
    }
602
}
603
604
// EXTRACT A SINGLE ELEMENT BY 2D COORDINATES
605
606
impl<'a, T: 'a, R, C, S> MatrixIndex<'a, T, R, C, S> for (usize, usize)
607
where
608
    R: Dim,
609
    C: Dim,
610
    S: RawStorage<T, R, C>,
611
{
612
    type Output = &'a T;
613
614
    #[doc(hidden)]
615
    #[inline(always)]
616
    fn contained_by(&self, matrix: &Matrix<T, R, C, S>) -> bool {
617
        let (rows, cols) = self;
618
        let (nrows, ncols) = matrix.shape_generic();
619
        DimRange::contained_by(rows, nrows) && DimRange::contained_by(cols, ncols)
620
    }
621
622
    #[doc(hidden)]
623
    #[inline(always)]
624
290k
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
625
        unsafe {
626
290k
            let (row, col) = self;
627
290k
            matrix.data.get_unchecked(row, col)
628
        }
629
290k
    }
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>, 3, 1>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 1, 1>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<f64, 1, 6>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 2>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 1>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
<(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<3>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 3>>>::get_unchecked
Line
Count
Source
624
264k
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
625
        unsafe {
626
264k
            let (row, col) = self;
627
264k
            matrix.data.get_unchecked(row, col)
628
        }
629
264k
    }
<(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked
Line
Count
Source
624
2.82k
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
625
        unsafe {
626
2.82k
            let (row, col) = self;
627
2.82k
            matrix.data.get_unchecked(row, col)
628
        }
629
2.82k
    }
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
<(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 1>>>::get_unchecked
Line
Count
Source
624
1.12k
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
625
        unsafe {
626
1.12k
            let (row, col) = self;
627
1.12k
            matrix.data.get_unchecked(row, col)
628
        }
629
1.12k
    }
<(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<4>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 4, 1>>>::get_unchecked
Line
Count
Source
624
22.0k
    unsafe fn get_unchecked(self, matrix: &'a Matrix<T, R, C, S>) -> Self::Output {
625
        unsafe {
626
22.0k
            let (row, col) = self;
627
22.0k
            matrix.data.get_unchecked(row, col)
628
        }
629
22.0k
    }
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<5>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 5, 1>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 6>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 1>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Const<7>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 7, 1>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorage<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<5>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndex<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked
630
}
631
632
impl<'a, T: 'a, R, C, S> MatrixIndexMut<'a, T, R, C, S> for (usize, usize)
633
where
634
    R: Dim,
635
    C: Dim,
636
    S: RawStorageMut<T, R, C>,
637
{
638
    type OutputMut = &'a mut T;
639
640
    #[doc(hidden)]
641
    #[inline(always)]
642
51.1k
    unsafe fn get_unchecked_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Self::OutputMut
643
51.1k
    where
644
51.1k
        S: RawStorageMut<T, R, C>,
645
    {
646
51.1k
        unsafe {
647
51.1k
            let (row, col) = self;
648
51.1k
            matrix.data.get_unchecked_mut(row, col)
649
51.1k
        }
650
51.1k
    }
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<(usize, usize), nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<(usize, usize), 3, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<hyperdual::OHyperdual<f64, nalgebra::base::dimension::Const<7>>>, 3, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 1, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<3>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 3, 3>>>::get_unchecked_mut
<(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 3, 1>>>::get_unchecked_mut
Line
Count
Source
642
564
    unsafe fn get_unchecked_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Self::OutputMut
643
564
    where
644
564
        S: RawStorageMut<T, R, C>,
645
    {
646
564
        unsafe {
647
564
            let (row, col) = self;
648
564
            matrix.data.get_unchecked_mut(row, col)
649
564
        }
650
564
    }
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<4>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 4, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<5>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 5, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 6, 6>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 6, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<core::mem::maybe_uninit::MaybeUninit<f64>, nalgebra::base::dimension::Const<7>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<core::mem::maybe_uninit::MaybeUninit<f64>, 7, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<2>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 2>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 2, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut
<(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<3>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 3>>>::get_unchecked_mut
Line
Count
Source
642
50.5k
    unsafe fn get_unchecked_mut(self, matrix: &'a mut Matrix<T, R, C, S>) -> Self::OutputMut
643
50.5k
    where
644
50.5k
        S: RawStorageMut<T, R, C>,
645
    {
646
50.5k
        unsafe {
647
50.5k
            let (row, col) = self;
648
50.5k
            matrix.data.get_unchecked_mut(row, col)
649
50.5k
        }
650
50.5k
    }
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<3>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 3, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<4>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 4, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<5>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 5, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<6>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 6>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 6, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Const<6>, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<6>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Const<7>, nalgebra::base::dimension::Const<1>, nalgebra::base::array_storage::ArrayStorage<f64, 7, 1>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<3>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<5>>>>::get_unchecked_mut
Unexecuted instantiation: <(usize, usize) as nalgebra::base::indexing::MatrixIndexMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::matrix_view::ViewStorageMut<f64, nalgebra::base::dimension::Dyn, nalgebra::base::dimension::Const<2>, nalgebra::base::dimension::Const<1>, nalgebra::base::dimension::Const<2>>>>::get_unchecked_mut
651
}
652
653
macro_rules! impl_index_pair {
654
    (
655
      $R: ident,
656
      $C: ident,
657
      [<$($RTyP: ident : $RTyPB: ty,)*> usize => $ROut: ty
658
        $(where $RConstraintType: ty: $RConstraintBound: ident<$($RConstraintBoundParams: ty $( = $REqBound: ty )*),*>)*],
659
      [<$($CTyP: ident : $CTyPB: ty,)*> usize => $COut: ty
660
        $(where $CConstraintType: ty: $CConstraintBound: ident<$($CConstraintBoundParams: ty $( = $CEqBound: ty )*),*>)*]
661
    ) => {};
662
663
    (
664
      $R: ident,
665
      $C: ident,
666
      [<$($RTyP: ident: $RTyPB: tt),*> $RIdx: ty => $ROut: ty
667
        $(where $RConstraintType: ty: $RConstraintBound: ident $(<$($RConstraintBoundParams: ty $( = $REqBound: ty )*),*>)* )*],
668
      [<$($CTyP: ident: $CTyPB: tt),*> $CIdx: ty => $COut: ty
669
        $(where $CConstraintType: ty: $CConstraintBound: ident $(<$($CConstraintBoundParams: ty $( = $CEqBound: ty )*),*>)* )*]
670
    ) =>
671
    {
672
        impl<'a, T, $R, $C, S, $($RTyP : $RTyPB,)* $($CTyP : $CTyPB),*> MatrixIndex<'a, T, $R, $C, S> for ($RIdx, $CIdx)
673
        where
674
            T: Scalar,
675
            $R: Dim,
676
            $C: Dim,
677
            S: RawStorage<T, R, C>,
678
            $( $RConstraintType: $RConstraintBound $(<$( $RConstraintBoundParams $( = $REqBound )*),*>)* ,)*
679
            $( $CConstraintType: $CConstraintBound $(<$( $CConstraintBoundParams $( = $CEqBound )*),*>)* ),*
680
        {
681
            type Output = MatrixView<'a, T, $ROut, $COut, S::RStride, S::CStride>;
682
683
            #[doc(hidden)]
684
            #[inline(always)]
685
            fn contained_by(&self, matrix: &Matrix<T, $R, $C, S>) -> bool {
686
                let (rows, cols) = self;
687
                let (nrows, ncols) = matrix.shape_generic();
688
                DimRange::contained_by(rows, nrows) && DimRange::contained_by(cols, ncols)
689
            }
690
691
            #[doc(hidden)]
692
            #[inline(always)]
693
            unsafe fn get_unchecked(self, matrix: &'a Matrix<T, $R, $C, S>) -> Self::Output { unsafe {
694
                use crate::base::ViewStorage;
695
696
                let (rows, cols) = self;
697
                let (nrows, ncols) = matrix.shape_generic();
698
699
                let data =
700
                    ViewStorage::new_unchecked(&matrix.data,
701
                        (rows.lower(nrows),  cols.lower(ncols)),
702
                        (rows.length(nrows), cols.length(ncols)));
703
704
                Matrix::from_data_statically_unchecked(data)
705
            }}
706
        }
707
708
        impl<'a, T, $R, $C, S, $($RTyP : $RTyPB,)* $($CTyP : $CTyPB),*> MatrixIndexMut<'a, T, $R, $C, S> for ($RIdx, $CIdx)
709
        where
710
            T: Scalar,
711
            $R: Dim,
712
            $C: Dim,
713
            S: RawStorageMut<T, R, C>,
714
            $( $RConstraintType: $RConstraintBound $(<$( $RConstraintBoundParams $( = $REqBound )*),*>)* ,)*
715
            $( $CConstraintType: $CConstraintBound $(<$( $CConstraintBoundParams $( = $CEqBound )*),*>)* ),*
716
        {
717
            type OutputMut = MatrixViewMut<'a, T, $ROut, $COut, S::RStride, S::CStride>;
718
719
            #[doc(hidden)]
720
            #[inline(always)]
721
            unsafe fn get_unchecked_mut(self, matrix: &'a mut Matrix<T, $R, $C, S>) -> Self::OutputMut { unsafe {
722
                use crate::base::ViewStorageMut;
723
724
                let (rows, cols) = self;
725
                let (nrows, ncols) = matrix.shape_generic();
726
727
                let data =
728
                    ViewStorageMut::new_unchecked(&mut matrix.data,
729
                        (rows.lower(nrows),  cols.lower(ncols)),
730
                        (rows.length(nrows), cols.length(ncols)));
731
732
                Matrix::from_data_statically_unchecked(data)
733
            }}
734
        }
735
    }
736
}
737
738
macro_rules! impl_index_pairs {
739
    (index $R: ident with {} index $C: ident with {$($r: tt,)* }) => {};
740
741
    (index $R: ident with {$lh : tt, $($lt : tt,)*}
742
     index $C: ident with { $($r: tt,)* }) =>
743
    {
744
        $(
745
            impl_index_pair!{$R, $C, $lh, $r}
746
        )*
747
        impl_index_pairs!{index $R with {$($lt,)*} index $C with {$($r,)*}}
748
    }
749
}
750
751
impl_index_pairs! {
752
    index R with {
753
        [<> usize                         =>  U1],
754
        [<> ops::Range<usize>             =>  Dyn],
755
        [<> ops::RangeFrom<usize>         =>  Dyn],
756
        [<> ops::RangeFull                =>  R],
757
        [<> ops::RangeInclusive<usize>    =>  Dyn],
758
        [<> ops::RangeTo<usize>           =>  Dyn],
759
        [<> ops::RangeToInclusive<usize>  =>  Dyn],
760
761
        [<I: Dim> ops::RangeFrom<I>
762
          =>  DimDiff<R, I>
763
          where R: DimSub<I>],
764
    }
765
    index C with {
766
        [<> usize                         =>  U1],
767
        [<> ops::Range<usize>             =>  Dyn],
768
        [<> ops::RangeFrom<usize>         =>  Dyn],
769
        [<> ops::RangeFull                =>  C],
770
        [<> ops::RangeInclusive<usize>    =>  Dyn],
771
        [<> ops::RangeTo<usize>           =>  Dyn],
772
        [<> ops::RangeToInclusive<usize>  =>  Dyn],
773
774
        [<J: DimName> ops::RangeFrom<J>
775
          =>  DimDiff<C, J>
776
          where C: DimSub<J>],
777
    }
778
}