Ver código fonte

sorted-ranges, .areEqual and .forEach

Alexander Rose 5 anos atrás
pai
commit
d6278cb3eb
1 arquivos alterados com 18 adições e 0 exclusões
  1. 18 0
      src/mol-data/int/sorted-ranges.ts

+ 18 - 0
src/mol-data/int/sorted-ranges.ts

@@ -39,6 +39,24 @@ namespace SortedRanges {
         return ranges[index * 2 + 1]
     }
 
+    export function areEqual<T extends number = number>(a: SortedRanges<T>, b: SortedRanges<T>) {
+        if (a.length !== b.length) return false
+        for (let i = 0, il = a.length; i < il; ++i) {
+            if (a[i] !== b[i]) return false
+        }
+        return true
+    }
+
+    export function forEach<T extends number = number>(ranges: SortedRanges<T>, f: (value: T, i: number) => void) {
+        let k = 0
+        for (let i = 0, il = ranges.length; i < il; i += 2) {
+            for (let j = ranges[i], jl = ranges[i + 1]; j <= jl; ++j) {
+                f(j, k);
+                ++k
+            }
+        }
+    }
+
     /** Returns if a value of `set` is included in `ranges` */
     export function has<T extends number = number>(ranges: SortedRanges<T>, set: OrderedSet<T>) {
         return firstIntersectionIndex(ranges, set) !== -1