spore_vm/val/
struct_val.rs1use std::collections::HashMap;
2
3use super::{Symbol, UnsafeVal, Val};
4
5#[derive(Clone, Debug, Default)]
7pub struct StructVal {
8 inner: HashMap<Symbol, UnsafeVal>,
9}
10
11impl StructVal {
12 pub fn new() -> StructVal {
14 StructVal::with_capacity(0)
15 }
16
17 pub fn with_capacity(cap: usize) -> StructVal {
19 StructVal {
20 inner: HashMap::with_capacity(cap),
21 }
22 }
23
24 pub fn len(&self) -> usize {
26 self.inner.len()
27 }
28
29 pub fn is_empty(&self) -> bool {
31 self.inner.is_empty()
32 }
33
34 pub fn set(&mut self, symbol: Symbol, value: Val<'static>) {
36 self.inner.insert(symbol, value.inner);
37 }
38
39 pub fn get(&self, symbol: Symbol) -> Option<UnsafeVal> {
41 self.inner.get(&symbol).copied()
42 }
43
44 pub fn iter(&self) -> impl '_ + Iterator<Item = (Symbol, UnsafeVal)> {
46 self.inner.iter().map(|(k, v)| (*k, *v))
47 }
48
49 pub fn values(&self) -> impl '_ + Iterator<Item = UnsafeVal> {
51 self.inner.values().copied()
52 }
53}