https://github.com/jimporter/memo
A C++17 memoization library
https://github.com/jimporter/memo
c-plus-plus memoization
Last synced: 9 months ago
JSON representation
A C++17 memoization library
- Host: GitHub
- URL: https://github.com/jimporter/memo
- Owner: jimporter
- License: bsd-3-clause
- Created: 2014-04-09T07:58:05.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2024-09-01T17:18:52.000Z (over 1 year ago)
- Last Synced: 2025-04-28T16:13:25.398Z (9 months ago)
- Topics: c-plus-plus, memoization
- Language: C++
- Homepage:
- Size: 39.1 KB
- Stars: 24
- Watchers: 3
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# memo
[![Build status][ci-image]][ci-link]
``memo`` is a small C++17 library designed to allow for easy memoization of
functions.
## Example
```c++
#include
// Use a regular function:
int foo(int a, int b) {
return a + b;
}
auto memo_foo = memoize(foo);
int x = memo_foo(1, 2);
// Or a lambda:
auto memo_lambda = memoize([](int a, int b) {
return a + b;
});
int y = memo_lambda(1, 2);
// Or a polymorphic function object:
struct bar {
int operator ()(int a, int b);
float operator ()(float a, float b);
};
auto memo_bar = memoize(bar{});
// Or a recursive function:
auto fib = recursive_memoize([](auto &fib, size_t n) -> size_t {
switch(n) {
case 0:
return 0;
case 1:
return 1;
default:
return fib(n-1) + fib(n-2);
}
});
// You can also specify the return type of your recursive function if the above
// fails:
auto fib2 = recursive_memoize(...);
// Or even the full signature:
auto fib3 = recursive_memoize(...);
```
## Requirements
This library requires a C++17-compliant compiler. Additionally, to run the
tests, you'll need [mettle][mettle].
## License
This library is licensed under the [BSD 3-Clause license](LICENSE).
[ci-image]: https://github.com/jimporter/memo/actions/workflows/build.yml/badge.svg
[ci-link]: https://github.com/jimporter/memo/actions/workflows/build.yml?query=branch%3Amaster
[mettle]: https://jimporter.github.io/mettle/