# [−][src]Struct crossbeam_utils::atomic::AtomicCell

    pub struct AtomicCell<T> { /* fields omitted */ }

A thread-safe mutable memory location.

This type is equivalent to `Cell`, except it can also be shared among multiple threads.

Operations on `AtomicCell`s use atomic instructions whenever possible, and synchronize using global locks otherwise. You can call `AtomicCell::<T>::is_lock_free()` to check whether atomic instructions or locks will be used.

## Methods

### `impl<T> AtomicCell<T>`[src]

#### `pub fn new(val: T) -> AtomicCell<T>`[src]

Creates a new atomic cell initialized with `val`.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7);

####
ⓘImportant traits for &'_ mut W

### Important traits for &'_ mut W

`impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;`
`pub fn get_mut(&mut self) -> &mut T`[src]

Returns a mutable reference to the inner value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let mut a = AtomicCell::new(7);
    *a.get_mut() += 1;

    assert_eq!(a.load(), 8);

#### `pub fn into_inner(self) -> T`[src]

Unwraps the atomic cell and returns its inner value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let mut a = AtomicCell::new(7);
    let v = a.into_inner();

    assert_eq!(v, 7);

#### `pub fn is_lock_free() -> bool`[src]

Returns `true` if operations on values of this type are lock-free.

If the compiler or the platform doesn't support the necessary atomic instructions, `AtomicCell<T>` will use global locks for every potentially concurrent atomic operation.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    // This type is internally represented as `AtomicUsize` so we can just use atomic
    // operations provided by it.
    assert_eq!(AtomicCell::<usize>::is_lock_free(), true);

    // A wrapper struct around `isize`.
    struct Foo {
        bar: isize,
    }
    // `AtomicCell<Foo>` will be internally represented as `AtomicIsize`.
    assert_eq!(AtomicCell::<Foo>::is_lock_free(), true);

    // Operations on zero-sized types are always lock-free.
    assert_eq!(AtomicCell::<()>::is_lock_free(), true);

    // Very large types cannot be represented as any of the standard atomic types, so atomic
    // operations on them will have to use global locks for synchronization.
    assert_eq!(AtomicCell::<[u8; 1000]>::is_lock_free(), false);

#### `pub fn store(&self, val: T)`[src]

Stores `val` into the atomic cell.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7);

    assert_eq!(a.load(), 7);
    a.store(8);
    assert_eq!(a.load(), 8);

#### `pub fn swap(&self, val: T) -> T`[src]

Stores `val` into the atomic cell and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7);

    assert_eq!(a.load(), 7);
    assert_eq!(a.swap(8), 7);
    assert_eq!(a.load(), 8);

### `impl<T: Copy> AtomicCell<T>`[src]

#### `pub fn load(&self) -> T`[src]

Loads a value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7);

    assert_eq!(a.load(), 7);

### `impl<T: Copy + Eq> AtomicCell<T>`[src]

#### `pub fn compare_and_swap(&self, current: T, new: T) -> T`[src]

If the current value equals `current`, stores `new` into the atomic cell.

The return value is always the previous value. If it is equal to `current`, then the value was updated.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(1);

    assert_eq!(a.compare_exchange(2, 3), Err(1));
    assert_eq!(a.load(), 1);

    assert_eq!(a.compare_exchange(1, 2), Ok(1));
    assert_eq!(a.load(), 2);

#### `pub fn compare_exchange(&self, current: T, new: T) -> Result<T, T>`[src]

If the current value equals `current`, stores `new` into the atomic cell.

The return value is a result indicating whether the new value was written and containing the previous value. On success this value is guaranteed to be equal to `current`.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(1);

    assert_eq!(a.compare_exchange(2, 3), Err(1));
    assert_eq!(a.load(), 1);

    assert_eq!(a.compare_exchange(1, 2), Ok(1));
    assert_eq!(a.load(), 2);

### `impl AtomicCell<u8>`[src]

#### `pub fn fetch_add(&self, val: u8) -> u8`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u8);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: u8) -> u8`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u8);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: u8) -> u8`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u8);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: u8) -> u8`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u8);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: u8) -> u8`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u8);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<i8>`[src]

#### `pub fn fetch_add(&self, val: i8) -> i8`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i8);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: i8) -> i8`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i8);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: i8) -> i8`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i8);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: i8) -> i8`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i8);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: i8) -> i8`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i8);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<u16>`[src]

#### `pub fn fetch_add(&self, val: u16) -> u16`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u16);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: u16) -> u16`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u16);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: u16) -> u16`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u16);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: u16) -> u16`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u16);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: u16) -> u16`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u16);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<i16>`[src]

#### `pub fn fetch_add(&self, val: i16) -> i16`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i16);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: i16) -> i16`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i16);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: i16) -> i16`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i16);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: i16) -> i16`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i16);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: i16) -> i16`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i16);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<u32>`[src]

#### `pub fn fetch_add(&self, val: u32) -> u32`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u32);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: u32) -> u32`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u32);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: u32) -> u32`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u32);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: u32) -> u32`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u32);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: u32) -> u32`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u32);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<i32>`[src]

#### `pub fn fetch_add(&self, val: i32) -> i32`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i32);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: i32) -> i32`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i32);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: i32) -> i32`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i32);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: i32) -> i32`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i32);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: i32) -> i32`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i32);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<u64>`[src]

#### `pub fn fetch_add(&self, val: u64) -> u64`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u64);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: u64) -> u64`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u64);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: u64) -> u64`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u64);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: u64) -> u64`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u64);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: u64) -> u64`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u64);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<i64>`[src]

#### `pub fn fetch_add(&self, val: i64) -> i64`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i64);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: i64) -> i64`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i64);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: i64) -> i64`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i64);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: i64) -> i64`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i64);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: i64) -> i64`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i64);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<u128>`[src]

#### `pub fn fetch_add(&self, val: u128) -> u128`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u128);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: u128) -> u128`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u128);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: u128) -> u128`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u128);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: u128) -> u128`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u128);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: u128) -> u128`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7u128);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<i128>`[src]

#### `pub fn fetch_add(&self, val: i128) -> i128`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i128);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: i128) -> i128`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i128);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: i128) -> i128`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i128);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: i128) -> i128`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i128);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: i128) -> i128`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7i128);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<usize>`[src]

#### `pub fn fetch_add(&self, val: usize) -> usize`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7usize);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: usize) -> usize`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7usize);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: usize) -> usize`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7usize);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: usize) -> usize`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7usize);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: usize) -> usize`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7usize);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<isize>`[src]

#### `pub fn fetch_add(&self, val: isize) -> isize`[src]

Increments the current value by `val` and returns the previous value.

The addition wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7isize);

    assert_eq!(a.fetch_add(3), 7);
    assert_eq!(a.load(), 10);

#### `pub fn fetch_sub(&self, val: isize) -> isize`[src]

Decrements the current value by `val` and returns the previous value.

The subtraction wraps on overflow.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7isize);

    assert_eq!(a.fetch_sub(3), 7);
    assert_eq!(a.load(), 4);

#### `pub fn fetch_and(&self, val: isize) -> isize`[src]

Applies bitwise "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7isize);

    assert_eq!(a.fetch_and(3), 7);
    assert_eq!(a.load(), 3);

#### `pub fn fetch_or(&self, val: isize) -> isize`[src]

Applies bitwise "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7isize);

    assert_eq!(a.fetch_or(16), 7);
    assert_eq!(a.load(), 23);

#### `pub fn fetch_xor(&self, val: isize) -> isize`[src]

Applies bitwise "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(7isize);

    assert_eq!(a.fetch_xor(2), 7);
    assert_eq!(a.load(), 5);

### `impl AtomicCell<bool>`[src]

#### `pub fn fetch_and(&self, val: bool) -> bool`[src]

Applies logical "and" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(true);

    assert_eq!(a.fetch_and(true), true);
    assert_eq!(a.load(), true);

    assert_eq!(a.fetch_and(false), true);
    assert_eq!(a.load(), false);

#### `pub fn fetch_or(&self, val: bool) -> bool`[src]

Applies logical "or" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(false);

    assert_eq!(a.fetch_or(false), false);
    assert_eq!(a.load(), false);

    assert_eq!(a.fetch_or(true), false);
    assert_eq!(a.load(), true);

#### `pub fn fetch_xor(&self, val: bool) -> bool`[src]

Applies logical "xor" to the current value and returns the previous value.

# Examples

    use crossbeam_utils::atomic::AtomicCell;

    let a = AtomicCell::new(true);

    assert_eq!(a.fetch_xor(false), true);
    assert_eq!(a.load(), true);

    assert_eq!(a.fetch_xor(true), true);
    assert_eq!(a.load(), false);

## Trait Implementations

### `impl<T: Send> Send for AtomicCell<T>`[src]

### `impl<T: Default> Default for AtomicCell<T>`[src]

#### `fn default() -> AtomicCell<T>`[src]

Returns the "default value" for a type. Read more

### `impl<T: Send> Sync for AtomicCell<T>`[src]

### `impl<T: Copy + Debug> Debug for AtomicCell<T>`[src]

#### `fn fmt(&self, f: &mut Formatter) -> Result`[src]

Formats the value using the given formatter. Read more

## Auto Trait Implementations

### `impl<T> Unpin for AtomicCell<T> where
T: Unpin,`

### `impl<T> UnwindSafe for AtomicCell<T> where
T: UnwindSafe,`

### `impl<T> !RefUnwindSafe for AtomicCell<T>`

## Blanket Implementations

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `fn into(self) -> U`[src]

Performs the conversion.

### `impl<T> From<T> for T`[src]

#### `fn from(t: T) -> T`[src]

Performs the conversion.

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`[src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`[src]

Performs the conversion.

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

####
ⓘImportant traits for &'_ mut W

### Important traits for &'_ mut W

`impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;`
`fn borrow_mut(&mut self) -> &mut T`[src]

Mutably borrows from an owned value. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

####
ⓘImportant traits for &'_ mut W

### Important traits for &'_ mut W

`impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;`
`fn borrow(&self) -> &T`[src]

Immutably borrows from an owned value. Read more

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `fn type_id(&self) -> TypeId`[src]

Gets the `TypeId` of `self`. Read more

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)