pub struct MaskedCellBuffer(/* private fields */);Expand description
A CellBuffer with a companion Mask.
The Mask tracks which cells are valid across operations, and which should be
treated as “no-data” values.
§Example
use erased_cells::{BufferOps, Mask, MaskedCellBuffer};
// Fill a buffer with the `u16` numbers `0..=3` and mask [true, false, true, false].
let buf = MaskedCellBuffer::fill_with_mask_via(4, |i| (i as f64, i % 2 == 0));
assert_eq!(buf.mask(), &Mask::new(vec![true, false, true, false]));
// We can count the data/no-data values
assert_eq!(buf.counts(), (2, 2));
// Mask values are propagated across math operations.
let ones = MaskedCellBuffer::from_vec(vec![1.0; 4]);
let r = (buf + ones) * 2.0;
let expected = MaskedCellBuffer::new(
vec![
(0.0 + 1.0) * 2.0,
(1.0 + 1.0) * 2.0,
(2.0 + 1.0) * 2.0,
(3.0 + 1.0) * 2.0,
]
.into(),
Mask::new(vec![true, false, true, false]),
);
assert_eq!(r, expected);Implementations§
Source§impl MaskedCellBuffer
impl MaskedCellBuffer
Sourcepub fn new(buffer: CellBuffer, mask: Mask) -> Self
pub fn new(buffer: CellBuffer, mask: Mask) -> Self
Create a new combined CellBuffer and Mask.
§Panics
Will panics if buffer and mask are not the same length.
Examples found in repository?
2fn main() {
3 use erased_cells::{BufferOps, Mask, MaskedCellBuffer};
4 // Fill a buffer with the `u16` numbers `0..=3` and mask [true, false, true, false].
5 let buf = MaskedCellBuffer::fill_with_mask_via(4, |i| (i as f64, i % 2 == 0));
6 assert_eq!(buf.mask(), &Mask::new(vec![true, false, true, false]));
7 // We can count the data/no-data values
8 assert_eq!(buf.counts(), (2, 2));
9
10 // Mask values are propagated across math operations.
11 let ones = MaskedCellBuffer::from_vec(vec![1.0; 4]);
12 let r = (buf + ones) * 2.0;
13 let expected = MaskedCellBuffer::new(
14 vec![
15 (0.0 + 1.0) * 2.0,
16 (1.0 + 1.0) * 2.0,
17 (2.0 + 1.0) * 2.0,
18 (3.0 + 1.0) * 2.0,
19 ]
20 .into(),
21 Mask::new(vec![true, false, true, false]),
22 );
23 assert_eq!(r, expected);
24}Sourcepub fn from_vec_with_nodata<T: CellEncoding>(
data: Vec<T>,
nodata: NoData<T>,
) -> Self
pub fn from_vec_with_nodata<T: CellEncoding>( data: Vec<T>, nodata: NoData<T>, ) -> Self
Constructs a MaskedCellBuffer from a Vec<CellEncoding>, specifying a NoData<T> value.
Mask value will be false when associated cell matches nodata.
Use Self::from_vec
Sourcepub fn fill_with_mask_via<T, F>(len: usize, mv: F) -> Self
pub fn fill_with_mask_via<T, F>(len: usize, mv: F) -> Self
Examples found in repository?
2fn main() {
3 use erased_cells::{BufferOps, Mask, MaskedCellBuffer};
4 // Fill a buffer with the `u16` numbers `0..=3` and mask [true, false, true, false].
5 let buf = MaskedCellBuffer::fill_with_mask_via(4, |i| (i as f64, i % 2 == 0));
6 assert_eq!(buf.mask(), &Mask::new(vec![true, false, true, false]));
7 // We can count the data/no-data values
8 assert_eq!(buf.counts(), (2, 2));
9
10 // Mask values are propagated across math operations.
11 let ones = MaskedCellBuffer::from_vec(vec![1.0; 4]);
12 let r = (buf + ones) * 2.0;
13 let expected = MaskedCellBuffer::new(
14 vec![
15 (0.0 + 1.0) * 2.0,
16 (1.0 + 1.0) * 2.0,
17 (2.0 + 1.0) * 2.0,
18 (3.0 + 1.0) * 2.0,
19 ]
20 .into(),
21 Mask::new(vec![true, false, true, false]),
22 );
23 assert_eq!(r, expected);
24}pub fn buffer(&self) -> &CellBuffer
pub fn buffer_mut(&mut self) -> &mut CellBuffer
Sourcepub fn mask(&self) -> &Mask
pub fn mask(&self) -> &Mask
Examples found in repository?
2fn main() {
3 use erased_cells::{BufferOps, Mask, MaskedCellBuffer};
4 // Fill a buffer with the `u16` numbers `0..=3` and mask [true, false, true, false].
5 let buf = MaskedCellBuffer::fill_with_mask_via(4, |i| (i as f64, i % 2 == 0));
6 assert_eq!(buf.mask(), &Mask::new(vec![true, false, true, false]));
7 // We can count the data/no-data values
8 assert_eq!(buf.counts(), (2, 2));
9
10 // Mask values are propagated across math operations.
11 let ones = MaskedCellBuffer::from_vec(vec![1.0; 4]);
12 let r = (buf + ones) * 2.0;
13 let expected = MaskedCellBuffer::new(
14 vec![
15 (0.0 + 1.0) * 2.0,
16 (1.0 + 1.0) * 2.0,
17 (2.0 + 1.0) * 2.0,
18 (3.0 + 1.0) * 2.0,
19 ]
20 .into(),
21 Mask::new(vec![true, false, true, false]),
22 );
23 assert_eq!(r, expected);
24}pub fn mask_mut(&mut self) -> &mut Mask
Sourcepub fn get_masked(&self, index: usize) -> Option<CellValue>
pub fn get_masked(&self, index: usize) -> Option<CellValue>
Get a buffer value at position index with mask evaluated.
Returns Some(CellValue) if mask at index is true, None otherwise.
Sourcepub fn get_with_mask(&self, index: usize) -> (CellValue, bool)
pub fn get_with_mask(&self, index: usize) -> (CellValue, bool)
Get the cell value and mask value at position index.
Returns (CellValue, bool). If bool is false, associated
CellValue should be considered invalid.
Sourcepub fn put_with_mask(
&mut self,
index: usize,
value: CellValue,
mask: bool,
) -> Result<()>
pub fn put_with_mask( &mut self, index: usize, value: CellValue, mask: bool, ) -> Result<()>
Set the value and mask at position index.
Returns Err(NarrowingError) if value cannot be converted to
self.cell_type() without data loss (e.g. overflow).
Sourcepub fn counts(&self) -> (usize, usize)
pub fn counts(&self) -> (usize, usize)
Returns a tuple of representing counts of (data, nodata).
Examples found in repository?
2fn main() {
3 use erased_cells::{BufferOps, Mask, MaskedCellBuffer};
4 // Fill a buffer with the `u16` numbers `0..=3` and mask [true, false, true, false].
5 let buf = MaskedCellBuffer::fill_with_mask_via(4, |i| (i as f64, i % 2 == 0));
6 assert_eq!(buf.mask(), &Mask::new(vec![true, false, true, false]));
7 // We can count the data/no-data values
8 assert_eq!(buf.counts(), (2, 2));
9
10 // Mask values are propagated across math operations.
11 let ones = MaskedCellBuffer::from_vec(vec![1.0; 4]);
12 let r = (buf + ones) * 2.0;
13 let expected = MaskedCellBuffer::new(
14 vec![
15 (0.0 + 1.0) * 2.0,
16 (1.0 + 1.0) * 2.0,
17 (2.0 + 1.0) * 2.0,
18 (3.0 + 1.0) * 2.0,
19 ]
20 .into(),
21 Mask::new(vec![true, false, true, false]),
22 );
23 assert_eq!(r, expected);
24}Sourcepub fn to_vec_with_nodata<T: CellEncoding>(
self,
no_data: NoData<T>,
) -> Result<Vec<T>>
pub fn to_vec_with_nodata<T: CellEncoding>( self, no_data: NoData<T>, ) -> Result<Vec<T>>
Convert self into a Vec<T>, replacing values where the mask is 0 to no_data.value()
Trait Implementations§
Source§impl Add<&MaskedCellBuffer> for MaskedCellBuffer
impl Add<&MaskedCellBuffer> for MaskedCellBuffer
Source§type Output = MaskedCellBuffer
type Output = MaskedCellBuffer
+ operator.Source§impl<R> Add<R> for MaskedCellBuffer
impl<R> Add<R> for MaskedCellBuffer
Source§impl Add for &MaskedCellBuffer
impl Add for &MaskedCellBuffer
Source§impl Add for MaskedCellBuffer
impl Add for MaskedCellBuffer
Source§impl BufferOps for MaskedCellBuffer
impl BufferOps for MaskedCellBuffer
Source§fn to_vec<T: CellEncoding>(self) -> Result<Vec<T>>
fn to_vec<T: CellEncoding>(self) -> Result<Vec<T>>
Converts self to Vec<T>, ignoring the mask values.
See also: Self::to_vec_with_nodata and NoData.
Source§fn from_vec<T: CellEncoding>(data: Vec<T>) -> Self
fn from_vec<T: CellEncoding>(data: Vec<T>) -> Self
CellBuffer from a Vec<T>.Source§fn with_defaults(len: usize, ct: CellType) -> Self
fn with_defaults(len: usize, ct: CellType) -> Self
Source§fn fill(len: usize, value: CellValue) -> Self
fn fill(len: usize, value: CellValue) -> Self
len with all values value.Source§fn fill_via<T, F>(len: usize, f: F) -> Self
fn fill_via<T, F>(len: usize, f: F) -> Self
len with values from a closure. Read moreSource§impl Clone for MaskedCellBuffer
impl Clone for MaskedCellBuffer
Source§fn clone(&self) -> MaskedCellBuffer
fn clone(&self) -> MaskedCellBuffer
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MaskedCellBuffer
impl Debug for MaskedCellBuffer
Source§impl<'de> Deserialize<'de> for MaskedCellBuffer
impl<'de> Deserialize<'de> for MaskedCellBuffer
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Div<&MaskedCellBuffer> for MaskedCellBuffer
impl Div<&MaskedCellBuffer> for MaskedCellBuffer
Source§type Output = MaskedCellBuffer
type Output = MaskedCellBuffer
/ operator.Source§impl<R> Div<R> for MaskedCellBuffer
impl<R> Div<R> for MaskedCellBuffer
Source§impl Div for &MaskedCellBuffer
impl Div for &MaskedCellBuffer
Source§impl Div for MaskedCellBuffer
impl Div for MaskedCellBuffer
Source§impl<C: CellEncoding> Extend<(C, bool)> for MaskedCellBuffer
impl<C: CellEncoding> Extend<(C, bool)> for MaskedCellBuffer
Source§fn extend<T: IntoIterator<Item = (C, bool)>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = (C, bool)>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<'a> From<&'a MaskedCellBuffer> for (&'a CellBuffer, &'a Mask)
impl<'a> From<&'a MaskedCellBuffer> for (&'a CellBuffer, &'a Mask)
Source§fn from(value: &'a MaskedCellBuffer) -> Self
fn from(value: &'a MaskedCellBuffer) -> Self
Source§impl From<CellBuffer> for MaskedCellBuffer
Converts a CellBuffer into a MaskedCellBuffer with an all-true mask.
impl From<CellBuffer> for MaskedCellBuffer
Converts a CellBuffer into a MaskedCellBuffer with an all-true mask.
Source§fn from(value: CellBuffer) -> Self
fn from(value: CellBuffer) -> Self
Source§impl From<MaskedCellBuffer> for (CellBuffer, Mask)
impl From<MaskedCellBuffer> for (CellBuffer, Mask)
Source§fn from(value: MaskedCellBuffer) -> Self
fn from(value: MaskedCellBuffer) -> Self
Source§impl<C: CellEncoding> FromIterator<(C, bool)> for MaskedCellBuffer
impl<C: CellEncoding> FromIterator<(C, bool)> for MaskedCellBuffer
Source§impl<C: CellEncoding> FromIterator<C> for MaskedCellBuffer
impl<C: CellEncoding> FromIterator<C> for MaskedCellBuffer
Source§fn from_iter<T: IntoIterator<Item = C>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = C>>(iter: T) -> Self
Source§impl<'buf> IntoIterator for &'buf MaskedCellBuffer
impl<'buf> IntoIterator for &'buf MaskedCellBuffer
Source§impl Mul<&MaskedCellBuffer> for MaskedCellBuffer
impl Mul<&MaskedCellBuffer> for MaskedCellBuffer
Source§type Output = MaskedCellBuffer
type Output = MaskedCellBuffer
* operator.Source§impl<R> Mul<R> for MaskedCellBuffer
impl<R> Mul<R> for MaskedCellBuffer
Source§impl Mul for &MaskedCellBuffer
impl Mul for &MaskedCellBuffer
Source§impl Mul for MaskedCellBuffer
impl Mul for MaskedCellBuffer
Source§impl Neg for &MaskedCellBuffer
impl Neg for &MaskedCellBuffer
Source§impl Neg for MaskedCellBuffer
impl Neg for MaskedCellBuffer
Source§impl PartialEq for MaskedCellBuffer
impl PartialEq for MaskedCellBuffer
Source§impl PartialOrd for MaskedCellBuffer
impl PartialOrd for MaskedCellBuffer
Source§impl Serialize for MaskedCellBuffer
impl Serialize for MaskedCellBuffer
Source§impl Sub<&MaskedCellBuffer> for MaskedCellBuffer
impl Sub<&MaskedCellBuffer> for MaskedCellBuffer
Source§type Output = MaskedCellBuffer
type Output = MaskedCellBuffer
- operator.