Struct tinyset::set64::Set64[][src]

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

A set type that can store any type that fits in a u64. This set type is very space-efficient in storing small or closely spaced integers, while not being bad at storing large integers.

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));
}

Storage details

Internally a Set64 is identical to a SetU64, so read there for details. In short, small sets are the size of a pointer with no heap storage. Densely packed sets are around a bit per member. Intermediate sets have intermediate storage. The worst case scenario is large integers widely spaced apart, in which case the storage is similar to a std::collections::HashSet.

Implementations

Returns true if the set is empty

Creates an empty set..

Creates an empty set with the specified capacity.

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.

Returns the number of elements in the set.

Returns true if the set contains a value.

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

Iterate

Drain

Trait Implementations

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());

The resulting type after applying the | operator.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Creates an empty set..

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());
🔬 This is a nightly-only experimental API. (extend_one)

Extends a collection with exactly one element.

🔬 This is a nightly-only experimental API. (extend_one)

Reserves capacity in a collection for the given number of additional elements. Read more

Creates a value from an iterator. Read more

Feeds this value into the given Hasher. Read more

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

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

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

This method tests for !=.

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());

The resulting type after applying the - operator.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.