README.md
gno.land/p/moul/memo/v0
A simple memoization utility to cache function results, backed by a B+ tree
(gno.land/p/nt/bptree).
A B+ tree packs many entries per persisted node, so it costs materially less storage and gas per cached entry than an AVL backing would.
1import "gno.land/p/moul/memo/v0"
2
3m := memo.New()
4
5// Cache expensive computation; subsequent calls with the same key
6// return the cached result without re-running the function.
7result := m.Memoize("key", func() any {
8 return "computed-value"
9})
10
11m.Invalidate("key") // drop one entry
12m.Clear() // drop all entries
13m.Size() // number of cached entries
⚠️ Gno usage: storage updates only persist during transactions. Memoizing during queries/render will not persist and only wastes resources — use this in transaction-driven contexts.
Caveats from the B+ tree backing: it mutates in place (a copy-on-write AVL
backing would not), so do not Invalidate/add entries from inside a callback
iterating the same Memoizer, and do not copy a non-zero Memoizer by value.
Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.
Dependency graph:

⚠️ Disclaimer: provided as-is, without warranty; not security-audited. Full disclaimer: DISCLAIMER.