Add cbg v2 impl (Have bug

This commit is contained in:
2025-06-17 13:28:04 +08:00
parent b98380fcd3
commit 6e45e90878
5 changed files with 532 additions and 31 deletions

42
src/ext/atomic.rs Normal file
View File

@@ -0,0 +1,42 @@
use std::sync::atomic::Ordering;
/// A trait to help to load and store atomic value quickly.
pub trait AtomicQuick<T> {
/// Loads a value from the atomic integer in [Ordering::SeqCst] mode.
fn qload(&self) -> T;
/// Stores a value into the atomic integer in [Ordering::SeqCst] mode.
fn qstore(&self, value: T);
#[inline]
/// Stores a value into the atomic integer in [Ordering::SeqCst] mode.
/// Alias for [Self::qstore]
fn qsave(&self, value: T) {
self.qstore(value)
}
}
macro_rules! impl_atomic_quick_with_atomic {
($type1:ty, $type2:ty) => {
impl AtomicQuick<$type2> for $type1 {
#[inline]
fn qload(&self) -> $type2 {
self.load(Ordering::SeqCst)
}
#[inline]
fn qstore(&self, value: $type2) {
self.store(value, Ordering::SeqCst)
}
}
};
}
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicBool, bool);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI8, i8);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU8, u8);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI16, i16);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU16, u16);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI32, i32);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU32, u32);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI64, i64);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU64, u64);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicIsize, isize);
impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicUsize, usize);

View File

@@ -858,6 +858,7 @@ pub struct MemReader {
pub pos: usize,
}
#[derive(Clone)]
pub struct MemReaderRef<'a> {
pub data: &'a [u8],
pub pos: usize,

View File

@@ -1,2 +1,3 @@
pub mod atomic;
pub mod io;
pub mod vec;