Struct tinyset::u64set::Set64 [] [src]

pub struct Set64<T: Fits64>(_, _);

A set type that can store any type that fits in a u64. This set type is very space-efficient in storing small integers, while not being bad at storing large integers (i.e. about half the size of a large fnv::HashSet, for small sets of large integers about five times smaller than fnv::HashSet. For small numbers, Set64 is even more compact.

Major caveat The Set64 type defines iterators (drain() and iter()) that iterate over T rather than &T. This is a break with standard libray convention, and can be annoying if you are translating code from HashSet to Set64. The motivation for this is several-fold:

  1. Set64 does not store T directly in its data structures (which would waste space), so there is no reference to the data to take. This does not make it impossible, but does mean we would have to fabricate a T and return a reference to it, which is awkward and ugly.

  2. There is no inefficiency involved in returning T, since it is necessarily no larger than a pointer.

Examples

use tinyset::Set64;

let a: Set64<char> = "Hello world".chars().collect();

for x in "Hello world".chars() {
    assert!(a.contains(&x));
}
for x in &a {
    assert!("Hello world".contains(x));
}

Methods

impl<T: Fits64> Set64<T>
[src]

[src]

Creates an empty set..

[src]

Creates an empty set..

[src]

Creates an empty set with the specified capacity.

[src]

Creates an empty set with the specified capacity.

[src]

Reserves capacity for at least additional more elements to be inserted in the set. The collection may reserve more space to avoid frequent reallocations.

[src]

Reserves capacity for at least additional more elements to be inserted in the set, with maximum value of max. The collection may reserve more space to avoid frequent reallocations.

[src]

Adds a value to the set.

If the set did not have this value present, true is returned.

If the set did have this value present, false is returned.

[src]

Returns the number of elements in the set.

[src]

Returns true if the set contains a value.

[src]

Removes an element, and returns true if that element was present.

Important traits for Iter64<'a, T>
[src]

Iterate

Important traits for Drain64<T>
[src]

Drain

Trait Implementations

impl<T: Debug + Fits64> Debug for Set64<T>
[src]

[src]

Formats the value using the given formatter. Read more

impl<T: Clone + Fits64> Clone for Set64<T>
[src]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl<T: Fits64> PartialEq for Set64<T>
[src]

[src]

This method tests for self and other values to be equal, and is used by ==. Read more

1.0.0
[src]

This method tests for !=.

impl<T: Fits64> Eq for Set64<T>
[src]

impl<T: Fits64> Hash for Set64<T>
[src]

[src]

Feeds this value into the given [Hasher]. Read more

1.3.0
[src]

Feeds a slice of this type into the given [Hasher]. Read more

impl<T: Fits64> FromIterator<T> for Set64<T>
[src]

[src]

Creates a value from an iterator. Read more

impl<'a, T: Fits64> IntoIterator for &'a Set64<T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Important traits for Iter64<'a, T>
[src]

Creates an iterator from a value. Read more

impl<'a, 'b, T: Fits64> Sub<&'b Set64<T>> for &'a Set64<T>
[src]

The resulting type after applying the - operator.

[src]

Returns the difference of self and rhs as a new Set64<T>.

Examples

use tinyset::Set64;

let a: Set64<u32> = vec![1, 2, 3].into_iter().collect();
let b: Set64<u32> = vec![3, 4, 5].into_iter().collect();

let set = &a - &b;

let mut i = 0;
let expected = [1, 2];
for x in &set {
    assert!(expected.contains(&x));
    i += 1;
}
assert_eq!(i, expected.len());

impl<T: Fits64> Extend<T> for Set64<T>
[src]

[src]

Adds a bunch of elements to the set

Examples

use tinyset::Set64;

let mut a: Set64<u32> = vec![1, 2, 3].into_iter().collect();
a.extend(vec![3, 4, 5]);

let mut i = 0;
let expected = [1, 2, 3, 4, 5];
for x in &a {
    assert!(expected.contains(&x));
    i += 1;
}
assert_eq!(i, expected.len());

impl<'a, 'b, T: Fits64> BitOr<&'b Set64<T>> for &'a Set64<T>
[src]

The resulting type after applying the | operator.

[src]

Returns the union of self and rhs as a new Set64<T>.

Examples

use tinyset::Set64;

let a: Set64<u32> = vec![1, 2, 3].into_iter().collect();
let b: Set64<u32> = vec![3, 4, 5].into_iter().collect();

let set = &a | &b;

let mut i = 0;
let expected = [1, 2, 3, 4, 5];
for x in &set {
    assert!(expected.contains(&x));
    i += 1;
}
assert_eq!(i, expected.len());

Auto Trait Implementations

impl<T> Send for Set64<T> where
    T: Send

impl<T> Sync for Set64<T> where
    T: Sync