pub trait RefCount {
    type Value;

    // Required methods
    fn one() -> Self;
    fn is_one(val: &Self::Value) -> bool;
    fn load_acquire(&self) -> Self::Value;
    fn fence_acquire(&self);
    fn fetch_inc_relaxed(&self) -> Self::Value;
    fn fetch_dec_release(&self) -> Self::Value;
}
Expand description

Trait for refcount

Some method names explain required memory ordering in multi-threaded context.

Required Associated Types§

source

type Value

Type of count

Required Methods§

source

fn one() -> Self

Creates a new RefCount object.

The object is initialized as “one”.

source

fn is_one(val: &Self::Value) -> bool

Checks whether a value equals to one.

source

fn load_acquire(&self) -> Self::Value

Gets a current value.

Memory ordering

Acquire or stronger ordering is required if implementors are atomic types.

source

fn fence_acquire(&self)

Memory fence.

This method is needed only for multi-threaded refcount. In single-threaded implementors, this can be NO-OP.

Memory ordering

Acquire or stronger ordering is required if implementors are atomic types.

source

fn fetch_inc_relaxed(&self) -> Self::Value

Increments its value and returns previous value.

Memory ordering

Relaxed ordering is allowed if implementors are atomic types.

source

fn fetch_dec_release(&self) -> Self::Value

Decrements its value and returns previous value.

Memory ordering

Release or stronger ordering is required if implementors are atomic types.

Implementations on Foreign Types§

source§

impl RefCount for Cell<u8>

§

type Value = u8

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for AtomicU16

§

type Value = u16

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for Cell<u16>

§

type Value = u16

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for Cell<u32>

§

type Value = u32

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for Cell<u64>

§

type Value = u64

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for AtomicU64

§

type Value = u64

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for AtomicUsize

§

type Value = usize

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for AtomicU8

§

type Value = u8

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for Cell<usize>

§

type Value = usize

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

source§

impl RefCount for AtomicU32

§

type Value = u32

source§

fn one() -> Self

source§

fn is_one(val: &Self::Value) -> bool

source§

fn load_acquire(&self) -> Self::Value

source§

fn fence_acquire(&self)

source§

fn fetch_inc_relaxed(&self) -> Self::Value

source§

fn fetch_dec_release(&self) -> Self::Value

Implementors§