forked from M-Labs/nalgebra
Add unsafe methods to initialize a DVec or DMat without initialization.
This commit is contained in:
parent
05470bba90
commit
3b814b462f
21
src/dmat.rs
21
src/dmat.rs
@ -17,6 +17,21 @@ pub struct DMat<N> {
|
||||
priv mij: ~[N]
|
||||
}
|
||||
|
||||
impl<N> DMat<N> {
|
||||
/// Creates an uninitialized matrix.
|
||||
#[inline]
|
||||
pub unsafe fn new_uninitialized(nrows: uint, ncols: uint) -> DMat<N> {
|
||||
let mut vec = vec::with_capacity(nrows * ncols);
|
||||
vec::raw::set_len(&mut vec, nrows * ncols);
|
||||
|
||||
DMat {
|
||||
nrows: nrows,
|
||||
ncols: ncols,
|
||||
mij: vec
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<N: Zero + Clone> DMat<N> {
|
||||
/// Builds a matrix filled with zeros.
|
||||
///
|
||||
@ -142,7 +157,7 @@ impl<N: Clone + Mul<N, N> + Add<N, N> + Zero> Mul<DMat<N>, DMat<N>> for DMat<N>
|
||||
fn mul(&self, other: &DMat<N>) -> DMat<N> {
|
||||
assert!(self.ncols == other.nrows);
|
||||
|
||||
let mut res = DMat::new_zeros(self.nrows, other.ncols);
|
||||
let mut res = unsafe { DMat::new_uninitialized(self.nrows, other.ncols) };
|
||||
|
||||
for i in range(0u, self.nrows) {
|
||||
for j in range(0u, other.ncols) {
|
||||
@ -165,7 +180,7 @@ RMul<DVec<N>> for DMat<N> {
|
||||
fn rmul(&self, other: &DVec<N>) -> DVec<N> {
|
||||
assert!(self.ncols == other.at.len());
|
||||
|
||||
let mut res : DVec<N> = DVec::new_zeros(self.nrows);
|
||||
let mut res : DVec<N> = unsafe { DVec::new_uninitialized(self.nrows) };
|
||||
|
||||
for i in range(0u, self.nrows) {
|
||||
let mut acc: N = Zero::zero();
|
||||
@ -186,7 +201,7 @@ LMul<DVec<N>> for DMat<N> {
|
||||
fn lmul(&self, other: &DVec<N>) -> DVec<N> {
|
||||
assert!(self.nrows == other.at.len());
|
||||
|
||||
let mut res : DVec<N> = DVec::new_zeros(self.ncols);
|
||||
let mut res : DVec<N> = unsafe { DVec::new_uninitialized(self.ncols) };
|
||||
|
||||
for i in range(0u, self.ncols) {
|
||||
let mut acc: N = Zero::zero();
|
||||
|
13
src/dvec.rs
13
src/dvec.rs
@ -54,6 +54,19 @@ impl<N: Rand> DVec<N> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<N> DVec<N> {
|
||||
/// Creates an uninitialized vec.
|
||||
#[inline]
|
||||
pub unsafe fn new_uninitialized(dim: uint) -> DVec<N> {
|
||||
let mut vec = vec::with_capacity(dim);
|
||||
vec::raw::set_len(&mut vec, dim);
|
||||
|
||||
DVec {
|
||||
at: vec
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<N: Clone> DVec<N> {
|
||||
/// Builds a vector filled with a constant.
|
||||
#[inline]
|
||||
|
Loading…
Reference in New Issue
Block a user