use super::BathymetryData;
use crate::{datatype::{Gradient, Point}, error::Result};
pub(crate) struct ArrayDepth {
array: Vec<Vec<f32>>,
}
impl BathymetryData for ArrayDepth {
fn depth(&self, point: &Point<f32>) -> Result<f32> {
let x = *point.x() as usize;
let y = *point.y() as usize;
if x >= self.array.len() || y >= self.array.len() {
return Ok(f32::NAN);
}
Ok(self.array[x][y])
}
fn depth_and_gradient(&self, point: &Point<f32>) -> Result<(f32, Gradient<f32>)> {
let x = *point.x() as usize;
let y = *point.y() as usize;
if x >= self.array.len() || y >= self.array.len() {
return Ok((f32::NAN, Gradient::new(f32::NAN, f32::NAN)));
}
Ok((self.array[x][y], Gradient::new(0.0, 0.0)))
}
}
#[allow(dead_code)]
impl ArrayDepth {
pub(crate) fn new(array: Vec<Vec<f32>>) -> Self {
ArrayDepth { array }
}
}