An open API service indexing awesome lists of open source software.

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

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/