From aca23fa6fd2c2dbe63e4c67893110f385c9cb881 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Thu, 3 Feb 2022 22:02:18 +0800 Subject: [PATCH] feat: add qcell --- __concurrent/qcell/Cargo.lock | 25 +++++++++++++++++++++++++ __concurrent/qcell/Cargo.toml | 10 ++++++++++ __concurrent/qcell/src/main.rs | 16 ++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 __concurrent/qcell/Cargo.lock create mode 100644 __concurrent/qcell/Cargo.toml create mode 100644 __concurrent/qcell/src/main.rs diff --git a/__concurrent/qcell/Cargo.lock b/__concurrent/qcell/Cargo.lock new file mode 100644 index 0000000..9330b48 --- /dev/null +++ b/__concurrent/qcell/Cargo.lock @@ -0,0 +1,25 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "once_cell" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" + +[[package]] +name = "qcell" +version = "0.1.0" +dependencies = [ + "qcell 0.5.0", +] + +[[package]] +name = "qcell" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5023f06b72bfa9fbb5ebdbe891f02db9406ba026990e0778f80094bc84f3ac8" +dependencies = [ + "once_cell", +] diff --git a/__concurrent/qcell/Cargo.toml b/__concurrent/qcell/Cargo.toml new file mode 100644 index 0000000..9e52cb0 --- /dev/null +++ b/__concurrent/qcell/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "qcell" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +qcell = "0.5.0" + diff --git a/__concurrent/qcell/src/main.rs b/__concurrent/qcell/src/main.rs new file mode 100644 index 0000000..59af9be --- /dev/null +++ b/__concurrent/qcell/src/main.rs @@ -0,0 +1,16 @@ +use std::rc::Rc; +use qcell::{QCell, QCellOwner}; + +// https://docs.rs/qcell/latest/qcell/ +fn main() { + let mut owner = QCellOwner::new(); + + let item = Rc::new(QCell::new(&owner, Vec::::new())); + let iref = owner.rw(&item); + // test(&mut owner, &item); // Compile error + iref.push(1); + + fn test(owner: &mut QCellOwner, item: &Rc>>) { + owner.rw(&item).push(2); + } +}