#rc #intrusive #smart-pointers #arc #no-std

no-std tiptoe

一个易于支持的侵入式引用计数智能指针

2 个版本

0.0.2 2021 年 11 月 12 日
0.0.1 2021 年 11 月 8 日

#2423 in Rust 模式

每月 38 下载

MIT/Apache

38KB
600

tiptoe

Lib.rs Crates.io Docs.rs

Rust 1.51 CI Crates.io - License

GitHub open issues open pull requests good first issues

crev reviews Zulip Chat

一个易于支持的侵入式引用计数智能指针。

安装

请使用 cargo-edit 以添加此库的最新版本

cargo add tiptoe --features sync

功能

"sync"

启用 [Arc] 类型,它需要 AtomicUsize

示例

use pin_project::pin_project;
use tiptoe::{IntrusivelyCountable, TipToe};

// All attributes optional.
#[pin_project]
#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct A {
    #[pin]
    ref_counter: TipToe,
}

unsafe impl IntrusivelyCountable for A {
    type RefCounter = TipToe;

    fn ref_counter(&self) -> &Self::RefCounter {
        &self.ref_counter
    }
}

fn main() {
    #[cfg(feature = "sync")]
    {
        use tiptoe::Arc;

        let arc = Arc::new(A::default());
        let inner_ref: &A = &arc;

        let another_arc = unsafe {
            Arc::borrow_from_inner_ref(&inner_ref)
        }.clone();
    }
}

实现进度

这个库目前只实现了我在 rhizome 中需要的功能。

如果您想帮忙,请查看 问题

目前遗漏的亮点:RcWeak 和大多数不影响 API 的优化。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证的定义,都应作为上述双重许可,不附加任何额外条款或条件。

有关更多信息,请参阅 CONTRIBUTING

行为准则

变更日志

版本控制

tiptoe 严格遵循 语义版本控制 2.0.0,以下为例外

  • 在主版本更改时,副版本号不会重置为 0(除 v1 以外)。
    将其视为全局功能级别。
  • 在主版本或副版本更改时,补丁版本不会重置为 0(除 v0.1 和 v1 以外)。
    将其视为全局补丁级别。

这包括上述 Rust 版本要求。
较早的 Rust 版本可能与当前版本兼容,但此兼容性可能随着副版本或补丁版本的发布而改变。

受功能和补丁影响的版本可以从前面的 CHANGELOG.md 中的相应标题确定。

请注意,此crate的依赖项可能具有更宽松的MSRV策略!如果您没有手动生成Cargo.lock(或在必要时)并且需要支持比当前稳定版更旧的编译器,请在您的自动化中使用以下命令:cargo +nightly update -Z minimal-versions

依赖项

~39KB