rune_alloc/limit/
std.rs

1use core::cell::Cell;
2
3std::thread_local!(static MEMORY: Cell<usize> = const { Cell::new(usize::MAX) });
4
5pub(super) fn rune_memory_take(amount: usize) -> bool {
6    MEMORY.with(|tls| {
7        let v = tls.get();
8
9        if v >= amount {
10            tls.set(v.wrapping_sub(amount));
11            true
12        } else {
13            false
14        }
15    })
16}
17
18pub(super) fn rune_memory_release(amount: usize) {
19    MEMORY.with(|tls| {
20        let v = tls.get();
21        tls.set(v.saturating_add(amount));
22    })
23}
24
25pub(super) fn rune_memory_get() -> usize {
26    MEMORY.with(|tls| tls.get())
27}
28
29pub(super) fn rune_memory_replace(value: usize) -> usize {
30    MEMORY.with(|tls| tls.replace(value))
31}