jvm 0.3.0

Core abstractions and runtime services for embeddable JVM implementations
Documentation
use alloc::{boxed::Box, vec::Vec};

use crate::{Result, class_instance::ClassInstance, value::JavaValue};

pub trait ArrayClassInstance: ClassInstance {
    fn store(&mut self, offset: usize, values: Box<[JavaValue]>) -> Result<()>;
    fn load(&self, offset: usize, count: usize) -> Result<Vec<JavaValue>>;
    fn raw_buffer(&self) -> Result<Box<dyn ArrayRawBuffer>>;
    fn raw_buffer_mut(&mut self) -> Result<Box<dyn ArrayRawBufferMut>>;
    fn length(&self) -> usize;
}

pub trait ArrayRawBuffer: Send {
    fn read(&self, offset: usize, buffer: &mut [u8]) -> Result<()>;
}

pub trait ArrayRawBufferMut: ArrayRawBuffer {
    fn write(&mut self, offset: usize, buffer: &[u8]) -> Result<()>;
}