Skip to content

Commit 678d9a4

Browse files
committed
Added a new MemoOperator enumeration and refactored internal methods with enumeration parameters to prepare for new features other than evaluation caching.
1 parent 734e6cf commit 678d9a4

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

cache/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
use lru::LruCache;
22
use std::{any::Any, num::NonZeroUsize, rc::Rc};
33

4+
pub enum MemoOperator {
5+
Memo,
6+
}
7+
48
const CACHE_CAP: usize = 128;
59

610
static mut CACHE: Option<LruCache<usize, Rc<dyn Any>>> = None;

macros/src/lib.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use proc_macro::TokenStream;
2-
use quote::quote;
3-
use syn::{ItemFn, ReturnType, parse_macro_input};
2+
use quote::{format_ident, quote};
3+
use syn::{ItemFn, ReturnType, parse_macro_input, parse_quote};
44

55
#[proc_macro_attribute]
66
pub fn memo(_attr: TokenStream, item: TokenStream) -> TokenStream {
@@ -29,9 +29,21 @@ pub fn memo(_attr: TokenStream, item: TokenStream) -> TokenStream {
2929
.into();
3030
}
3131

32+
let _ident = format_ident!("_{}", sig.ident);
33+
let mut _sig = sig.clone();
34+
_sig.ident = _ident.clone();
35+
_sig.inputs
36+
.insert(0, parse_quote! { op: cache::MemoOperator });
37+
3238
let expanded = quote! {
3339
#vis #sig
3440
where #output_ty: Clone + 'static
41+
{
42+
#_ident(cache::MemoOperator::Memo)
43+
}
44+
45+
#vis #_sig
46+
where #output_ty: Clone + 'static
3547
{
3648
unsafe {
3749
let key = #ident as usize;

0 commit comments

Comments
 (0)