Skip to content

Commit ecd09eb

Browse files
committed
Split lax::alloc submodule
1 parent f7356c7 commit ecd09eb

File tree

2 files changed

+62
-58
lines changed

2 files changed

+62
-58
lines changed

lax/src/alloc.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
use cauchy::*;
2+
use std::mem::MaybeUninit;
3+
4+
/// Helper for getting pointer of slice
5+
pub(crate) trait AsPtr: Sized {
6+
type Elem;
7+
fn as_ptr(vec: &[Self]) -> *const Self::Elem;
8+
fn as_mut_ptr(vec: &mut [Self]) -> *mut Self::Elem;
9+
}
10+
11+
macro_rules! impl_as_ptr {
12+
($target:ty, $elem:ty) => {
13+
impl AsPtr for $target {
14+
type Elem = $elem;
15+
fn as_ptr(vec: &[Self]) -> *const Self::Elem {
16+
vec.as_ptr() as *const _
17+
}
18+
fn as_mut_ptr(vec: &mut [Self]) -> *mut Self::Elem {
19+
vec.as_mut_ptr() as *mut _
20+
}
21+
}
22+
};
23+
}
24+
impl_as_ptr!(i32, i32);
25+
impl_as_ptr!(f32, f32);
26+
impl_as_ptr!(f64, f64);
27+
impl_as_ptr!(c32, lapack_sys::__BindgenComplex<f32>);
28+
impl_as_ptr!(c64, lapack_sys::__BindgenComplex<f64>);
29+
impl_as_ptr!(MaybeUninit<i32>, i32);
30+
impl_as_ptr!(MaybeUninit<f32>, f32);
31+
impl_as_ptr!(MaybeUninit<f64>, f64);
32+
impl_as_ptr!(MaybeUninit<c32>, lapack_sys::__BindgenComplex<f32>);
33+
impl_as_ptr!(MaybeUninit<c64>, lapack_sys::__BindgenComplex<f64>);
34+
35+
pub(crate) trait VecAssumeInit {
36+
type Target;
37+
unsafe fn assume_init(self) -> Self::Target;
38+
}
39+
40+
impl<T> VecAssumeInit for Vec<MaybeUninit<T>> {
41+
type Target = Vec<T>;
42+
unsafe fn assume_init(self) -> Self::Target {
43+
// FIXME use Vec::into_raw_parts instead after stablized
44+
// https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts
45+
let mut me = std::mem::ManuallyDrop::new(self);
46+
Vec::from_raw_parts(me.as_mut_ptr() as *mut T, me.len(), me.capacity())
47+
}
48+
}
49+
50+
/// Create a vector without initialization
51+
///
52+
/// Safety
53+
/// ------
54+
/// - Memory is not initialized. Do not read the memory before write.
55+
///
56+
pub(crate) unsafe fn vec_uninit<T: Sized>(n: usize) -> Vec<MaybeUninit<T>> {
57+
let mut v = Vec::with_capacity(n);
58+
v.set_len(n);
59+
v
60+
}

lax/src/lib.rs

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ pub mod error;
8484
pub mod flags;
8585
pub mod layout;
8686

87+
mod alloc;
8788
mod cholesky;
8889
mod eig;
8990
mod eigh;
@@ -113,6 +114,7 @@ pub use self::svddc::*;
113114
pub use self::triangular::*;
114115
pub use self::tridiagonal::*;
115116

117+
use self::alloc::*;
116118
use cauchy::*;
117119
use std::mem::MaybeUninit;
118120

@@ -140,61 +142,3 @@ impl Lapack for f32 {}
140142
impl Lapack for f64 {}
141143
impl Lapack for c32 {}
142144
impl Lapack for c64 {}
143-
144-
/// Helper for getting pointer of slice
145-
pub(crate) trait AsPtr: Sized {
146-
type Elem;
147-
fn as_ptr(vec: &[Self]) -> *const Self::Elem;
148-
fn as_mut_ptr(vec: &mut [Self]) -> *mut Self::Elem;
149-
}
150-
151-
macro_rules! impl_as_ptr {
152-
($target:ty, $elem:ty) => {
153-
impl AsPtr for $target {
154-
type Elem = $elem;
155-
fn as_ptr(vec: &[Self]) -> *const Self::Elem {
156-
vec.as_ptr() as *const _
157-
}
158-
fn as_mut_ptr(vec: &mut [Self]) -> *mut Self::Elem {
159-
vec.as_mut_ptr() as *mut _
160-
}
161-
}
162-
};
163-
}
164-
impl_as_ptr!(i32, i32);
165-
impl_as_ptr!(f32, f32);
166-
impl_as_ptr!(f64, f64);
167-
impl_as_ptr!(c32, lapack_sys::__BindgenComplex<f32>);
168-
impl_as_ptr!(c64, lapack_sys::__BindgenComplex<f64>);
169-
impl_as_ptr!(MaybeUninit<i32>, i32);
170-
impl_as_ptr!(MaybeUninit<f32>, f32);
171-
impl_as_ptr!(MaybeUninit<f64>, f64);
172-
impl_as_ptr!(MaybeUninit<c32>, lapack_sys::__BindgenComplex<f32>);
173-
impl_as_ptr!(MaybeUninit<c64>, lapack_sys::__BindgenComplex<f64>);
174-
175-
pub(crate) trait VecAssumeInit {
176-
type Target;
177-
unsafe fn assume_init(self) -> Self::Target;
178-
}
179-
180-
impl<T> VecAssumeInit for Vec<MaybeUninit<T>> {
181-
type Target = Vec<T>;
182-
unsafe fn assume_init(self) -> Self::Target {
183-
// FIXME use Vec::into_raw_parts instead after stablized
184-
// https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts
185-
let mut me = std::mem::ManuallyDrop::new(self);
186-
Vec::from_raw_parts(me.as_mut_ptr() as *mut T, me.len(), me.capacity())
187-
}
188-
}
189-
190-
/// Create a vector without initialization
191-
///
192-
/// Safety
193-
/// ------
194-
/// - Memory is not initialized. Do not read the memory before write.
195-
///
196-
unsafe fn vec_uninit<T: Sized>(n: usize) -> Vec<MaybeUninit<T>> {
197-
let mut v = Vec::with_capacity(n);
198-
v.set_len(n);
199-
v
200-
}

0 commit comments

Comments
 (0)