#shorthand #utility #reference-counting #macro #values #atomic #boxed

pbx

pbx 是一个提供方便的宏和实用函数的 Rust 包,用于创建和管理装箱、原子引用计数以及默认初始化的值。该包简化了 Rust 中的常见模式,尤其在异步编程、并发访问和与 C 库接口方面非常有用。

1 个不稳定版本

0.1.0 2024 年 7 月 14 日

#13#boxed

Download history 81/week @ 2024-07-08 33/week @ 2024-07-15 8/week @ 2024-07-29

122 每月下载量

MIT 许可证

7KB
51 代码行

pbx

pbx 是一个提供方便的宏用于创建各种类型的装箱和原子引用计数的 Rust 包,以及默认和零初始化实例。

该包以最著名的成员 Pbx 类型命名。

此外,此包可以用作以下常用类型的缩写以访问:通过以下顶级 lib.rs 导出 PinArcMutexRcRefCell

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许可证。

无运行时依赖