Skip to content

Commit

Permalink
Add RangeSet.join
Browse files Browse the repository at this point in the history
FEATURE: The `RangeSet.join` function can be used to join multiple range sets
together.
  • Loading branch information
marijnh committed Dec 28, 2023
1 parent bb03cbe commit 797d70d
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/rangeset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,17 @@ export class RangeSet<T extends RangeValue> {
return build.finish()
}

/// Join an array of range sets into a single set.
static join<T extends RangeValue>(sets: readonly RangeSet<T>[]): RangeSet<T> {
if (!sets.length) return RangeSet.empty
let result = sets[sets.length - 1]
for (let i = sets.length - 2; i >= 0; i--) {
for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)
result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint))
}
return result
}

/// The empty set of ranges.
static empty = new RangeSet<any>([], [], null as any, -1)
}
Expand Down

0 comments on commit 797d70d

Please sign in to comment.