vertigo 0.2.0-alpha

Reactive Real-DOM library for Rust
Documentation
use std::rc::Rc;

use crate::{driver_module::js_value::MemoryBlock, JsValue, struct_mut::HashMapMut};

#[derive(Clone, Default)]
pub struct Arguments {
    blocks: Rc<HashMapMut<u32, MemoryBlock>>
}

impl Arguments {
    pub fn alloc(&self, size: u32) -> u32 {
        let block = MemoryBlock::new(size);
        let ptr = block.get_ptr();
        self.blocks.insert(ptr, block);
        ptr
    }

    pub fn free(&self, pointer: u32) {
        let block = self.blocks.remove(&pointer);

        if block.is_none() {
            log::error!("Failed to release memory block at address: {pointer}");
        }
    }

    pub fn get_by_ptr(&self, ptr: u32) -> JsValue {
        if ptr == 0 {
            return JsValue::Undefined;
        }

        let param = self.blocks.remove(&ptr);

        if let Some(param) = param {
            match JsValue::from_block(param) {
                Ok(value) => value,
                Err(err) => {
                    log::error!("get_by_ptr - error decode: {err}");
                    JsValue::Undefined
                }
            }
        } else {
            log::error!("get_by_ptr - not found MemoryBlock ptr={ptr}");
            JsValue::Undefined
        }
    }

    pub fn set(&self, memory_block: MemoryBlock) {
        let ptr = memory_block.get_ptr();
        self.blocks.insert(ptr, memory_block);
    }
}