Struct crossbeam_skiplist::SkipSet[][src]

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

A set based on a lock-free skip list.

This is an alternative to BTreeSet which supports concurrent access across multiple threads.

Implementations

impl<T> SkipSet<T>[src]

pub fn new() -> SkipSet<T>[src]

Returns a new, empty set.

Example

use crossbeam_skiplist::SkipSet;

let set: SkipSet<i32> = SkipSet::new();

pub fn is_empty(&self) -> bool[src]

Returns true if the set is empty.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
assert!(set.is_empty());

set.insert(1);
assert!(!set.is_empty());

pub fn len(&self) -> usize[src]

Returns the number of entries in the set.

If the set is being concurrently modified, consider the returned number just an approximation without any guarantees.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
assert_eq!(set.len(), 0);

set.insert(1);
assert_eq!(set.len(), 1);

impl<T> SkipSet<T> where
    T: Ord
[src]

pub fn front(&self) -> Option<Entry<'_, T>>[src]

Returns the entry with the smallest key.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(1);
assert_eq!(*set.front().unwrap(), 1);
set.insert(2);
assert_eq!(*set.front().unwrap(), 1);

pub fn back(&self) -> Option<Entry<'_, T>>[src]

Returns the entry with the largest key.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(1);
assert_eq!(*set.back().unwrap(), 1);
set.insert(2);
assert_eq!(*set.back().unwrap(), 2);

pub fn contains<Q: ?Sized>(&self, key: &Q) -> bool where
    T: Borrow<Q>,
    Q: Ord
[src]

Returns true if the set contains a value for the specified key.

Example

use crossbeam_skiplist::SkipSet;

let set: SkipSet<_> = (1..=3).collect();
assert!(set.contains(&1));
assert!(!set.contains(&4));

pub fn get<Q: ?Sized>(&self, key: &Q) -> Option<Entry<'_, T>> where
    T: Borrow<Q>,
    Q: Ord
[src]

Returns an entry with the specified key.

Example

use crossbeam_skiplist::SkipSet;

let set: SkipSet<_> = (1..=3).collect();
assert_eq!(*set.get(&3).unwrap(), 3);
assert!(set.get(&4).is_none());

pub fn lower_bound<'a, Q: ?Sized>(
    &'a self,
    bound: Bound<&Q>
) -> Option<Entry<'a, T>> where
    T: Borrow<Q>,
    Q: Ord
[src]

Returns an Entry pointing to the lowest element whose key is above the given bound. If no such element is found then None is returned.

Example

use crossbeam_skiplist::SkipSet;
use std::ops::Bound::*;

let set = SkipSet::new();
set.insert(6);
set.insert(7);
set.insert(12);

let greater_than_five = set.lower_bound(Excluded(&5)).unwrap();
assert_eq!(*greater_than_five, 6);

let greater_than_six = set.lower_bound(Excluded(&6)).unwrap();
assert_eq!(*greater_than_six, 7);

let greater_than_thirteen = set.lower_bound(Excluded(&13));
assert!(greater_than_thirteen.is_none());

pub fn upper_bound<'a, Q: ?Sized>(
    &'a self,
    bound: Bound<&Q>
) -> Option<Entry<'a, T>> where
    T: Borrow<Q>,
    Q: Ord
[src]

Returns an Entry pointing to the highest element whose key is below the given bound. If no such element is found then None is returned.

Example

use crossbeam_skiplist::SkipSet;
use std::ops::Bound::*;

let set = SkipSet::new();
set.insert(6);
set.insert(7);
set.insert(12);

let less_than_eight = set.upper_bound(Excluded(&8)).unwrap();
assert_eq!(*less_than_eight, 7);

let less_than_six = set.upper_bound(Excluded(&6));
assert!(less_than_six.is_none());

pub fn get_or_insert(&self, key: T) -> Entry<'_, T>[src]

Finds an entry with the specified key, or inserts a new key-value pair if none exist.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
let entry = set.get_or_insert(2);
assert_eq!(*entry, 2);

pub fn iter(&self) -> Iter<'_, T>

Notable traits for Iter<'a, T>

impl<'a, T> Iterator for Iter<'a, T> where
    T: Ord
type Item = Entry<'a, T>;
[src]

Returns an iterator over all entries in the set.

Examples

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(6);
set.insert(7);
set.insert(12);

let mut set_iter = set.iter();
assert_eq!(*set_iter.next().unwrap(), 6);
assert_eq!(*set_iter.next().unwrap(), 7);
assert_eq!(*set_iter.next().unwrap(), 12);
assert!(set_iter.next().is_none());

pub fn range<Q: ?Sized, R>(&self, range: R) -> Range<'_, Q, R, T>

Notable traits for Range<'a, Q, R, T>

impl<'a, Q: ?Sized, R, T> Iterator for Range<'a, Q, R, T> where
    T: Ord + Borrow<Q>,
    R: RangeBounds<Q>,
    Q: Ord
type Item = Entry<'a, T>;
where
    T: Borrow<Q>,
    R: RangeBounds<Q>,
    Q: Ord
[src]

Returns an iterator over a subset of entries in the set.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(6);
set.insert(7);
set.insert(12);

let mut set_range = set.range(5..=8);
assert_eq!(*set_range.next().unwrap(), 6);
assert_eq!(*set_range.next().unwrap(), 7);
assert!(set_range.next().is_none());

impl<T> SkipSet<T> where
    T: Ord + Send + 'static, 
[src]

pub fn insert(&self, key: T) -> Entry<'_, T>[src]

Inserts a key-value pair into the set and returns the new entry.

If there is an existing entry with this key, it will be removed before inserting the new one.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(2);
assert_eq!(*set.get(&2).unwrap(), 2);

pub fn remove<Q: ?Sized>(&self, key: &Q) -> Option<Entry<'_, T>> where
    T: Borrow<Q>,
    Q: Ord
[src]

Removes an entry with the specified key from the set and returns it.

The value will not actually be dropped until all references to it have gone out of scope.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(2);
assert_eq!(*set.remove(&2).unwrap(), 2);
assert!(set.remove(&2).is_none());

pub fn pop_front(&self) -> Option<Entry<'_, T>>[src]

Removes an entry from the front of the set. Returns the removed entry.

The value will not actually be dropped until all references to it have gone out of scope.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(1);
set.insert(2);

assert_eq!(*set.pop_front().unwrap(), 1);
assert_eq!(*set.pop_front().unwrap(), 2);

// All entries have been removed now.
assert!(set.is_empty());

pub fn pop_back(&self) -> Option<Entry<'_, T>>[src]

Removes an entry from the back of the set. Returns the removed entry.

The value will not actually be dropped until all references to it have gone out of scope.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(1);
set.insert(2);

assert_eq!(*set.pop_back().unwrap(), 2);
assert_eq!(*set.pop_back().unwrap(), 1);

// All entries have been removed now.
assert!(set.is_empty());

pub fn clear(&self)[src]

Iterates over the set and removes every entry.

Example

use crossbeam_skiplist::SkipSet;

let set = SkipSet::new();
set.insert(1);
set.insert(2);

set.clear();
assert!(set.is_empty());

Trait Implementations

impl<T> Debug for SkipSet<T> where
    T: Ord + Debug
[src]

impl<T> Default for SkipSet<T>[src]

impl<T> FromIterator<T> for SkipSet<T> where
    T: Ord
[src]

impl<T> IntoIterator for SkipSet<T>[src]

type Item = T

The type of the elements being iterated over.

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?

impl<'a, T> IntoIterator for &'a SkipSet<T> where
    T: Ord
[src]

type Item = Entry<'a, T>

The type of the elements being iterated over.

type IntoIter = Iter<'a, T>

Which kind of iterator are we turning this into?

Auto Trait Implementations

impl<T> !RefUnwindSafe for SkipSet<T>

impl<T> Send for SkipSet<T> where
    T: Send + Sync

impl<T> Sync for SkipSet<T> where
    T: Send + Sync

impl<T> Unpin for SkipSet<T>

impl<T> !UnwindSafe for SkipSet<T>

Blanket Implementations

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

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

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

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

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

impl<T> Pointable for T[src]

type Init = T

The type for initializers.

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.

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.