Crates.io | summed-area-table |
lib.rs | summed-area-table |
version | 2.0.0 |
source | src |
created_at | 2015-03-21 16:49:08.086346 |
updated_at | 2017-01-13 22:11:02.648289 |
description | Implementation of a summed area table |
homepage | https://github.com/forgemo/summed_area_table |
repository | https://github.com/forgemo/summed_area_table |
max_upload_size | |
id | 1630 |
size | 17,567 |
Generic implementation of summed area tables with Rust
You can find more information about summed area tables on Wikipedia.
http://en.wikipedia.org/wiki/Summed_area_table
[dependencies]
summed-area-table = "*"
nalgebra = "0.4.0" // this is not needed if you don't want to use nalgebra::DMat
use nalgebra::{DMat}; // this is not needed if you don't want to use nalgebra::DMat
use summed_area_table::{SummedAreaTableSource, SummedAreaTable};
let src: DMat<usize> = DMat::new_ones(10,10);
let table = src.calculate_full_summed_area_table();
assert_eq!(100.0, table.get_sum((0,0),(9,9)));
assert_eq!(50.0, table.get_sum((0,0),(9,4)));
assert_eq!(25.0, table.get_sum((0,0),(4,4)));
assert_eq!(10.0, table.get_average((0,0),(9,9)));
assert_eq!(10.0, table.get_average((0,0),(9,4)));
assert_eq!(10.0, table.get_average((0,0),(4,4)));
You can implement the SummedAreaTableSource
trait for your own types if you want them to have the calculate_summed_area_table()
method. All you need, is to implement the SummedAreaTableSource<T>
trait.
T
need to implement the SourceValue
trait. This library, however, comes with implementations for all primitive numeric types.
The following code shows how this library implements SummedAreaTableSource<T>
for the nalgebra::DMat<T>
type.
impl <T: SourceValue>SummedAreaTableSource<T> for DMat<T>{
fn at(&self, x: usize, y: usize) -> &T {
&self[(y,x)]
}
fn height(&self) -> usize {
self.nrows()
}
fn width(&self) -> usize {
self.ncols()
}
}