Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sorted collections #65

Merged
merged 15 commits into from
Nov 22, 2021

Conversation

vihanb
Copy link
Contributor

@vihanb vihanb commented Jul 21, 2021

This introduces two new sorted collections within a SortedCollections subpackage as initially
discussed in #1.

These sorted collections maintain their order by internally maintaining in-memory B-trees which allows them to balance the performance benefits of contiguous buffers and trees.

Currently, this contains an implementation of SortedSet and SortedDictionary which are designed to mimic the API of the standard library’s Set and Dictionary as closely as possible and provide additional methods and properties specific to sorted collection types.

Checklist

  • I've read the Contribution Guidelines
  • My contributions are licensed under the Swift license.
  • I've followed the coding style of the rest of the project.
  • I've added tests covering all new code paths my change adds to the project (if appropriate).
  • I've added benchmarks covering new functionality (if appropriate).
  • I've verified that my change does not break any existing tests or introduce unexplained benchmark regressions.
  • I've updated the documentation if necessary.

@vihanb vihanb requested a review from lorentey as a code owner July 21, 2021 17:00
extension _BTree {
/// A stack-allocated list of some values.
///
/// - Warning: This may hold strong references to objects after they

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After they what?

Signed-off-by: Vihan Bhargava <vihan_bhargava@apple.com>
Key Changes:
 - Implement deficiency correction methods
 - Remove inlining from _Node.ensureUnique to better inline closures
 - Add new computed properties to _Node.UnsafeHandle

Minor changes
 - Added missing mutability checks to certain _Node.UnsafeHandle methods
 - Remove unneeded _Node.UnsafeHandle.findValue(key:) method
 - Allow _Node.UnsafeHandle.removeElement(at:) to be called on non-leaves
 - Expand doc comments and fix typos
Key Changes:
 - Implement removal through SortedDictionary subscript
 - Implement _BTree.contains for efficient existence checking
 - Add tests
   - _Node.UnsafeHandle.rotation/collapse tests
   - _BTree.removeAny tests
 - Expand benchmarks
   - Add C++ reference lookup benchmarks
   - Correct old benchmarks

Minor Changes:
 - Remove B-Tree benchmarks, correct SortedDictionary benchmarks
 - Adjust debug B-Tree printer to show both numElements and numTotalElements
 - Add total count synchronization invariant check
 - Implement CustomReflectable for B-Tree
…Set.

Key Changes:
 - SortedSet
   - Implement BidirectionalCollection
 - SortedDictionary
   - Implement Codable
   - Implement Partial RangeReplaceableCollection
     - Includes remove*() operations
   - init(grouping:by:)
   - var keys: Keys (aka SortedSet<Key>)
   - func (compact)mapValues(_:)

Minor Changes:
 - Correct time documented complexities of various methods
 - Implement more variations of removal methods.
Using an array was very heavy, now using a stack-allocated 64-byte wide
type which mimics an array.
Key Changes:
 - SortedSet
   - Implement Partial RangeReplaceableCollection
   - Implement ExpressibleByArrayLiteral
   - Implement init<S: Sequence>(_: S)
   - Implement Set methods:
     - update(with:) / insert(_:) / contains(_:)
 - SortedDictionary
   - Implement SortedDictionary.Values: BidirectionalCollection
   - Implement SortedDictionary.Keys: BidirectionalCollection
 - _BTree
   - Implement Partial RangeReplaceableCollection
   - Implement Sequence
     - Add high performance linear iterator

Minor Changes:
 - Benchmarks
   - Clean up benchmarks
 - _Node.UnsafeHandle
   - @Freeze enum InsertionResult
 - _Node.Storage
   - Use UnsafeMutablePointer instead of ManagedBuffer

Refactors:
 - Various refactors for method signatures and documentation.
Key Changes:
 - _BTree.init() dynamically computes capacity from stride
 - _BTree.UnsafePath uses Unmanaged +0 references.

Minor Changes:
 - Fix _BTree.Iterator bug on single-leaf trees.
Key Changes:
 - SortedSet
   - Implement SetAlgebra
   - Implement Hashable
   - Implement Equatable
   - Implement Custom(Debug)StringConvertible
   - Implement CustomReflectable
   - Implement Codable
   - Implement subscript(range: Range<Element>)
   - Implement subscript(offset:)
   - Implement remove(atOffset:)

Minor Changes:
 - Fix inefficiency on SortedDictionary.customMirror
 - Optimize to O(1) _BTree.UnsafePath comparator
 - Optimize away ARC traffic on findAnyPath(forKey:)

Various additional refactors and renames.
Key Changes:
 - Implement _BTree.Cursor for performing efficient mutations on a tree

Minor Changes:
 - New implementation of _BTree.Index and iteration
Major Changes:
 - Implement Sequence for SortedSet

Minor Changes:
 - Fix bug within _Node.UnsafeHandle.pointerToChild(atSlot:)
 - Cleanup cursor implementation and fix bugs.
 - Fix various bugs in _BTree.FixedSizeArray
Key Changes:
 - Add custom SubSequences
 - Custom SortedDictionary.(Keys|Values).Sequence iterator
 - Add SortedDictionary.modifyValue(forKey:default:_:)

Minor Changes:
 - Update documentation
 - Various API optimizations
 - Fix bug where offsetBy:limitedBy: calls did not validate indices
 - Remove unique initializers with documented duplicate handling behavior.
 - Implement _Node.UnsafeHandle.append*() methods
 - SortedSet no longer allocates a 'values' buffer (_Node.Header.values is now optional)

Documentation:
 - Complexity guarantees
   - BidirectionalCollection conformances
   - Sequence/IteratorProtocol methods

Optimizations:
 - Add optimized dictionary value mapping (through Node.init(mappingFrom:_:))
 - Custom _BTree.forEach
 - Greater explicit @inline(__always) annotations throughout.
 - Simplify _BTree: Sequence implementation
 - Move methods to using _BTree.Builder
 - _BTree.FixedSizeArray now uses `withUnsafePointer` to prevent branching.

/// Removes the first element of a tree, if it exists.
///
/// - Returns: The moved first element of the tree.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// - Returns: The moved first element of the tree.
/// - Returns: The moved last element of the tree.

Key Changes:
 - Implement Equatable, Hashable for SubSequences
 - Implement SortedDictionary initializers
   - init(keysWithValues:) and init(sortedKeysAndValues:) with named and unnamed variants.
 - Expand benchmark suite for SortedDictionary
 - Commit _BTree.Builder

Minor Changes:
 - Update documentation
 - Expand test suits
 - Fix bug where SubSequences did not define subscript(bounds: Range<Index>)
 - _Node
   - Implement `depth` property for `_Node`
     - Packs both `depth`, `count`, and `capacity` within a single UInt64.
   - Implement `init(leftChild:seperator:rightChild:capacity:)` for `_Node`
   - Implement `concatenateWith(node:seperatedBy:)` to `_Node.UnsafeHandle`
   - Remove bad invariant check on `_Node.UnsafeHandle` deletion subroutines
 - _BTree
   - Add invariant checks as `_BTree.checkInvariants()`
   - Separate `_BTree.*capacity` into `*size` and `*capacity`
 - Make _FixedSizeArray top-level
   - Remove deque behavior.

Documentation:
 - Update complexity documentation style from 'n' to `self.count`

Testing:
 - Expand tests for SortedDictionary
 - Add tests for SortedDictionary.Keys
 - Add tests for _Node.join(...) routines
 - Add tests for _BTree.Builder
 - Restore checkBidirectionalCollection tests for _BTree
@vihanb
Copy link
Contributor Author

vihanb commented Aug 18, 2021

Our initial benchmark numbers are promising, in most cases we come close to, when not exceeding, the performance at large collection sizes compared to std::map

lookups-13

insertions-1

Key Changes:
 - Add duplicate handling functionality to _BTree.Builder
 - Remove transient allocation in SortedDictionary.values _modify
 - Add missing SortedDictionary.Values.subscript _modify
 - Add SortedSet(sortedElements:)
 - Add optimized SetAlgebra implementations
 - Remove remaining high-level offset APIs
 - Various optimizations
 - Expand internal documentation

Minor Changes:
 - Add ability to create dummy node
 - _BTree.Builder.append(key: Key) for sets.
 - Fix bug where findAnyIndex(forKey:) didn't calculate the offset.
 - Remove old, unused files
 - findAnyCursor -> takeCursor (to emphasize consuming nature)
 - Add takeCursor(at: Index)
 - Optimize init(grouping:by:) to use modifyValue to reduce CoW

Optimizations:
 - Use dummy node for transient _modify state rather than allocating new buffer
Key Changes:
 - Add tests and benchmarks for SortedSet
 - Fix bug during _Node.UnsafeHandle.popFirstElement() rebalancing
 - Enable _Node.UnsafeHandle.subscript(elementAt:) to work on value-less nodes.

Minor Changes:
 - Optimize Codable to use _BTree.Builder and forEach
 - Codable now checks for order, not strictly uniqueness
 - Add smaller node size for debug builds to easily catch errors
Signed-off-by: Vihan Bhargava <vihan_bhargava@apple.com>
@tamc
Copy link

tamc commented Oct 18, 2021

Anything I can do to help get this over the line?

@lorentey lorentey changed the base branch from main to feature/SortedCollections November 22, 2021 23:10
@lorentey
Copy link
Member

Merging to feature branch feature/SortedCollections.

@lorentey lorentey merged commit b472a6f into apple:feature/SortedCollections Nov 22, 2021
@usableFromInline
internal var _root: _Tree

//// Creates an empty set.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
//// Creates an empty set.
/// Creates an empty set.

cgrindel-self-hosted-renovate bot referenced this pull request in cgrindel/rules_swift_package_manager Feb 8, 2024
…v1.1.0 (#906)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[com_github_apple_swift_collections](https://togithub.com/apple/swift-collections)
| http_archive | minor | `1.0.6` -> `1.1.0` |

---

### Release Notes

<details>
<summary>apple/swift-collections
(com_github_apple_swift_collections)</summary>

###
[`v1.1.0`](https://togithub.com/apple/swift-collections/releases/tag/1.1.0):
Swift Collections 1.1.0

[Compare
Source](https://togithub.com/apple/swift-collections/compare/1.0.6...1.1.0)

This feature release adds a number of new data structure
implementations, along with minor changes to existing constructs.

##### New Data Structures

- `Heap` implements a min-max heap, backed by a native array.
(Contributed by [@&#8203;AquaGeek](https://togithub.com/AquaGeek))
- `BitSet` and `BitArray` are two alternate representations of a bitmap
type, backed by dynamically allocated storage. (Contributed by
[@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah))
- `TreeSet` and `TreeDictionary` are hashed collections implementing
Compressed Hash-Array Mapped Prefix Trees (CHAMP). They provide similar
API as `Set`/`Dictionary` in the Standard Library, but as persistent
data structures, supporting incremental mutations of shared instances
and efficient structural diffing. (Contributed by
[@&#8203;msteindorfer](https://togithub.com/msteindorfer))

##### Other Changes

- This version of the package can only be built using Swift 5.7 or
later.
- New methods: the `OrderedSet.isEqualSet` family of functions provide a
way to test that two containers contain the same members, ignoring the
order of elements.
([https://github.com/apple/swift-collections/issues/183](https://togithub.com/apple/swift-collections/issues/183),
[https://github.com/apple/swift-collections/pull/234](https://togithub.com/apple/swift-collections/pull/234))
- New method: `OrderedSet.filter` implements a version of the standard
filter operation that returns an `OrderedSet` instead of an `Array`.
([https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159))
- `debugDescription` implementations have been updated to follow Swift
best practice. (These are called by container types like `Array` to
print their elements, so they work best when they're succinct variants
of `description` that are suitable for embedding in structured output:
specifically, they must not produce unpaired delimiter characters
(`[`/`]`, `(`/`)`, `{`/`}`, `<`/`>` etc), raw top level commas,
semicolons, colons, unquoted strings etc. `debugDescription` should not
needlessly print type names etc.)

##### New Contributors

- [@&#8203;AquaGeek](https://togithub.com/AquaGeek) made their first
contribution in
[https://github.com/apple/swift-collections/pull/61](https://togithub.com/apple/swift-collections/pull/61)
- [@&#8203;ejmarchant](https://togithub.com/ejmarchant) made their first
contribution in
[https://github.com/apple/swift-collections/pull/82](https://togithub.com/apple/swift-collections/pull/82)
- [@&#8203;just-gull](https://togithub.com/just-gull) made their first
contribution in
[https://github.com/apple/swift-collections/pull/115](https://togithub.com/apple/swift-collections/pull/115)
- [@&#8203;jPaolantonio](https://togithub.com/jPaolantonio) made their
first contribution in
[https://github.com/apple/swift-collections/pull/121](https://togithub.com/apple/swift-collections/pull/121)
- [@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah) made
their first contribution in
[https://github.com/apple/swift-collections/pull/83](https://togithub.com/apple/swift-collections/pull/83)
- [@&#8203;hectormatos2011](https://togithub.com/hectormatos2011) made
their first contribution in
[https://github.com/apple/swift-collections/pull/155](https://togithub.com/apple/swift-collections/pull/155)
- [@&#8203;ktoso](https://togithub.com/ktoso) made their first
contribution in
[https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159)
- [@&#8203;CTMacUser](https://togithub.com/CTMacUser) made their first
contribution in
[https://github.com/apple/swift-collections/pull/116](https://togithub.com/apple/swift-collections/pull/116)
- [@&#8203;hassila](https://togithub.com/hassila) made their first
contribution in
[https://github.com/apple/swift-collections/pull/297](https://togithub.com/apple/swift-collections/pull/297)

Many thanks to our contributors for their great work (and patience)!

##### List of Pull Requests

**Full Changelog**:
apple/swift-collections@1.0.6...1.1.0

- Add a min-max heap implementation that can be used to back a priority
queue by [@&#8203;AquaGeek](https://togithub.com/AquaGeek) in
[https://github.com/apple/swift-collections/pull/61](https://togithub.com/apple/swift-collections/pull/61)
- \[benchmark] Review and extend Heap benchmarks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/76](https://togithub.com/apple/swift-collections/pull/76)
- Add reference benchmarks for bit vector implementations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/79](https://togithub.com/apple/swift-collections/pull/79)
- Fix Markdown link in README by
[@&#8203;AquaGeek](https://togithub.com/AquaGeek) in
[https://github.com/apple/swift-collections/pull/77](https://togithub.com/apple/swift-collections/pull/77)
- Fix documentation for types conforming to ExpressibleByArrayLiteral o…
by [@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/82](https://togithub.com/apple/swift-collections/pull/82)
- \[Heap] Performance tweaks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/78](https://togithub.com/apple/swift-collections/pull/78)
- Fix typos: missing subscript parameters by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/81](https://togithub.com/apple/swift-collections/pull/81)
- \[Heap] Update implementation details section in docs by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/84](https://togithub.com/apple/swift-collections/pull/84)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/85](https://togithub.com/apple/swift-collections/pull/85)
- Stop depending on swift-collections-benchmark by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/86](https://togithub.com/apple/swift-collections/pull/86)
- \[OrderedDictionary] modifyValue → updateValue by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/91](https://togithub.com/apple/swift-collections/pull/91)
- Add Benchmarks package to workspace by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/93](https://togithub.com/apple/swift-collections/pull/93)
- \[OrderedDictionary] Deprecate `subscript(offset:)` for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/92](https://togithub.com/apple/swift-collections/pull/92)
- Documentation: Remove in-place mutation comments by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/96](https://togithub.com/apple/swift-collections/pull/96)
- \[main] Freeze some types for consistency with their inlinable
initializers by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/98](https://togithub.com/apple/swift-collections/pull/98)
- Follow stdlib's leading underscore rule by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/95](https://togithub.com/apple/swift-collections/pull/95)
- \[Heap] Disable heap tests in release builds by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/100](https://togithub.com/apple/swift-collections/pull/100)
- \[NFC] Merge release/1.0 to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/105](https://togithub.com/apple/swift-collections/pull/105)
- Merge `release/1.0` into `main` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/108](https://togithub.com/apple/swift-collections/pull/108)
- \[README] Note that `Heap` hasn't been tagged yet & list other
enhancements in progress by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/109](https://togithub.com/apple/swift-collections/pull/109)
- PriorityQueueModule: remove `import Foundation` by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/118](https://togithub.com/apple/swift-collections/pull/118)
- \[Heap] Remove Heap's `ascending` and `descending` views by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/119](https://togithub.com/apple/swift-collections/pull/119)
- \[Heap] Enable heap tests in optimized builds
([#&#8203;101](https://togithub.com/apple/swift-collections/issues/101))
by [@&#8203;just-gull](https://togithub.com/just-gull) in
[https://github.com/apple/swift-collections/pull/115](https://togithub.com/apple/swift-collections/pull/115)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/122](https://togithub.com/apple/swift-collections/pull/122)
- Fix link to package internal documentation by
[@&#8203;jPaolantonio](https://togithub.com/jPaolantonio) in
[https://github.com/apple/swift-collections/pull/121](https://togithub.com/apple/swift-collections/pull/121)
- Merge release/1.0 to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/130](https://togithub.com/apple/swift-collections/pull/130)
- BitArray and BitSet data structures by
[@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah) in
[https://github.com/apple/swift-collections/pull/83](https://togithub.com/apple/swift-collections/pull/83)
- Sorted collections by [@&#8203;vihanb](https://togithub.com/vihanb) in
[https://github.com/apple/swift-collections/pull/65](https://togithub.com/apple/swift-collections/pull/65)
- Merge `release/1.0` to `main` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/141](https://togithub.com/apple/swift-collections/pull/141)
- Remove Swift PM Artifacts to avoid Generated Schemes in Xcode by
[@&#8203;hectormatos2011](https://togithub.com/hectormatos2011) in
[https://github.com/apple/swift-collections/pull/155](https://togithub.com/apple/swift-collections/pull/155)
- Reinstate custom schemes under Utils/swift-collections.xcworkspace by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/156](https://togithub.com/apple/swift-collections/pull/156)
- \+OrderedSet add filter
[#&#8203;158](https://togithub.com/apple/swift-collections/issues/158)
by [@&#8203;ktoso](https://togithub.com/ktoso) in
[https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159)
- \[Xcode] Update schemes & file template by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/161](https://togithub.com/apple/swift-collections/pull/161)
- \[OrderedCollection] Use standard temp allocation facility, if
available by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/160](https://togithub.com/apple/swift-collections/pull/160)
- \[OrderedSet] Work around weird name lookup issue in compiler by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/162](https://togithub.com/apple/swift-collections/pull/162)
- \=OrderedSet.filter Attempt to optimize filter impl by
[@&#8203;ktoso](https://togithub.com/ktoso) in
[https://github.com/apple/swift-collections/pull/163](https://togithub.com/apple/swift-collections/pull/163)
- Force-inline \_modify accessors to work around a performance issue by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/165](https://togithub.com/apple/swift-collections/pull/165)
- Merge release/1.0 branch to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/172](https://togithub.com/apple/swift-collections/pull/172)
- Incubate persistent data structures by
[@&#8203;msteindorfer](https://togithub.com/msteindorfer) in
[https://github.com/apple/swift-collections/pull/31](https://togithub.com/apple/swift-collections/pull/31)
- Persistent collections updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/174](https://togithub.com/apple/swift-collections/pull/174)
- Persistent collections updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/175](https://togithub.com/apple/swift-collections/pull/175)
- Persistent collections updates (part 3) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/176](https://togithub.com/apple/swift-collections/pull/176)
- Persistent collections updates (part 4) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/177](https://togithub.com/apple/swift-collections/pull/177)
- \[OrderedDictionary] Tiny documentation fix by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/178](https://togithub.com/apple/swift-collections/pull/178)
- Persistent collections updates (part 5) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/179](https://togithub.com/apple/swift-collections/pull/179)
- Integrate PriorityQueueModule, BitCollections, PersistentCollections,
SortedCollections into release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/181](https://togithub.com/apple/swift-collections/pull/181)
- Persistent collections updates (part 6) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/180](https://togithub.com/apple/swift-collections/pull/180)
- Persistent collections updates (part 7) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/182](https://togithub.com/apple/swift-collections/pull/182)
- \[BitSet] Fix decoding format on 32 bit architectures by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/185](https://togithub.com/apple/swift-collections/pull/185)
- Persistent collections updates (part 8) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/184](https://togithub.com/apple/swift-collections/pull/184)
- Persistent collections updates (part 9) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/188](https://togithub.com/apple/swift-collections/pull/188)
- Add Sendable conformances to all public types by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/191](https://togithub.com/apple/swift-collections/pull/191)
- \[test] Check baseline API expectations for set-like types by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/192](https://togithub.com/apple/swift-collections/pull/192)
- Fleshing out `PersistentSet` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/193](https://togithub.com/apple/swift-collections/pull/193)
- Rename `PriorityQueueModule` to `HeapModule` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/194](https://togithub.com/apple/swift-collections/pull/194)
- \[BitSet] Fix invariant violation in member subscript by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/195](https://togithub.com/apple/swift-collections/pull/195)
- \[1.1.0] Bump minimum required Swift toolchain to 5.5 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/196](https://togithub.com/apple/swift-collections/pull/196)
- Restore support for building with Swift 5.5 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/198](https://togithub.com/apple/swift-collections/pull/198)
- Merge release/1.0 to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/199](https://togithub.com/apple/swift-collections/pull/199)
- Update CMake configuration in preparation for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/200](https://togithub.com/apple/swift-collections/pull/200)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/202](https://togithub.com/apple/swift-collections/pull/202)
- \[1.1]\[SortedCollections] Remove for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/205](https://togithub.com/apple/swift-collections/pull/205)
- \[Heap] Change value of minimum or maximum element by
[@&#8203;CTMacUser](https://togithub.com/CTMacUser) in
[https://github.com/apple/swift-collections/pull/116](https://togithub.com/apple/swift-collections/pull/116)
- \[Heap] Prerelease preparations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/210](https://togithub.com/apple/swift-collections/pull/210)
- Update README files by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/212](https://togithub.com/apple/swift-collections/pull/212)
- \[manifest] Exclude CMakeLists.txt; remove unnecessary path settings;
reindent file by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/213](https://togithub.com/apple/swift-collections/pull/213)
- Review and finalize (?) set relation predicates for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/216](https://togithub.com/apple/swift-collections/pull/216)
- Merge.1.0→1.1 by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/217](https://togithub.com/apple/swift-collections/pull/217)
- Update CMake configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/218](https://togithub.com/apple/swift-collections/pull/218)
- Cherry pick changes from main to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/219](https://togithub.com/apple/swift-collections/pull/219)
- Fix unusual build problems by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/221](https://togithub.com/apple/swift-collections/pull/221)
- Review & update descriptions throughout the package by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/222](https://togithub.com/apple/swift-collections/pull/222)
- Review and finalize (?) binary set operations for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/223](https://togithub.com/apple/swift-collections/pull/223)
- \[Xcode] Disable implicit dependencies by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/227](https://togithub.com/apple/swift-collections/pull/227)
- \[OrderedSet] Improve sequence-taking initializer by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/226](https://togithub.com/apple/swift-collections/pull/226)
- \[OrderedSet, BitSet] Fix custom mirror display style by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/225](https://togithub.com/apple/swift-collections/pull/225)
- Finalize persistent collections API by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/224](https://togithub.com/apple/swift-collections/pull/224)
- Start working on DocC support by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/228](https://togithub.com/apple/swift-collections/pull/228)
- Update CMake build configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/230](https://togithub.com/apple/swift-collections/pull/230)
- \[PersistentSet] Iterator.next(): Make inlinable by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/233](https://togithub.com/apple/swift-collections/pull/233)
- \[SetAlgebra types] isEqual(to:) → isEqualSet(to:) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/234](https://togithub.com/apple/swift-collections/pull/234)
- \[PersistentCollections] Doc & benchmark updates in preparation of API
review by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/235](https://togithub.com/apple/swift-collections/pull/235)
- Apply changes from in-progress review thread by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/237](https://togithub.com/apple/swift-collections/pull/237)
- \[ShareableHashedCollections] API Review: add missing `mutating`
keywords by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/238](https://togithub.com/apple/swift-collections/pull/238)
- \[Benchmarks] Split default huge library up into individual files, one
per type by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/240](https://togithub.com/apple/swift-collections/pull/240)
- \[ShareableHashedCollections] Add missing import by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/243](https://togithub.com/apple/swift-collections/pull/243)
- Unify unsafe bit set implementations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/244](https://togithub.com/apple/swift-collections/pull/244)
- Fix warnings in development versions of Swift by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/245](https://togithub.com/apple/swift-collections/pull/245)
- \[HashTreeCollections] Change prefix `Shareable` to `Tree` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/242](https://togithub.com/apple/swift-collections/pull/242)
- \[TreeDictionary] Fix in-place merge operation to properly update the
count by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/247](https://togithub.com/apple/swift-collections/pull/247)
- \[cmake] Update CMake configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/249](https://togithub.com/apple/swift-collections/pull/249)
- Add not so experimental rope implementation by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/264](https://togithub.com/apple/swift-collections/pull/264)
- Fix off by one error in BitSet by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/267](https://togithub.com/apple/swift-collections/pull/267)
- Monomodule support by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/266](https://togithub.com/apple/swift-collections/pull/266)
- Expose a handful of BigString.Index methods by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/269](https://togithub.com/apple/swift-collections/pull/269)
- BitArray API refinements & additions by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/263](https://togithub.com/apple/swift-collections/pull/263)
- Make most of Rope inlinable by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/270](https://togithub.com/apple/swift-collections/pull/270)
- BigString: Fix String.Index.\_knownScalarAligned by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/272](https://togithub.com/apple/swift-collections/pull/272)
- Rope: Fix `Sendable` conformance by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/271](https://togithub.com/apple/swift-collections/pull/271)
- Require Swift 5.6 by [@&#8203;lorentey](https://togithub.com/lorentey)
in
[https://github.com/apple/swift-collections/pull/273](https://togithub.com/apple/swift-collections/pull/273)
- \[OrderedDictionary] Explicitly mention in documentation that
keys/values are ordered by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/275](https://togithub.com/apple/swift-collections/pull/275)
- \[HashCollections] Ensure `self` doesn’t get destroyed before we’re
done working with it by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/276](https://togithub.com/apple/swift-collections/pull/276)
- Remove obsolete swift(>=5.5)/swift(>=5.6) checks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/277](https://togithub.com/apple/swift-collections/pull/277)
- \[Xcode] Update Xcode project by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/278](https://togithub.com/apple/swift-collections/pull/278)
- Minor rope updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/279](https://togithub.com/apple/swift-collections/pull/279)
- \[Rope] remove(at:): Fix assertion when removing the last item creates
a deficiency by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/280](https://togithub.com/apple/swift-collections/pull/280)
- Merge changes from release 1.0 to release 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/283](https://togithub.com/apple/swift-collections/pull/283)
- \[CollectionUtilities] Silence a warning on 32 bit platforms by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/286](https://togithub.com/apple/swift-collections/pull/286)
- \[BitSet] Fix a thinko in BitSet.isEqualSet by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/287](https://togithub.com/apple/swift-collections/pull/287)
- Grab bag of fixes for small test issues by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/288](https://togithub.com/apple/swift-collections/pull/288)
- \[Xcode] Set a code sign identity in the Xcode project by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/285](https://togithub.com/apple/swift-collections/pull/285)
- Rope: Fix trap when replaceSubrange is called on an empty rope by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/290](https://togithub.com/apple/swift-collections/pull/290)
- `Rope.find` returns a bogus remainder for the end position by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/291](https://togithub.com/apple/swift-collections/pull/291)
- Update TreeSet.md by [@&#8203;hassila](https://togithub.com/hassila)
in
[https://github.com/apple/swift-collections/pull/297](https://togithub.com/apple/swift-collections/pull/297)
- Fix CustomStringConvertible/CustomDebugStringConvertible conformances
by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/302](https://togithub.com/apple/swift-collections/pull/302)
- \[RopeModule] Fix issues in Swift's ABI stable dialect by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/318](https://togithub.com/apple/swift-collections/pull/318)
- \[CMake, Xcode] Update configurations for alternate build systems by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/319](https://togithub.com/apple/swift-collections/pull/319)
- \[RopeModule] Remove unnecessary typealiases by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/320](https://togithub.com/apple/swift-collections/pull/320)
- \[Heap] Improve type-level doc comment by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/326](https://togithub.com/apple/swift-collections/pull/326)
- \[Heap] insert(contentsOf:) Switch to Floyd’s if we’re inserting too
many items by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/327](https://togithub.com/apple/swift-collections/pull/327)
- \[1.1] build: support building in Debug mode on Windows by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/336](https://togithub.com/apple/swift-collections/pull/336)
- Merge release/1.0 to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/348](https://togithub.com/apple/swift-collections/pull/348)
- \[Heap] Convert min() and max() to properties by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/328](https://togithub.com/apple/swift-collections/pull/328)
- \[BitArray] Disable bitwise operators for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/353](https://togithub.com/apple/swift-collections/pull/353)
- \[Heap] Final(?) Heap API adjustments for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/354](https://togithub.com/apple/swift-collections/pull/354)
- \[Benchmarks] Add Collection Equality Benchmarks by
[@&#8203;vanvoorden](https://togithub.com/vanvoorden) in
[https://github.com/apple/swift-collections/pull/351](https://togithub.com/apple/swift-collections/pull/351)
- Release preparations for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/355](https://togithub.com/apple/swift-collections/pull/355)
- \[1.1] Fix typos by [@&#8203;lorentey](https://togithub.com/lorentey)
in
[https://github.com/apple/swift-collections/pull/357](https://togithub.com/apple/swift-collections/pull/357)
- \[TreeDictionary]\[Keys] Add Equatable and Hashable Conformance to
TreeDictionary.Keys by
[@&#8203;vanvoorden](https://togithub.com/vanvoorden) in
[https://github.com/apple/swift-collections/pull/352](https://togithub.com/apple/swift-collections/pull/352)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMDAuMCIsInVwZGF0ZWRJblZlciI6IjM2LjEwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: Self-hosted Renovate Bot <361546+cgrindel-self-hosted-renovate[bot]@users.noreply.github.enterprise.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants