use slatec_sys::blas::level1 as raw;
use super::super::{BlasError, validation};
use super::audited_candidate_call;
use validation::{count, increment, matching_lengths, output_pointer};
pub fn dswap(x: &mut [f64], y: &mut [f64]) -> Result<(), BlasError> {
matching_lengths(x.len(), y.len())?;
dswap_strided(x.len(), x, 1, y, 1)
}
pub fn dswap_strided(
n: usize,
x: &mut [f64],
incx: isize,
y: &mut [f64],
incy: isize,
) -> Result<(), BlasError> {
let mut n = count(n, "n")?;
let mut incx = increment(incx, "incx")?;
let mut incy = increment(incy, "incy")?;
let x = output_pointer(x, n as usize, incx as isize, "x")?;
let y = output_pointer(y, n as usize, incy as isize, "y")?;
if n == 0 {
return Ok(());
}
audited_candidate_call(|| unsafe { raw::dswap(&mut n, x, &mut incx, y, &mut incy) });
Ok(())
}