# NumberSet

``public struct NumberSet<T> : SetAlgebra where T : FixedWidthInteger, T : UnsignedInteger``
``extension NumberSet: Sequence``
``extension NumberSet: CustomStringConvertible``

`NumberSet` uses a specified unsigned `FixedWidthInteger` as the storage for a Set containing the numbers 0…`bitWidth`. eg a `UInt8` can contain the numbers `0...7`, a `UInt64` can store `0...63`. The storage uses a bit per number where bit[`x`] is used to store `x`. This gives an ordering of the set from lowest to highest. The `rawValue` property represents the underlying storage and can be easily interpreted.

``````rawValue = 0b1001_0001  [0, 4, 7]
``````
• ``` Element ```

The elements stored in the `NumberSet` are of type `Int`.

#### Declaration

Swift

``public typealias Element = Int``
• ``` rawValue ```

The underlying storage. Read only.

#### Declaration

Swift

``private(set) public var rawValue: T { get }``
• ``` isEmpty ```

A Boolean value that indicates whether the set is empty.

#### Declaration

Swift

``public var isEmpty: Bool { get }``
• ``` count ```

The number of elements in the set.

#### Declaration

Swift

``public var count: Int { get }``
• ``` capacity ```

The total number of elements that the set can contain without allocating new storage.

#### Declaration

Swift

``public var capacity: Int { get }``
• ``` first ```

The first element of the collection.

If the collection is empty, the value of this property is `nil`.

#### Declaration

Swift

``public var first: Int? { get }``
• ``` init() ```

Creates an empty set.

#### Declaration

Swift

``````@inline(__always)
public init()``````
• ``` init(_:) ```

Creates a new set from a finite sequence of items.

#### Declaration

Swift

``public init<S>(_ sequence: S) where S : Sequence, S.Element == NumberSet<T>.Element``

#### Parameters

 ``` sequence ``` The elements to use as members of the new set.
• ``` init(rawValue:) ```

Create a new set from a literal value.

Use this initialiser to create a new set. Member `x` corresponds to bit x. To create a set containing the numbers 1 and 5:

``````let numberSet = Set<UInt8>(rawValue: 0b0010_0010)
print(numberSet)
// prints [1, 5]
``````

#### Declaration

Swift

``````@inline(__always)
public init(rawValue: T)``````

#### Parameters

 ``` rawValue ``` A literal with the members of the new set represented by the appropaite bit being set.
• ``` insert(_:) ```

Inserts the given element in the set if it is not already present.

#### Declaration

Swift

``````@discardableResult
public mutating func insert(_ newMember: Int) -> (inserted: Bool, memberAfterInsert: Int)``````

#### Parameters

 ``` newMember ``` An element to insert into the set.

#### Return Value

(true, newMember) if newMember was not contained in the set. If an element equal to newMember was already contained in the set, the method returns (false, oldMember), where oldMember is the element that was equal to newMember. In some cases, oldMember may be distinguishable from newMember by identity comparison or some other means.

• ``` update(with:) ```

Inserts the given element into the set unconditionally.

#### Declaration

Swift

``public mutating func update(with newMember: Int) -> Int?``

#### Parameters

 ``` newMember ``` An element to insert into the set.

#### Return Value

An element equal to newMember if the set already contained such a member; otherwise, `nil`. In some cases, the returned element may be distinguishable from newMember by identity comparison or some other means.

• ``` remove(_:) ```

Removes the specified element from the set.

#### Declaration

Swift

``public mutating func remove(_ member: Int) -> Int?``

#### Parameters

 ``` member ``` The element to remove from the set.

#### Return Value

The value of the member parameter if it was a member of the set; otherwise, `nil`.

• ``` removeFirst() ```

Removes the first element of the set.

A `NumberSet` is not an ordered collection so the “first” element may is always the element with the lowest numeric value. The set must not be empty. Complexity: O(1).

#### Declaration

Swift

``````@discardableResult
public mutating func removeFirst() -> Int``````

#### Return Value

A member of the set. This memeber is the element with the lowest numeric value.

• ``` remove(at:) ```

Removes the element at the given index of the set.

#### Declaration

Swift

``````@discardableResult
public mutating func remove(at position: Int) -> Int``````

#### Parameters

 ``` position ``` The index of the member to remove. position must be a valid index of the set, and must not be equal to the set’s end index.

#### Return Value

The element that was removed from the set.

• ``` removeAll(keepingCapacity:) ```

Removes all members from the set.

#### Declaration

Swift

``public mutating func removeAll(keepingCapacity keepCapacity: Bool = false)``

#### Parameters

 ``` keepingCapacity ``` This parameter is ignore as the underlying storage is fixed.
• ``` contains(_:) ```

Returns a Boolean value that indicates whether the given element exists in the set.

#### Declaration

Swift

``````@inline(__always)
public func contains(_ member: Int) -> Bool``````

#### Parameters

 ``` member ``` An element to look for in the set.

#### Return Value

`true` if member exists in the set; otherwise, `false`.

• ``` min() ```

Returns the minimum element in the sequence.

#### Declaration

Swift

``````@inline(__always)
public func min() -> Int?``````

#### Return Value

The sequence’s minimum element. If the sequence has no elements, returns `nil`.

• ``` max() ```

Returns the maximum element in the sequence.

#### Declaration

Swift

``````@inline(__always)
public func max() -> Int?``````

#### Return Value

The sequence’s maximum element. If the sequence has no elements, returns `nil`.

• ``` isDisjoint(with:) ```

Returns a Boolean value that indicates whether this set has no members in common with the given set.

#### Declaration

Swift

``````@inline(__always)
public func isDisjoint(with other: `Self`) -> Bool``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.

#### Return Value

`true` if the set has no elements in common with other; otherwise, `false`.

• ``` subtracting(_:) ```

Returns a new set containing the elements of this set that do not occur in the given set.

#### Declaration

Swift

``````@inline(__always)
public func subtracting(_ other: `Self`) -> NumberSet<T>``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.

#### Return Value

A new set.

• ``` union(_:) ```

Returns a new set with the elements of both this and the given set.

#### Declaration

Swift

``````@inline(__always)
public func union(_ other: `Self`) -> NumberSet<T>``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.

#### Return Value

A new set with the unique elements of this set and `other`.

• ``` intersection(_:) ```

Returns a new set with the elements that are common to both this set and the given set.

#### Declaration

Swift

``````@inline(__always)
public func intersection(_ other: `Self`) -> NumberSet<T>``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.

#### Return Value

A new set.

• ``` symmetricDifference(_:) ```

Returns a new set with the elements that are either in this set or in the given set, but not in both.

#### Declaration

Swift

``````@inline(__always)
public func symmetricDifference(_ other: `Self`) -> NumberSet<T>``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.

#### Return Value

A new set.

• ``` subtract(_:) ```

Removes the elements of the given set from this set.

#### Declaration

Swift

``````@inline(__always)
public mutating func subtract(_ other: `Self`)``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.
• ``` formUnion(_:) ```

Adds the elements of the given set to the set.

#### Declaration

Swift

``````@inline(__always)
public mutating func formUnion(_ other: `Self`)``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.
• ``` formUnion(_:) ```

Inserts the elements of the given sequence into the set.

#### Declaration

Swift

``public mutating func formUnion<S>(_ other: S) where S : Sequence, S.Element == NumberSet<T>.Element``

#### Parameters

 ``` other ``` A sequence of elements. `other` must be finite.
• ``` formIntersection(_:) ```

Removes the elements of this set that aren’t also in the given set.

#### Declaration

Swift

``````@inline(__always)
public mutating func formIntersection(_ other: `Self`)``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.
• ``` formSymmetricDifference(_:) ```

Removes the elements of the set that are also in the given set and adds the members of the given set that are not already in the set.

#### Declaration

Swift

``````@inline(__always)
public mutating func formSymmetricDifference(_ other: `Self`)``````

#### Parameters

 ``` other ``` Another `NumberSet` of the same type as the current `NumberSet`.
• ``` ==(_:_:) ```

Returns a Boolean value indicating whether two sets have equal elements.

#### Declaration

Swift

``public static func == (lhs: `Self`, rhs: `Self`) -> Bool``

#### Parameters

 ``` lhs ``` A `NumberSet` ``` rhs ``` Another `NumberSet` of the same type.

#### Return Value

`true` if the `lhs` and `rhs` have the same elements; otherwise, `false`.

• ``` makeIterator() ```

Returns an iterator over the members of the set..

#### Declaration

Swift

``public func makeIterator() -> NumberSetIterator<T>``
• ``` description ```

A string that represents the contents of the set.

#### Declaration

Swift

``public var description: String { get }``