use crate::apis::api::{
RECTS_X,
RECTS_Y
};
#[derive(Clone)]
pub struct Vram {
value: Vec::<u8>,
w: usize,
h: usize
}
impl Default for Vram {
fn default() -> Self {
Self::new(
RECTS_X as usize,
RECTS_Y as usize,
0
)
}
}
impl Vram {
pub fn new(w: usize, h: usize, byte: u8) -> Self {
Self {
value: vec![byte; w * h],
w,
h
}
}
pub fn clear(&mut self) {
for i in 0..(self.w * self.h) {
self.value[i] = 0;
}
}
pub fn value(&self) -> Vec::<u8> {
self.value.clone()
}
pub fn w(&self) -> usize {
self.w
}
pub fn h(&self) -> usize {
self.h
}
pub fn index<T: Into<usize>>(&self, x: T, y: T) -> usize {
(y.into() * self.w) + x.into()
}
pub fn put<T: Into<usize>>(&mut self, x: T, y: T, byte: u8) {
let index = self.index(x, y);
self.value[index] = byte;
}
pub fn get<T: Into<usize>>(&mut self, x: T, y: T) -> u8 {
self.value[self.index(x, y)]
}
}