nyar_assembler/program/
pool.rs1use gaia_types::QualifiedName;
2use super::types::NyarConstant;
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Default)]
9pub struct NyarConstantPool {
10 pub constants: HashMap<NyarConstant, u16>,
12 pub pool: Vec<NyarConstant>,
14}
15
16impl NyarConstantPool {
17 pub fn new() -> Self {
19 Self::default()
20 }
21
22 pub fn add(&mut self, constant: NyarConstant) -> u16 {
26 if let Some(&index) = self.constants.get(&constant) {
27 return index;
28 }
29 let index = self.pool.len() as u16;
30 self.constants.insert(constant.clone(), index);
31 self.pool.push(constant);
32 index
33 }
34
35 pub fn add_int(&mut self, value: i64) -> u16 {
37 self.add(NyarConstant::Int(value))
38 }
39
40 pub fn add_float(&mut self, value: f64) -> u16 {
42 self.add(NyarConstant::float(value))
43 }
44
45 pub fn add_string(&mut self, value: String) -> u16 {
47 self.add(NyarConstant::String(value))
48 }
49
50 pub fn add_qualified_name(&mut self, value: QualifiedName) -> u16 {
52 self.add(NyarConstant::QualifiedName(value))
53 }
54
55 pub fn into_vec(self) -> Vec<NyarConstant> {
57 self.pool
58 }
59
60 pub fn len(&self) -> usize {
62 self.pool.len()
63 }
64
65 pub fn is_empty(&self) -> bool {
67 self.pool.is_empty()
68 }
69}