AtomicPtr with stamp to avoid [ABA problem](https://en.wikipedia.org/wiki/ABA_problem)
======================================================================================
## Usage
Put this in your `Cargo.toml`:
```toml
[dependencies]
atomic-stamped-ptr = "0.1.0"
```
And this in your crate root:
```rust
extern crate atomic_stamped_ptr;
```
## Getting Started
#### Store pointer into AtomicStampedPtr atomicity:
```rust
let a = AtomicStampedPtr::new(ptr);
```
Or
```rust
a.store(ptr);
```
#### Get pointer and version from AtomicStampedPtr atomicity:
```
let (ptr, version) = a.load();
```
#### Swap pointer with AtomicStampedPtr atomicity:
```
let new_ptr = a.swap(ptr);
```
#### Compare and swap:
```
let (p, v) = a.compare_and_swap((ptr, version), new_ptr);
if (p, v) == (ptr, version) {
// Success
} else {
// Failure
}
```
#### Comapre and exchange:
```
if let Ok((p, v)) == a.compare_exchange((ptr, version), new_ptr) {
// Success
} else {
// Failure
}
```