https://github.com/neolegends/memselect
No-std compatible memoizing selectors for Rust
https://github.com/neolegends/memselect
compose memoization selector
Last synced: 11 months ago
JSON representation
No-std compatible memoizing selectors for Rust
- Host: GitHub
- URL: https://github.com/neolegends/memselect
- Owner: NeoLegends
- License: mit
- Created: 2018-06-16T11:47:33.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-07-23T08:10:18.000Z (almost 8 years ago)
- Last Synced: 2025-04-01T10:54:39.568Z (about 1 year ago)
- Topics: compose, memoization, selector
- Language: Rust
- Size: 6.84 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# memselect

No-std compatible memoizing selectors for Rust.
Memselect allows you to create efficient selectors for memoizing expensive computations. The selectors can be composed to create higher-level selectors that benefit from memoization all the way down. Monomorphization ensures efficient runtime behavior.
## Example
```rust
use memselect::{new1, new2, Selector2};
let mut computations = 0;
{
let base = new1(|num: u32| num, |num| num * 2);
let mut selector = new2(
base, // You can nest selectors
|num: u32| num * 3,
|num1, num2| { // This function gets the output of `base` and the fn above
computations += 1;
(*num1, *num2)
},
);
assert_eq!(selector.select(2, 3), (4, 9));
assert_eq!(selector.select(2, 3), (4, 9));
}
// Value was computed only once
assert_eq!(computations, 1);
```