### 11 releases (2 stable)

Uses old Rust 2015

2.0.0 | Jan 13, 2017 |
---|---|

1.0.0 | Dec 22, 2015 |

0.0.9 | Dec 4, 2015 |

0.0.8 | Sep 25, 2015 |

0.0.1 | Mar 21, 2015 |

#**1665** in Algorithms

**MIT**license

17KB

329 lines

# summed_area_table

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

## Basic usage

#### Dependecies for your cargo.toml

`[`dependencies`]`
summed`-`area`-`table `=` `"`*`"`
nalgebra `=` `"`0.4.0`"` `//` this is not needed if you don't want to use nalgebra::DMat

#### Import the required content.

`use` `nalgebra``::``{`DMat`}``;` `//` this is not needed if you don't want to use nalgebra::DMat
`use` `summed_area_table``::``{`SummedAreaTableSource`,` SummedAreaTable`}``;`

#### Creating a summed area table for a 10x10 matrix filled with ones.

`let` src`:` `DMat``<``usize``>` `=` `DMat``::`new_ones`(``10``,``10``)``;`
`let` table `=` src`.``calculate_full_summed_area_table``(``)``;`

#### Getting the sum of a specific area

`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``)``)``)``;`

#### Getting the average of a specific area

`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``)``)``)``;`

## Custom Data Source

You can implement the

trait for your own types if you want them to have the `SummedAreaTableSource`

method. All you need, is to implement the `calculate_summed_area_table``(``)`

trait.
`SummedAreaTableSource <T>`

`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

for the `SummedAreaTableSource <T>`

`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``(``)`
`}`
`}`

#### Dependencies

~3MB

~51K SLoC