Skip to content

Commit ad406a0

Browse files
committed
Add 'memoized_size_{}' funcion to retrieve the size of the cache
1 parent 84e37f7 commit ad406a0

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

examples/empty.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ fn hello() -> bool {
1111
fn main() {
1212
// `hello` is only called once here.
1313
assert!(hello());
14+
assert_eq!(memoized_size_hello(), 1);
1415
assert!(hello());
16+
assert_eq!(memoized_size_hello(), 1);
1517
memoized_flush_hello();
18+
assert_eq!(memoized_size_hello(), 0);
1619
// and again here.
1720
assert!(hello());
1821
}

examples/shared.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@ fn main() {
1212
assert!(!hello("World".to_string(), 0));
1313
// Sometimes one might need the original function.
1414
assert!(!memoized_original_hello("World".to_string(), 0));
15+
assert_eq!(memoized_size_hello(), 1);
1516
memoized_flush_hello();
17+
assert_eq!(memoized_size_hello(), 0);
1618
}

inner/src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ pub fn memoize(attr: TokenStream, item: TokenStream) -> TokenStream {
276276
let fn_name = &sig.ident.to_string();
277277
let renamed_name = format!("memoized_original_{}", fn_name);
278278
let flush_name = syn::Ident::new(format!("memoized_flush_{}", fn_name).as_str(), sig.span());
279+
let size_name = syn::Ident::new(format!("memoized_size_{}", fn_name).as_str(), sig.span());
279280
let map_name = format!("memoized_mapping_{}", fn_name);
280281

281282
if let Some(syn::FnArg::Receiver(_)) = sig.inputs.first() {
@@ -430,9 +431,24 @@ pub fn memoize(attr: TokenStream, item: TokenStream) -> TokenStream {
430431
}
431432
};
432433

434+
let size_func = if options.shared_cache {
435+
quote::quote! {
436+
#vis fn #size_name() -> usize {
437+
#store_ident.lock().unwrap().len()
438+
}
439+
}
440+
} else {
441+
quote::quote! {
442+
#vis fn #size_name() -> usize {
443+
#store_ident.with(|ATTR_MEMOIZE_HM__| ATTR_MEMOIZE_HM__.borrow().len())
444+
}
445+
}
446+
};
447+
433448
quote::quote! {
434449
#renamed_fn
435450
#flusher
451+
#size_func
436452
#store
437453

438454
#[allow(unused_variables, unused_mut)]

0 commit comments

Comments
 (0)