rlst/
traits.rs

1//! Traits used by RLST.
2
3pub mod abstract_operator;
4pub mod accessors;
5pub mod base_operations;
6pub mod data_container;
7#[cfg(feature = "mpi")]
8pub mod distributed;
9pub mod io;
10pub mod iterators;
11pub mod linalg;
12pub mod linear_space;
13pub mod number_relations;
14pub mod number_traits;
15pub mod rlst_num;
16pub mod sparse;
17
18pub use accessors::*;
19pub use base_operations::*;
20pub use data_container::*;
21#[cfg(feature = "mpi")]
22pub use distributed::*;
23pub use io::*;
24pub use iterators::*;
25pub use linalg::*;
26pub use linear_space::*;
27pub use number_relations::*;
28pub use number_traits::*;
29pub use rlst_num::*;
30pub use sparse::*;
31
32/// Default trait for Arrays that can return values.
33pub trait ValueArrayImpl<Item, const NDIM: usize>:
34    UnsafeRandom1DAccessByValue<Item = Item>
35    + UnsafeRandomAccessByValue<NDIM, Item = Item>
36    + Shape<NDIM>
37    + ContainerType
38{
39}
40
41impl<A, Item, const NDIM: usize> ValueArrayImpl<Item, NDIM> for A where
42    A: UnsafeRandom1DAccessByValue<Item = Item>
43        + UnsafeRandomAccessByValue<NDIM, Item = Item>
44        + Shape<NDIM>
45        + ContainerType
46{
47}
48
49/// Default trait for Arrays that can return references.
50pub trait RefArrayImpl<Item, const NDIM: usize>:
51    ValueArrayImpl<Item, NDIM>
52    + UnsafeRandom1DAccessByRef<Item = Item>
53    + UnsafeRandomAccessByRef<NDIM, Item = Item>
54{
55}
56
57impl<A, Item, const NDIM: usize> RefArrayImpl<Item, NDIM> for A where
58    A: ValueArrayImpl<Item, NDIM>
59        + UnsafeRandom1DAccessByRef<Item = Item>
60        + UnsafeRandomAccessByRef<NDIM, Item = Item>
61{
62}
63
64/// Default trait for mutable arrays.
65pub trait MutableArrayImpl<Item, const NDIM: usize>:
66    RefArrayImpl<Item, NDIM>
67    + UnsafeRandom1DAccessMut<Item = Item>
68    + UnsafeRandomAccessMut<NDIM, Item = Item>
69{
70}
71
72impl<A, Item, const NDIM: usize> MutableArrayImpl<Item, NDIM> for A where
73    A: RefArrayImpl<Item, NDIM>
74        + UnsafeRandom1DAccessMut<Item = Item>
75        + UnsafeRandomAccessMut<NDIM, Item = Item>
76{
77}
78
79/// Default trait for arrays that allow RawAccess.
80pub trait RawAccessArrayImpl<Item, const NDIM: usize>:
81    ValueArrayImpl<Item, NDIM> + RawAccess<Item = Item> + Stride<NDIM>
82{
83}
84
85impl<A, Item, const NDIM: usize> RawAccessArrayImpl<Item, NDIM> for A where
86    A: ValueArrayImpl<Item, NDIM> + RawAccess<Item = Item> + Stride<NDIM>
87{
88}
89
90/// Default trait for arrays that allow mutable raw access.
91pub trait MutableRawAccessArrayImpl<Item, const NDIM: usize>:
92    RawAccessArrayImpl<Item, NDIM> + RawAccessMut<Item = Item>
93{
94}
95
96impl<A, Item, const NDIM: usize> MutableRawAccessArrayImpl<Item, NDIM> for A where
97    A: RawAccessArrayImpl<Item, NDIM> + RawAccessMut<Item = Item>
98{
99}