Sha256: 1a6b9f8417e968a78dcddd8c7c320c447b9f27d5f84245cae86c3ef68425c749

Contents?: true

Size: 1.62 KB

Versions: 37

Compression:

Stored size: 1.62 KB

Contents

use crate::loom::sync::Mutex;
use std::sync::atomic::Ordering;

cfg_has_const_mutex_new! {
    #[path = "atomic_u64_static_const_new.rs"]
    mod static_macro;
}

cfg_not_has_const_mutex_new! {
    #[path = "atomic_u64_static_once_cell.rs"]
    mod static_macro;
}

pub(crate) use static_macro::StaticAtomicU64;

#[derive(Debug)]
pub(crate) struct AtomicU64 {
    inner: Mutex<u64>,
}

impl AtomicU64 {
    pub(crate) fn load(&self, _: Ordering) -> u64 {
        *self.inner.lock()
    }

    pub(crate) fn store(&self, val: u64, _: Ordering) {
        *self.inner.lock() = val;
    }

    pub(crate) fn fetch_add(&self, val: u64, _: Ordering) -> u64 {
        let mut lock = self.inner.lock();
        let prev = *lock;
        *lock = prev + val;
        prev
    }

    pub(crate) fn fetch_or(&self, val: u64, _: Ordering) -> u64 {
        let mut lock = self.inner.lock();
        let prev = *lock;
        *lock = prev | val;
        prev
    }

    pub(crate) fn compare_exchange(
        &self,
        current: u64,
        new: u64,
        _success: Ordering,
        _failure: Ordering,
    ) -> Result<u64, u64> {
        let mut lock = self.inner.lock();

        if *lock == current {
            *lock = new;
            Ok(current)
        } else {
            Err(*lock)
        }
    }

    pub(crate) fn compare_exchange_weak(
        &self,
        current: u64,
        new: u64,
        success: Ordering,
        failure: Ordering,
    ) -> Result<u64, u64> {
        self.compare_exchange(current, new, success, failure)
    }
}

impl Default for AtomicU64 {
    fn default() -> AtomicU64 {
        AtomicU64::new(u64::default())
    }
}

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
wasmtime-30.0.2 ./ext/cargo-vendor/tokio-1.43.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-29.0.0 ./ext/cargo-vendor/tokio-1.43.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-28.0.0 ./ext/cargo-vendor/tokio-1.43.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-27.0.0 ./ext/cargo-vendor/tokio-1.41.1/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-26.0.0 ./ext/cargo-vendor/tokio-1.41.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-25.0.2 ./ext/cargo-vendor/tokio-1.40.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-25.0.1 ./ext/cargo-vendor/tokio-1.39.3/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-25.0.0 ./ext/cargo-vendor/tokio-1.39.3/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-24.0.0 ./ext/cargo-vendor/tokio-1.39.3/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-23.0.2 ./ext/cargo-vendor/tokio-1.36.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-22.0.0 ./ext/cargo-vendor/tokio-1.36.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-21.0.1 ./ext/cargo-vendor/tokio-1.36.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-20.0.2 ./ext/cargo-vendor/tokio-1.36.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-20.0.0 ./ext/cargo-vendor/tokio-1.36.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-18.0.3 ./ext/cargo-vendor/tokio-1.36.0/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-17.0.1 ./ext/cargo-vendor/tokio-1.35.1/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-17.0.0 ./ext/cargo-vendor/tokio-1.35.1/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-16.0.0 ./ext/cargo-vendor/tokio-1.35.1/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-15.0.1 ./ext/cargo-vendor/tokio-1.35.1/src/loom/std/atomic_u64_as_mutex.rs
wasmtime-15.0.0 ./ext/cargo-vendor/tokio-1.35.1/src/loom/std/atomic_u64_as_mutex.rs