pit_basic/
buffer.rs

1pub mod ffi;
2use std::sync::Arc;
3
4pub use ffi::*;
5
6use crate::buffer64::R68da167712ddf1601aed7908c99972e62a41bdea1e28b241306a6b58d29e532d;
7macro_rules! buffer_slice_impl {
8    ($t:ty) => {
9        impl R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5 for $t {
10            fn read8(&mut self, p0: u32) -> (u32) {
11                return self[p0 as usize].into();
12            }
13
14            fn write8(&mut self, p0: u32, p1: u32) -> () {
15                self[p0 as usize] = (p1 & 0xff) as u8;
16            }
17
18            fn size(&mut self) -> (u32) {
19                return self.len().try_into().unwrap();
20            }
21        }
22    };
23}
24buffer_slice_impl!(Vec<u8>);
25buffer_slice_impl!(Box<[u8]>);
26buffer_slice_impl!(&'static mut [u8]);
27macro_rules! buffer_ro_slice_impl {
28    ($t:ty) => {
29        impl R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5 for $t {
30            fn read8(&mut self, p0: u32) -> (u32) {
31                return self[p0 as usize].into();
32            }
33
34            fn write8(&mut self, p0: u32, p1: u32) -> () {
35                
36            }
37
38            fn size(&mut self) -> (u32) {
39                return self.len().try_into().unwrap();
40            }
41        }
42    };
43}
44buffer_ro_slice_impl!(Arc<[u8]>);
45buffer_ro_slice_impl!(&'static [u8]);
46pub fn slice<'a>(
47    x: &'a mut dyn R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5,
48) -> impl Iterator<Item = u8> + 'a {
49    return (0..x.size()).map(|a| (x.read8(a) & 0xff) as u8);
50}
51pub fn copy<'a, 'b>(
52    a: &'a mut dyn R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5,
53    ai: u32,
54    b: &'b mut dyn R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5,
55    bi: u32,
56) {
57    let l = (a.size() - ai).min(b.size() - bi);
58    for i in 0..l {
59        a.write8(ai + i, b.read8(bi + i));
60    }
61}
62pub fn copy_slice_in<'a,'b>(
63    a: &'a mut dyn R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5,
64    ai: u32,
65    b: &'b [u8]
66){
67    for (i,b) in b.iter().enumerate(){
68        if (i as u32) + ai >= a.size(){
69            return;
70        }
71        a.write8(ai + (i as u32), *b as u32)
72    }
73}
74pub fn copy_slice_out<'a,'b>(
75    c: &'a mut [u8],
76    b: &'b mut dyn R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5,
77    bi: u32,
78){
79    for (i,c) in c.iter_mut().enumerate(){
80        if (i as u32) + bi >= b.size(){
81            return;
82        }
83        *c = (b.read8(bi + (i as u32)) & 0xff) as u8;
84    }
85}
86pub struct Snip<T>{
87    pub wrapped: T,
88}
89impl<T: crate::buffer64::R68da167712ddf1601aed7908c99972e62a41bdea1e28b241306a6b58d29e532d> R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5 for Snip<T>{
90    fn read8(&mut self, p0: u32) -> (u32) {
91        self.wrapped.read8(p0 as u64)
92    }
93
94    fn size(&mut self) -> (u32) {
95        self.wrapped.size() as u32
96    }
97
98    fn write8(&mut self, p0: u32, p1: u32) -> () {
99        self.wrapped.write8(p0 as u64, p1)
100    }
101}
102impl<T: R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5> R68da167712ddf1601aed7908c99972e62a41bdea1e28b241306a6b58d29e532d for Snip<T>{
103    fn read8(&mut self, p0: u64) -> (u32) {
104        self.wrapped.read8(p0 as u32)
105    }
106
107    fn size(&mut self) -> (u64) {
108        self.wrapped.size().into()
109    }
110
111    fn write8(&mut self, p0: u64, p1: u32) -> () {
112        self.wrapped.write8(p0 as u32, p1)
113    }
114}
115pub struct Slice<T>{
116    pub wrapped: T,
117    pub begin: u32,
118    pub size: u32
119}
120impl<T: R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5> R867207405fe87fda620c2d7a5485e8e5e274636a898a166fb674448b4391ffc5 for Slice<T>{
121    fn read8(&mut self, p0: u32) -> (u32) {
122        self.wrapped.read8(p0 + self.begin)
123    }
124
125    fn size(&mut self) -> (u32) {
126        self.size
127    }
128
129    fn write8(&mut self, p0: u32, p1: u32) -> () {
130        self.wrapped.write8(p0 + self.begin, p1)
131    }
132}