1 个不稳定版本
0.1.0 | 2024 年 7 月 14 日 |
---|
#13 在 #boxed
122 每月下载量
7KB
51 代码行
pbx
pbx
是一个提供方便的宏用于创建各种类型的装箱和原子引用计数的 Rust 包,以及默认和零初始化实例。
该包以最著名的成员 Pbx
类型命名。
此外,此包可以用作以下常用类型的缩写以访问:通过以下顶级 lib.rs
导出 Pin
、Arc
、Mutex
、Rc
、RefCell
pub use std::pin::Pin;
pub use std::sync::{Arc, Mutex};
pub use std::rc::Rc;
pub use std::cell::RefCell;
如果您经常使用这些类型,则可以使用此包简化事物
use pbx::*;
功能
- Pbx:
Pin<Box<T>>
的类型别名。 - 宏:用于创建
Pin<Box<T>>
、Arc<Mutex<T>>
、Arc<T>
、默认实例和零初始化实例的几个宏。
用法
将 pbx
添加到您的 Cargo.toml
[dependencies]
pbx = "0.1.0"
示例
extern crate pbx;
use pbx::*;
fn main() {
// Using pbx macro to create a Pin<Box<T>>
let boxed_value = pbx!(5);
println!("Boxed value: {:?}", boxed_value);
// Using arcmut macro to create an Arc<Mutex<T>>
let arc_mutex_value = arcmut!(10);
{
let mut data = arc_mutex_value.lock().unwrap();
*data += 1;
}
println!("Arc<Mutex> value: {:?}", arc_mutex_value);
// Using arc macro to create an Arc<T>
let arc_value = arc!(20);
println!("Arc value: {:?}", arc_value);
// Using default macro to create a default instance
let default_value: i32 = default!();
println!("Default value: {:?}", default_value);
// Using zeroed macro to create a zeroed instance
let zeroed_value: i32 = zeroed!();
println!("Zeroed value: {:?}", zeroed_value);
// Using rc macro to create an Rc<T>
let rc_value = rc!(30);
println!("Rc value: {:?}", rc_value);
// Using rcmut macro to create an Rc<RefCell<T>>
let rc_mut_value = rcmut!(40);
{
let mut data = rc_mut_value.borrow_mut();
*data += 1;
}
println!("Rc<RefCell> value: {:?}", rc_mut_value);
}
宏
pbx!
从给定的表达式创建一个 Pin<Box>。
let pinned_boxed_value = pbx!(value);
arcmut!
从给定的表达式创建一个 Arc<Mutex>。
let arc_mutex_value = arcmut!(value);
arcmut_with!
创建一个带有初始化函数的 Arc<Mutex>。
let arc_mutex_value = arcmut_with!(value, |v| v + 1);
arc!
从给定的表达式创建一个 Arc。
let arc_value = arc!(value);
rc!
从给定的表达式创建一个 Rc。
let rc_value = rc!(value);
rcmut!
从给定的表达式创建一个 Rc<RefCell>。
let rc_mut_value = rcmut!(value);
default!
创建一个类型的默认实例。
let default_instance: T = default!();
zeroed!
创建一个类型为零的实例。这通常用于与没有或不需要默认构造函数的C API包装器交互。
let zeroed_instance: T = zeroed!();
实用工具
pin_box
将Box转换为Pbx。
let boxed_value: Box<T> = Box::new(value);
let pinned_boxed_value = pin_box(boxed_value);
pin_arc
将Arc转换为Pin<Arc>。
let arc_value: Arc<T> = Arc::new(value);
let pinned_arc_value = pin_arc(arc_value);
许可证
本项目采用MIT许可证。