@itwin/core-bentley 3.4.0-dev.9 → 3.5.0-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/lib/cjs/AccessToken.d.ts +8 -8
  3. package/lib/cjs/AccessToken.js +9 -9
  4. package/lib/cjs/AccessToken.js.map +1 -1
  5. package/lib/cjs/Assert.d.ts +25 -25
  6. package/lib/cjs/Assert.js +45 -45
  7. package/lib/cjs/Assert.js.map +1 -1
  8. package/lib/cjs/AsyncMutex.d.ts +26 -26
  9. package/lib/cjs/AsyncMutex.js +43 -43
  10. package/lib/cjs/AsyncMutex.js.map +1 -1
  11. package/lib/cjs/BeEvent.d.ts +81 -81
  12. package/lib/cjs/BeEvent.js +156 -156
  13. package/lib/cjs/BeEvent.js.map +1 -1
  14. package/lib/cjs/BeSQLite.d.ts +170 -170
  15. package/lib/cjs/BeSQLite.js +183 -183
  16. package/lib/cjs/BeSQLite.js.map +1 -1
  17. package/lib/cjs/BentleyError.d.ts +376 -376
  18. package/lib/cjs/BentleyError.js +699 -699
  19. package/lib/cjs/BentleyError.js.map +1 -1
  20. package/lib/cjs/BentleyLoggerCategory.d.ts +11 -11
  21. package/lib/cjs/BentleyLoggerCategory.js +19 -19
  22. package/lib/cjs/BentleyLoggerCategory.js.map +1 -1
  23. package/lib/cjs/ByteStream.d.ts +92 -92
  24. package/lib/cjs/ByteStream.d.ts.map +1 -1
  25. package/lib/cjs/ByteStream.js +133 -123
  26. package/lib/cjs/ByteStream.js.map +1 -1
  27. package/lib/cjs/ClassUtils.d.ts +14 -14
  28. package/lib/cjs/ClassUtils.js +27 -27
  29. package/lib/cjs/ClassUtils.js.map +1 -1
  30. package/lib/cjs/Compare.d.ts +47 -47
  31. package/lib/cjs/Compare.d.ts.map +1 -1
  32. package/lib/cjs/Compare.js +75 -63
  33. package/lib/cjs/Compare.js.map +1 -1
  34. package/lib/cjs/CompressedId64Set.d.ts +134 -134
  35. package/lib/cjs/CompressedId64Set.js +428 -428
  36. package/lib/cjs/CompressedId64Set.js.map +1 -1
  37. package/lib/cjs/Dictionary.d.ts +125 -125
  38. package/lib/cjs/Dictionary.d.ts.map +1 -1
  39. package/lib/cjs/Dictionary.js +203 -203
  40. package/lib/cjs/Dictionary.js.map +1 -1
  41. package/lib/cjs/Disposable.d.ts +80 -80
  42. package/lib/cjs/Disposable.js +120 -120
  43. package/lib/cjs/Disposable.js.map +1 -1
  44. package/lib/cjs/Id.d.ts +277 -277
  45. package/lib/cjs/Id.d.ts.map +1 -1
  46. package/lib/cjs/Id.js +629 -619
  47. package/lib/cjs/Id.js.map +1 -1
  48. package/lib/cjs/IndexMap.d.ts +65 -65
  49. package/lib/cjs/IndexMap.js +91 -91
  50. package/lib/cjs/IndexMap.js.map +1 -1
  51. package/lib/cjs/JsonSchema.d.ts +77 -77
  52. package/lib/cjs/JsonSchema.js +9 -9
  53. package/lib/cjs/JsonSchema.js.map +1 -1
  54. package/lib/cjs/JsonUtils.d.ts +78 -78
  55. package/lib/cjs/JsonUtils.d.ts.map +1 -1
  56. package/lib/cjs/JsonUtils.js +151 -133
  57. package/lib/cjs/JsonUtils.js.map +1 -1
  58. package/lib/cjs/LRUMap.d.ts +129 -129
  59. package/lib/cjs/LRUMap.d.ts.map +1 -1
  60. package/lib/cjs/LRUMap.js +333 -333
  61. package/lib/cjs/LRUMap.js.map +1 -1
  62. package/lib/cjs/Logger.d.ts +141 -141
  63. package/lib/cjs/Logger.js +254 -254
  64. package/lib/cjs/Logger.js.map +1 -1
  65. package/lib/cjs/ObservableSet.d.ts +23 -23
  66. package/lib/cjs/ObservableSet.js +51 -51
  67. package/lib/cjs/ObservableSet.js.map +1 -1
  68. package/lib/cjs/OneAtATimeAction.d.ts +31 -31
  69. package/lib/cjs/OneAtATimeAction.d.ts.map +1 -1
  70. package/lib/cjs/OneAtATimeAction.js +94 -91
  71. package/lib/cjs/OneAtATimeAction.js.map +1 -1
  72. package/lib/cjs/OrderedId64Iterable.d.ts +74 -74
  73. package/lib/cjs/OrderedId64Iterable.js +235 -235
  74. package/lib/cjs/OrderedId64Iterable.js.map +1 -1
  75. package/lib/cjs/OrderedSet.d.ts +40 -40
  76. package/lib/cjs/OrderedSet.js +64 -64
  77. package/lib/cjs/OrderedSet.js.map +1 -1
  78. package/lib/cjs/PriorityQueue.d.ts +70 -70
  79. package/lib/cjs/PriorityQueue.js +140 -140
  80. package/lib/cjs/PriorityQueue.js.map +1 -1
  81. package/lib/cjs/ProcessDetector.d.ts +59 -59
  82. package/lib/cjs/ProcessDetector.js +71 -71
  83. package/lib/cjs/ProcessDetector.js.map +1 -1
  84. package/lib/cjs/SortedArray.d.ts +232 -232
  85. package/lib/cjs/SortedArray.d.ts.map +1 -1
  86. package/lib/cjs/SortedArray.js +303 -301
  87. package/lib/cjs/SortedArray.js.map +1 -1
  88. package/lib/cjs/StatusCategory.d.ts +30 -30
  89. package/lib/cjs/StatusCategory.js +460 -460
  90. package/lib/cjs/StatusCategory.js.map +1 -1
  91. package/lib/cjs/StringUtils.d.ts +22 -22
  92. package/lib/cjs/StringUtils.d.ts.map +1 -1
  93. package/lib/cjs/StringUtils.js +148 -146
  94. package/lib/cjs/StringUtils.js.map +1 -1
  95. package/lib/cjs/Time.d.ts +122 -122
  96. package/lib/cjs/Time.d.ts.map +1 -1
  97. package/lib/cjs/Time.js +152 -146
  98. package/lib/cjs/Time.js.map +1 -1
  99. package/lib/cjs/Tracing.d.ts +40 -40
  100. package/lib/cjs/Tracing.d.ts.map +1 -1
  101. package/lib/cjs/Tracing.js +130 -127
  102. package/lib/cjs/Tracing.js.map +1 -1
  103. package/lib/cjs/TypedArrayBuilder.d.ts +98 -0
  104. package/lib/cjs/TypedArrayBuilder.d.ts.map +1 -0
  105. package/lib/cjs/TypedArrayBuilder.js +135 -0
  106. package/lib/cjs/TypedArrayBuilder.js.map +1 -0
  107. package/lib/cjs/UnexpectedErrors.d.ts +43 -43
  108. package/lib/cjs/UnexpectedErrors.d.ts.map +1 -1
  109. package/lib/cjs/UnexpectedErrors.js +68 -65
  110. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  111. package/lib/cjs/UtilityTypes.d.ts +86 -86
  112. package/lib/cjs/UtilityTypes.js +26 -26
  113. package/lib/cjs/UtilityTypes.js.map +1 -1
  114. package/lib/cjs/YieldManager.d.ts +18 -18
  115. package/lib/cjs/YieldManager.js +34 -34
  116. package/lib/cjs/YieldManager.js.map +1 -1
  117. package/lib/cjs/core-bentley.d.ts +74 -73
  118. package/lib/cjs/core-bentley.d.ts.map +1 -1
  119. package/lib/cjs/core-bentley.js +90 -89
  120. package/lib/cjs/core-bentley.js.map +1 -1
  121. package/lib/cjs/partitionArray.d.ts +21 -21
  122. package/lib/cjs/partitionArray.js +43 -43
  123. package/lib/cjs/partitionArray.js.map +1 -1
  124. package/lib/esm/AccessToken.d.ts +8 -8
  125. package/lib/esm/AccessToken.js +8 -8
  126. package/lib/esm/AccessToken.js.map +1 -1
  127. package/lib/esm/Assert.d.ts +25 -25
  128. package/lib/esm/Assert.js +41 -41
  129. package/lib/esm/Assert.js.map +1 -1
  130. package/lib/esm/AsyncMutex.d.ts +26 -26
  131. package/lib/esm/AsyncMutex.js +39 -39
  132. package/lib/esm/AsyncMutex.js.map +1 -1
  133. package/lib/esm/BeEvent.d.ts +81 -81
  134. package/lib/esm/BeEvent.js +150 -150
  135. package/lib/esm/BeEvent.js.map +1 -1
  136. package/lib/esm/BeSQLite.d.ts +170 -170
  137. package/lib/esm/BeSQLite.js +180 -180
  138. package/lib/esm/BeSQLite.js.map +1 -1
  139. package/lib/esm/BentleyError.d.ts +376 -376
  140. package/lib/esm/BentleyError.js +695 -695
  141. package/lib/esm/BentleyError.js.map +1 -1
  142. package/lib/esm/BentleyLoggerCategory.d.ts +11 -11
  143. package/lib/esm/BentleyLoggerCategory.js +16 -16
  144. package/lib/esm/BentleyLoggerCategory.js.map +1 -1
  145. package/lib/esm/ByteStream.d.ts +92 -92
  146. package/lib/esm/ByteStream.d.ts.map +1 -1
  147. package/lib/esm/ByteStream.js +129 -119
  148. package/lib/esm/ByteStream.js.map +1 -1
  149. package/lib/esm/ClassUtils.d.ts +14 -14
  150. package/lib/esm/ClassUtils.js +22 -22
  151. package/lib/esm/ClassUtils.js.map +1 -1
  152. package/lib/esm/Compare.d.ts +47 -47
  153. package/lib/esm/Compare.d.ts.map +1 -1
  154. package/lib/esm/Compare.js +63 -51
  155. package/lib/esm/Compare.js.map +1 -1
  156. package/lib/esm/CompressedId64Set.d.ts +134 -134
  157. package/lib/esm/CompressedId64Set.js +423 -423
  158. package/lib/esm/CompressedId64Set.js.map +1 -1
  159. package/lib/esm/Dictionary.d.ts +125 -125
  160. package/lib/esm/Dictionary.d.ts.map +1 -1
  161. package/lib/esm/Dictionary.js +199 -199
  162. package/lib/esm/Dictionary.js.map +1 -1
  163. package/lib/esm/Disposable.d.ts +80 -80
  164. package/lib/esm/Disposable.js +112 -112
  165. package/lib/esm/Disposable.js.map +1 -1
  166. package/lib/esm/Id.d.ts +277 -277
  167. package/lib/esm/Id.d.ts.map +1 -1
  168. package/lib/esm/Id.js +625 -615
  169. package/lib/esm/Id.js.map +1 -1
  170. package/lib/esm/IndexMap.d.ts +65 -65
  171. package/lib/esm/IndexMap.js +86 -86
  172. package/lib/esm/IndexMap.js.map +1 -1
  173. package/lib/esm/JsonSchema.d.ts +77 -77
  174. package/lib/esm/JsonSchema.js +8 -8
  175. package/lib/esm/JsonSchema.js.map +1 -1
  176. package/lib/esm/JsonUtils.d.ts +78 -78
  177. package/lib/esm/JsonUtils.d.ts.map +1 -1
  178. package/lib/esm/JsonUtils.js +148 -130
  179. package/lib/esm/JsonUtils.js.map +1 -1
  180. package/lib/esm/LRUMap.d.ts +129 -129
  181. package/lib/esm/LRUMap.d.ts.map +1 -1
  182. package/lib/esm/LRUMap.js +326 -326
  183. package/lib/esm/LRUMap.js.map +1 -1
  184. package/lib/esm/Logger.d.ts +141 -141
  185. package/lib/esm/Logger.js +249 -249
  186. package/lib/esm/Logger.js.map +1 -1
  187. package/lib/esm/ObservableSet.d.ts +23 -23
  188. package/lib/esm/ObservableSet.js +47 -47
  189. package/lib/esm/ObservableSet.js.map +1 -1
  190. package/lib/esm/OneAtATimeAction.d.ts +31 -31
  191. package/lib/esm/OneAtATimeAction.d.ts.map +1 -1
  192. package/lib/esm/OneAtATimeAction.js +89 -86
  193. package/lib/esm/OneAtATimeAction.js.map +1 -1
  194. package/lib/esm/OrderedId64Iterable.d.ts +74 -74
  195. package/lib/esm/OrderedId64Iterable.js +232 -232
  196. package/lib/esm/OrderedId64Iterable.js.map +1 -1
  197. package/lib/esm/OrderedSet.d.ts +40 -40
  198. package/lib/esm/OrderedSet.js +59 -59
  199. package/lib/esm/OrderedSet.js.map +1 -1
  200. package/lib/esm/PriorityQueue.d.ts +70 -70
  201. package/lib/esm/PriorityQueue.js +136 -136
  202. package/lib/esm/PriorityQueue.js.map +1 -1
  203. package/lib/esm/ProcessDetector.d.ts +59 -59
  204. package/lib/esm/ProcessDetector.js +67 -67
  205. package/lib/esm/ProcessDetector.js.map +1 -1
  206. package/lib/esm/SortedArray.d.ts +232 -232
  207. package/lib/esm/SortedArray.d.ts.map +1 -1
  208. package/lib/esm/SortedArray.js +296 -294
  209. package/lib/esm/SortedArray.js.map +1 -1
  210. package/lib/esm/StatusCategory.d.ts +30 -30
  211. package/lib/esm/StatusCategory.js +454 -454
  212. package/lib/esm/StatusCategory.js.map +1 -1
  213. package/lib/esm/StringUtils.d.ts +22 -22
  214. package/lib/esm/StringUtils.d.ts.map +1 -1
  215. package/lib/esm/StringUtils.js +142 -140
  216. package/lib/esm/StringUtils.js.map +1 -1
  217. package/lib/esm/Time.d.ts +122 -122
  218. package/lib/esm/Time.d.ts.map +1 -1
  219. package/lib/esm/Time.js +146 -140
  220. package/lib/esm/Time.js.map +1 -1
  221. package/lib/esm/Tracing.d.ts +40 -40
  222. package/lib/esm/Tracing.d.ts.map +1 -1
  223. package/lib/esm/Tracing.js +126 -123
  224. package/lib/esm/Tracing.js.map +1 -1
  225. package/lib/esm/TypedArrayBuilder.d.ts +98 -0
  226. package/lib/esm/TypedArrayBuilder.d.ts.map +1 -0
  227. package/lib/esm/TypedArrayBuilder.js +128 -0
  228. package/lib/esm/TypedArrayBuilder.js.map +1 -0
  229. package/lib/esm/UnexpectedErrors.d.ts +43 -43
  230. package/lib/esm/UnexpectedErrors.d.ts.map +1 -1
  231. package/lib/esm/UnexpectedErrors.js +64 -61
  232. package/lib/esm/UnexpectedErrors.js.map +1 -1
  233. package/lib/esm/UtilityTypes.d.ts +86 -86
  234. package/lib/esm/UtilityTypes.js +21 -21
  235. package/lib/esm/UtilityTypes.js.map +1 -1
  236. package/lib/esm/YieldManager.d.ts +18 -18
  237. package/lib/esm/YieldManager.js +30 -30
  238. package/lib/esm/YieldManager.js.map +1 -1
  239. package/lib/esm/core-bentley.d.ts +74 -73
  240. package/lib/esm/core-bentley.d.ts.map +1 -1
  241. package/lib/esm/core-bentley.js +78 -77
  242. package/lib/esm/core-bentley.js.map +1 -1
  243. package/lib/esm/partitionArray.d.ts +21 -21
  244. package/lib/esm/partitionArray.js +39 -39
  245. package/lib/esm/partitionArray.js.map +1 -1
  246. package/package.json +5 -5
@@ -1,60 +1,60 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Collections
7
- */
8
- import { shallowClone, SortedArray } from "./SortedArray";
9
- /** A read-only equivalent of `Set<T>` that maintains its elements in sorted order as specified by a comparison function.
10
- * Iteration returns elements in the order specified by the comparison function, as opposed to `Set` which returns elements in insertion order.
11
- * Implemented in terms of [[SortedArray]].
12
- * @public
13
- */
14
- export class ReadonlyOrderedSet {
15
- /** Construct a new ReadonlyOrderedSet<T>.
16
- * @param compare The function used to compare elements within the set, determining their ordering.
17
- * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.
18
- */
19
- constructor(compare, clone = shallowClone) {
20
- this._array = new SortedArray(compare, false, clone);
21
- }
22
- /** The number of elements in the set. */
23
- get size() {
24
- return this._array.length;
25
- }
26
- /** Returns true if `value` is present in the set. */
27
- has(value) {
28
- return -1 !== this._array.indexOf(value);
29
- }
30
- /** Iterate over the elements in sorted order (as opposed to `Set`'s iterator, which returns elements in insertion order). */
31
- [Symbol.iterator]() {
32
- return this._array[Symbol.iterator]();
33
- }
34
- }
35
- /** A mutable [[ReadonlyOrderedSet]].
36
- * @public
37
- */
38
- export class OrderedSet extends ReadonlyOrderedSet {
39
- /** Construct a new OrderedSet<T>.
40
- * @param compare The function used to compare elements within the set, determining their ordering.
41
- * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.
42
- */
43
- constructor(compare, clone = shallowClone) {
44
- super(compare, clone);
45
- }
46
- /** Remove all elements from the set. */
47
- clear() {
48
- this._array.clear();
49
- }
50
- /** Add the specified element to the set. Returns this set. */
51
- add(value) {
52
- this._array.insert(value);
53
- return this;
54
- }
55
- /** Removes the specified element from the set. Returns `true` if the element was present. */
56
- delete(value) {
57
- return -1 !== this._array.remove(value);
58
- }
59
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Collections
7
+ */
8
+ import { shallowClone, SortedArray } from "./SortedArray";
9
+ /** A read-only equivalent of `Set<T>` that maintains its elements in sorted order as specified by a comparison function.
10
+ * Iteration returns elements in the order specified by the comparison function, as opposed to `Set` which returns elements in insertion order.
11
+ * Implemented in terms of [[SortedArray]].
12
+ * @public
13
+ */
14
+ export class ReadonlyOrderedSet {
15
+ /** Construct a new ReadonlyOrderedSet<T>.
16
+ * @param compare The function used to compare elements within the set, determining their ordering.
17
+ * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.
18
+ */
19
+ constructor(compare, clone = shallowClone) {
20
+ this._array = new SortedArray(compare, false, clone);
21
+ }
22
+ /** The number of elements in the set. */
23
+ get size() {
24
+ return this._array.length;
25
+ }
26
+ /** Returns true if `value` is present in the set. */
27
+ has(value) {
28
+ return -1 !== this._array.indexOf(value);
29
+ }
30
+ /** Iterate over the elements in sorted order (as opposed to `Set`'s iterator, which returns elements in insertion order). */
31
+ [Symbol.iterator]() {
32
+ return this._array[Symbol.iterator]();
33
+ }
34
+ }
35
+ /** A mutable [[ReadonlyOrderedSet]].
36
+ * @public
37
+ */
38
+ export class OrderedSet extends ReadonlyOrderedSet {
39
+ /** Construct a new OrderedSet<T>.
40
+ * @param compare The function used to compare elements within the set, determining their ordering.
41
+ * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.
42
+ */
43
+ constructor(compare, clone = shallowClone) {
44
+ super(compare, clone);
45
+ }
46
+ /** Remove all elements from the set. */
47
+ clear() {
48
+ this._array.clear();
49
+ }
50
+ /** Add the specified element to the set. Returns this set. */
51
+ add(value) {
52
+ this._array.insert(value);
53
+ return this;
54
+ }
55
+ /** Removes the specified element from the set. Returns `true` if the element was present. */
56
+ delete(value) {
57
+ return -1 !== this._array.remove(value);
58
+ }
59
+ }
60
60
  //# sourceMappingURL=OrderedSet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedSet.js","sourceRoot":"","sources":["../../src/OrderedSet.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAiB,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAG7B;;;OAGG;IACH,YAAmB,OAA6B,EAAE,QAA0B,YAAY;QACtF,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAI,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,yCAAyC;IACzC,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,qDAAqD;IAC9C,GAAG,CAAC,KAAQ;QACjB,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,6HAA6H;IACtH,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAc,SAAQ,kBAAqB;IACtD;;;OAGG;IACH,YAAmB,OAA6B,EAAE,QAA0B,YAAY;QACtF,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,wCAAwC;IACjC,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,8DAA8D;IACvD,GAAG,CAAC,KAAQ;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6FAA6F;IACtF,MAAM,CAAC,KAAQ;QACpB,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Collections\r\n */\r\n\r\nimport { OrderedComparator } from \"./Compare\";\r\nimport { CloneFunction, shallowClone, SortedArray } from \"./SortedArray\";\r\n\r\n/** A read-only equivalent of `Set<T>` that maintains its elements in sorted order as specified by a comparison function.\r\n * Iteration returns elements in the order specified by the comparison function, as opposed to `Set` which returns elements in insertion order.\r\n * Implemented in terms of [[SortedArray]].\r\n * @public\r\n */\r\nexport class ReadonlyOrderedSet<T> implements Iterable<T> {\r\n protected readonly _array: SortedArray<T>;\r\n\r\n /** Construct a new ReadonlyOrderedSet<T>.\r\n * @param compare The function used to compare elements within the set, determining their ordering.\r\n * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.\r\n */\r\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\r\n this._array = new SortedArray<T>(compare, false, clone);\r\n }\r\n\r\n /** The number of elements in the set. */\r\n public get size(): number {\r\n return this._array.length;\r\n }\r\n\r\n /** Returns true if `value` is present in the set. */\r\n public has(value: T): boolean {\r\n return -1 !== this._array.indexOf(value);\r\n }\r\n\r\n /** Iterate over the elements in sorted order (as opposed to `Set`'s iterator, which returns elements in insertion order). */\r\n public [Symbol.iterator](): Iterator<T> {\r\n return this._array[Symbol.iterator]();\r\n }\r\n}\r\n\r\n/** A mutable [[ReadonlyOrderedSet]].\r\n * @public\r\n */\r\nexport class OrderedSet<T> extends ReadonlyOrderedSet<T> {\r\n /** Construct a new OrderedSet<T>.\r\n * @param compare The function used to compare elements within the set, determining their ordering.\r\n * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.\r\n */\r\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\r\n super(compare, clone);\r\n }\r\n\r\n /** Remove all elements from the set. */\r\n public clear(): void {\r\n this._array.clear();\r\n }\r\n\r\n /** Add the specified element to the set. Returns this set. */\r\n public add(value: T): this {\r\n this._array.insert(value);\r\n return this;\r\n }\r\n\r\n /** Removes the specified element from the set. Returns `true` if the element was present. */\r\n public delete(value: T): boolean {\r\n return -1 !== this._array.remove(value);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"OrderedSet.js","sourceRoot":"","sources":["../../src/OrderedSet.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAiB,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAG7B;;;OAGG;IACH,YAAmB,OAA6B,EAAE,QAA0B,YAAY;QACtF,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAI,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,yCAAyC;IACzC,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,qDAAqD;IAC9C,GAAG,CAAC,KAAQ;QACjB,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,6HAA6H;IACtH,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAc,SAAQ,kBAAqB;IACtD;;;OAGG;IACH,YAAmB,OAA6B,EAAE,QAA0B,YAAY;QACtF,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,wCAAwC;IACjC,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,8DAA8D;IACvD,GAAG,CAAC,KAAQ;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6FAA6F;IACtF,MAAM,CAAC,KAAQ;QACpB,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Collections\n */\n\nimport { OrderedComparator } from \"./Compare\";\nimport { CloneFunction, shallowClone, SortedArray } from \"./SortedArray\";\n\n/** A read-only equivalent of `Set<T>` that maintains its elements in sorted order as specified by a comparison function.\n * Iteration returns elements in the order specified by the comparison function, as opposed to `Set` which returns elements in insertion order.\n * Implemented in terms of [[SortedArray]].\n * @public\n */\nexport class ReadonlyOrderedSet<T> implements Iterable<T> {\n protected readonly _array: SortedArray<T>;\n\n /** Construct a new ReadonlyOrderedSet<T>.\n * @param compare The function used to compare elements within the set, determining their ordering.\n * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.\n */\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\n this._array = new SortedArray<T>(compare, false, clone);\n }\n\n /** The number of elements in the set. */\n public get size(): number {\n return this._array.length;\n }\n\n /** Returns true if `value` is present in the set. */\n public has(value: T): boolean {\n return -1 !== this._array.indexOf(value);\n }\n\n /** Iterate over the elements in sorted order (as opposed to `Set`'s iterator, which returns elements in insertion order). */\n public [Symbol.iterator](): Iterator<T> {\n return this._array[Symbol.iterator]();\n }\n}\n\n/** A mutable [[ReadonlyOrderedSet]].\n * @public\n */\nexport class OrderedSet<T> extends ReadonlyOrderedSet<T> {\n /** Construct a new OrderedSet<T>.\n * @param compare The function used to compare elements within the set, determining their ordering.\n * @param clone The function invoked to clone a new element for insertion into the set. The default implementation simply returns its input.\n */\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\n super(compare, clone);\n }\n\n /** Remove all elements from the set. */\n public clear(): void {\n this._array.clear();\n }\n\n /** Add the specified element to the set. Returns this set. */\n public add(value: T): this {\n this._array.insert(value);\n return this;\n }\n\n /** Removes the specified element from the set. Returns `true` if the element was present. */\n public delete(value: T): boolean {\n return -1 !== this._array.remove(value);\n }\n}\n"]}
@@ -1,71 +1,71 @@
1
- /** @packageDocumentation
2
- * @module Collections
3
- */
4
- import { OrderedComparator } from "./Compare";
5
- import { CloneFunction } from "./SortedArray";
6
- /** @public */
7
- export declare type ComputePriorityFunction<T> = (value: T) => number;
8
- /**
9
- * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.
10
- * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.
11
- * @public
12
- */
13
- export declare class PriorityQueue<T> implements Iterable<T> {
14
- protected _array: T[];
15
- protected readonly _compare: OrderedComparator<T>;
16
- protected readonly _clone: CloneFunction<T>;
17
- /**
18
- * Constructor
19
- * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.
20
- * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.
21
- * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.
22
- */
23
- constructor(compare: OrderedComparator<T>, clone?: CloneFunction<T>);
24
- /** The number of values in the queue. */
25
- get length(): number;
26
- /** Returns true if the queue contains no values. */
27
- get isEmpty(): boolean;
28
- /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */
29
- [Symbol.iterator](): Iterator<T>;
30
- protected _swap(a: number, b: number): void;
31
- protected _heapify(index: number): void;
32
- /**
33
- * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.
34
- * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.
35
- */
36
- sort(): void;
37
- /**
38
- * Pushes a value onto the queue according to the sorting criterion.
39
- * @param value The value to insert
40
- * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
41
- */
42
- push(value: T): T;
43
- /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.
44
- * After using this function, you must manually invoke sort() to ensure the queue is sorted again.
45
- * @param value The value to append
46
- * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
47
- */
48
- append(value: T): T;
49
- /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */
50
- get front(): T | undefined;
51
- /**
52
- * Removes the front-most element off of the queue and returns it.
53
- * @returns The front-most element, or undefined if the queue is empty.
54
- */
55
- pop(): T | undefined;
56
- /** Removes all values from the queue. */
57
- clear(): void;
58
- /**
59
- * Removes the value at the specified index from the queue and reorders the queue.
60
- * @param index The index of the value to remove
61
- * @returns the value at the specified index, or undefined if the index is out of range.
62
- */
63
- protected _pop(index: number): T | undefined;
64
- /**
65
- * Returns the value at the specified index in the queue.
66
- * @param index The index of the value to retrieve
67
- * @returns the value at the specified index, or undefined if the index is out of range.
68
- */
69
- protected _peek(index: number): T | undefined;
70
- }
1
+ /** @packageDocumentation
2
+ * @module Collections
3
+ */
4
+ import { OrderedComparator } from "./Compare";
5
+ import { CloneFunction } from "./SortedArray";
6
+ /** @public */
7
+ export declare type ComputePriorityFunction<T> = (value: T) => number;
8
+ /**
9
+ * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.
10
+ * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.
11
+ * @public
12
+ */
13
+ export declare class PriorityQueue<T> implements Iterable<T> {
14
+ protected _array: T[];
15
+ protected readonly _compare: OrderedComparator<T>;
16
+ protected readonly _clone: CloneFunction<T>;
17
+ /**
18
+ * Constructor
19
+ * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.
20
+ * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.
21
+ * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.
22
+ */
23
+ constructor(compare: OrderedComparator<T>, clone?: CloneFunction<T>);
24
+ /** The number of values in the queue. */
25
+ get length(): number;
26
+ /** Returns true if the queue contains no values. */
27
+ get isEmpty(): boolean;
28
+ /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */
29
+ [Symbol.iterator](): Iterator<T>;
30
+ protected _swap(a: number, b: number): void;
31
+ protected _heapify(index: number): void;
32
+ /**
33
+ * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.
34
+ * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.
35
+ */
36
+ sort(): void;
37
+ /**
38
+ * Pushes a value onto the queue according to the sorting criterion.
39
+ * @param value The value to insert
40
+ * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
41
+ */
42
+ push(value: T): T;
43
+ /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.
44
+ * After using this function, you must manually invoke sort() to ensure the queue is sorted again.
45
+ * @param value The value to append
46
+ * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
47
+ */
48
+ append(value: T): T;
49
+ /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */
50
+ get front(): T | undefined;
51
+ /**
52
+ * Removes the front-most element off of the queue and returns it.
53
+ * @returns The front-most element, or undefined if the queue is empty.
54
+ */
55
+ pop(): T | undefined;
56
+ /** Removes all values from the queue. */
57
+ clear(): void;
58
+ /**
59
+ * Removes the value at the specified index from the queue and reorders the queue.
60
+ * @param index The index of the value to remove
61
+ * @returns the value at the specified index, or undefined if the index is out of range.
62
+ */
63
+ protected _pop(index: number): T | undefined;
64
+ /**
65
+ * Returns the value at the specified index in the queue.
66
+ * @param index The index of the value to retrieve
67
+ * @returns the value at the specified index, or undefined if the index is out of range.
68
+ */
69
+ protected _peek(index: number): T | undefined;
70
+ }
71
71
  //# sourceMappingURL=PriorityQueue.d.ts.map
@@ -1,137 +1,137 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Collections
7
- */
8
- import { shallowClone } from "./SortedArray";
9
- /**
10
- * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.
11
- * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.
12
- * @public
13
- */
14
- export class PriorityQueue {
15
- /**
16
- * Constructor
17
- * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.
18
- * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.
19
- * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.
20
- */
21
- constructor(compare, clone = shallowClone) {
22
- this._array = [];
23
- this._compare = compare;
24
- this._clone = clone;
25
- }
26
- /** The number of values in the queue. */
27
- get length() { return this._array.length; }
28
- /** Returns true if the queue contains no values. */
29
- get isEmpty() { return 0 === this.length; }
30
- /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */
31
- [Symbol.iterator]() { return this._array[Symbol.iterator](); }
32
- _swap(a, b) {
33
- const temp = this._array[a];
34
- this._array[a] = this._array[b];
35
- this._array[b] = temp;
36
- }
37
- _heapify(index) {
38
- let candidate = -1;
39
- while (true) {
40
- const right = 2 * (index + 1);
41
- const left = right - 1;
42
- if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)
43
- candidate = left;
44
- else
45
- candidate = index;
46
- if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)
47
- candidate = right;
48
- if (candidate !== index) {
49
- this._swap(candidate, index);
50
- index = candidate;
51
- }
52
- else {
53
- break;
54
- }
55
- }
56
- }
57
- /**
58
- * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.
59
- * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.
60
- */
61
- sort() {
62
- for (let i = Math.ceil(this.length / 2); i >= 0; i--)
63
- this._heapify(i);
64
- }
65
- /**
66
- * Pushes a value onto the queue according to the sorting criterion.
67
- * @param value The value to insert
68
- * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
69
- */
70
- push(value) {
71
- const clone = this._clone(value);
72
- let index = this.length;
73
- this._array.push(clone);
74
- while (index !== 0) {
75
- const parent = Math.floor((index - 1) / 2);
76
- if (this._compare(this._array[index], this._array[parent]) < 0) {
77
- this._swap(index, parent);
78
- index = parent;
79
- }
80
- else {
81
- break;
82
- }
83
- }
84
- return clone;
85
- }
86
- /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.
87
- * After using this function, you must manually invoke sort() to ensure the queue is sorted again.
88
- * @param value The value to append
89
- * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
90
- */
91
- append(value) {
92
- const clone = this._clone(value);
93
- this._array.push(clone);
94
- return clone;
95
- }
96
- /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */
97
- get front() {
98
- return this._peek(0);
99
- }
100
- /**
101
- * Removes the front-most element off of the queue and returns it.
102
- * @returns The front-most element, or undefined if the queue is empty.
103
- */
104
- pop() {
105
- return this._pop(0);
106
- }
107
- /** Removes all values from the queue. */
108
- clear() {
109
- this._array.length = 0;
110
- }
111
- /**
112
- * Removes the value at the specified index from the queue and reorders the queue.
113
- * @param index The index of the value to remove
114
- * @returns the value at the specified index, or undefined if the index is out of range.
115
- */
116
- _pop(index) {
117
- if (index < 0 || index >= this.length)
118
- return undefined;
119
- const root = this._array[index];
120
- this._swap(index, this.length - 1);
121
- this._array.length--;
122
- this._heapify(index);
123
- return root;
124
- }
125
- /**
126
- * Returns the value at the specified index in the queue.
127
- * @param index The index of the value to retrieve
128
- * @returns the value at the specified index, or undefined if the index is out of range.
129
- */
130
- _peek(index) {
131
- if (index < 0 || index >= this.length)
132
- return undefined;
133
- else
134
- return this._array[index];
135
- }
136
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Collections
7
+ */
8
+ import { shallowClone } from "./SortedArray";
9
+ /**
10
+ * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.
11
+ * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.
12
+ * @public
13
+ */
14
+ export class PriorityQueue {
15
+ /**
16
+ * Constructor
17
+ * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.
18
+ * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.
19
+ * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.
20
+ */
21
+ constructor(compare, clone = shallowClone) {
22
+ this._array = [];
23
+ this._compare = compare;
24
+ this._clone = clone;
25
+ }
26
+ /** The number of values in the queue. */
27
+ get length() { return this._array.length; }
28
+ /** Returns true if the queue contains no values. */
29
+ get isEmpty() { return 0 === this.length; }
30
+ /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */
31
+ [Symbol.iterator]() { return this._array[Symbol.iterator](); }
32
+ _swap(a, b) {
33
+ const temp = this._array[a];
34
+ this._array[a] = this._array[b];
35
+ this._array[b] = temp;
36
+ }
37
+ _heapify(index) {
38
+ let candidate = -1;
39
+ while (true) {
40
+ const right = 2 * (index + 1);
41
+ const left = right - 1;
42
+ if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)
43
+ candidate = left;
44
+ else
45
+ candidate = index;
46
+ if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)
47
+ candidate = right;
48
+ if (candidate !== index) {
49
+ this._swap(candidate, index);
50
+ index = candidate;
51
+ }
52
+ else {
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.
59
+ * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.
60
+ */
61
+ sort() {
62
+ for (let i = Math.ceil(this.length / 2); i >= 0; i--)
63
+ this._heapify(i);
64
+ }
65
+ /**
66
+ * Pushes a value onto the queue according to the sorting criterion.
67
+ * @param value The value to insert
68
+ * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
69
+ */
70
+ push(value) {
71
+ const clone = this._clone(value);
72
+ let index = this.length;
73
+ this._array.push(clone);
74
+ while (index !== 0) {
75
+ const parent = Math.floor((index - 1) / 2);
76
+ if (this._compare(this._array[index], this._array[parent]) < 0) {
77
+ this._swap(index, parent);
78
+ index = parent;
79
+ }
80
+ else {
81
+ break;
82
+ }
83
+ }
84
+ return clone;
85
+ }
86
+ /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.
87
+ * After using this function, you must manually invoke sort() to ensure the queue is sorted again.
88
+ * @param value The value to append
89
+ * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
90
+ */
91
+ append(value) {
92
+ const clone = this._clone(value);
93
+ this._array.push(clone);
94
+ return clone;
95
+ }
96
+ /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */
97
+ get front() {
98
+ return this._peek(0);
99
+ }
100
+ /**
101
+ * Removes the front-most element off of the queue and returns it.
102
+ * @returns The front-most element, or undefined if the queue is empty.
103
+ */
104
+ pop() {
105
+ return this._pop(0);
106
+ }
107
+ /** Removes all values from the queue. */
108
+ clear() {
109
+ this._array.length = 0;
110
+ }
111
+ /**
112
+ * Removes the value at the specified index from the queue and reorders the queue.
113
+ * @param index The index of the value to remove
114
+ * @returns the value at the specified index, or undefined if the index is out of range.
115
+ */
116
+ _pop(index) {
117
+ if (index < 0 || index >= this.length)
118
+ return undefined;
119
+ const root = this._array[index];
120
+ this._swap(index, this.length - 1);
121
+ this._array.length--;
122
+ this._heapify(index);
123
+ return root;
124
+ }
125
+ /**
126
+ * Returns the value at the specified index in the queue.
127
+ * @param index The index of the value to retrieve
128
+ * @returns the value at the specified index, or undefined if the index is out of range.
129
+ */
130
+ _peek(index) {
131
+ if (index < 0 || index >= this.length)
132
+ return undefined;
133
+ else
134
+ return this._array[index];
135
+ }
136
+ }
137
137
  //# sourceMappingURL=PriorityQueue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../src/PriorityQueue.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Collections\r\n */\r\n\r\nimport { OrderedComparator } from \"./Compare\";\r\nimport { CloneFunction, shallowClone } from \"./SortedArray\";\r\n\r\n/** @public */\r\nexport type ComputePriorityFunction<T> = (value: T) => number;\r\n\r\n/**\r\n * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.\r\n * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.\r\n * @public\r\n */\r\nexport class PriorityQueue<T> implements Iterable<T> {\r\n protected _array: T[] = [];\r\n protected readonly _compare: OrderedComparator<T>;\r\n protected readonly _clone: CloneFunction<T>;\r\n\r\n /**\r\n * Constructor\r\n * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.\r\n * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.\r\n * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.\r\n */\r\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\r\n this._compare = compare;\r\n this._clone = clone;\r\n }\r\n\r\n /** The number of values in the queue. */\r\n public get length(): number { return this._array.length; }\r\n\r\n /** Returns true if the queue contains no values. */\r\n public get isEmpty(): boolean { return 0 === this.length; }\r\n\r\n /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */\r\n public [Symbol.iterator](): Iterator<T> { return this._array[Symbol.iterator](); }\r\n\r\n protected _swap(a: number, b: number) {\r\n const temp = this._array[a];\r\n this._array[a] = this._array[b];\r\n this._array[b] = temp;\r\n }\r\n\r\n protected _heapify(index: number): void {\r\n let candidate = -1;\r\n while (true) {\r\n const right = 2 * (index + 1);\r\n const left = right - 1;\r\n if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)\r\n candidate = left;\r\n else\r\n candidate = index;\r\n\r\n if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)\r\n candidate = right;\r\n\r\n if (candidate !== index) {\r\n this._swap(candidate, index);\r\n index = candidate;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.\r\n * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.\r\n */\r\n public sort(): void {\r\n for (let i = Math.ceil(this.length / 2); i >= 0; i--)\r\n this._heapify(i);\r\n }\r\n\r\n /**\r\n * Pushes a value onto the queue according to the sorting criterion.\r\n * @param value The value to insert\r\n * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\r\n */\r\n public push(value: T): T {\r\n const clone = this._clone(value);\r\n\r\n let index = this.length;\r\n this._array.push(clone);\r\n\r\n while (index !== 0) {\r\n const parent = Math.floor((index - 1) / 2);\r\n if (this._compare(this._array[index], this._array[parent]) < 0) {\r\n this._swap(index, parent);\r\n index = parent;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return clone;\r\n }\r\n\r\n /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.\r\n * After using this function, you must manually invoke sort() to ensure the queue is sorted again.\r\n * @param value The value to append\r\n * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\r\n */\r\n public append(value: T): T {\r\n const clone = this._clone(value);\r\n this._array.push(clone);\r\n return clone;\r\n }\r\n\r\n /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */\r\n public get front(): T | undefined {\r\n return this._peek(0);\r\n }\r\n\r\n /**\r\n * Removes the front-most element off of the queue and returns it.\r\n * @returns The front-most element, or undefined if the queue is empty.\r\n */\r\n public pop(): T | undefined {\r\n return this._pop(0);\r\n }\r\n\r\n /** Removes all values from the queue. */\r\n public clear(): void {\r\n this._array.length = 0;\r\n }\r\n\r\n /**\r\n * Removes the value at the specified index from the queue and reorders the queue.\r\n * @param index The index of the value to remove\r\n * @returns the value at the specified index, or undefined if the index is out of range.\r\n */\r\n protected _pop(index: number): T | undefined {\r\n if (index < 0 || index >= this.length)\r\n return undefined;\r\n\r\n const root = this._array[index];\r\n this._swap(index, this.length - 1);\r\n this._array.length--;\r\n\r\n this._heapify(index);\r\n return root;\r\n }\r\n\r\n /**\r\n * Returns the value at the specified index in the queue.\r\n * @param index The index of the value to retrieve\r\n * @returns the value at the specified index, or undefined if the index is out of range.\r\n */\r\n protected _peek(index: number): T | undefined {\r\n if (index < 0 || index >= this.length)\r\n return undefined;\r\n else\r\n return this._array[index];\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../src/PriorityQueue.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Collections\n */\n\nimport { OrderedComparator } from \"./Compare\";\nimport { CloneFunction, shallowClone } from \"./SortedArray\";\n\n/** @public */\nexport type ComputePriorityFunction<T> = (value: T) => number;\n\n/**\n * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.\n * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.\n * @public\n */\nexport class PriorityQueue<T> implements Iterable<T> {\n protected _array: T[] = [];\n protected readonly _compare: OrderedComparator<T>;\n protected readonly _clone: CloneFunction<T>;\n\n /**\n * Constructor\n * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.\n * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.\n * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.\n */\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\n this._compare = compare;\n this._clone = clone;\n }\n\n /** The number of values in the queue. */\n public get length(): number { return this._array.length; }\n\n /** Returns true if the queue contains no values. */\n public get isEmpty(): boolean { return 0 === this.length; }\n\n /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */\n public [Symbol.iterator](): Iterator<T> { return this._array[Symbol.iterator](); }\n\n protected _swap(a: number, b: number) {\n const temp = this._array[a];\n this._array[a] = this._array[b];\n this._array[b] = temp;\n }\n\n protected _heapify(index: number): void {\n let candidate = -1;\n while (true) {\n const right = 2 * (index + 1);\n const left = right - 1;\n if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)\n candidate = left;\n else\n candidate = index;\n\n if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)\n candidate = right;\n\n if (candidate !== index) {\n this._swap(candidate, index);\n index = candidate;\n } else {\n break;\n }\n }\n }\n\n /**\n * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.\n * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.\n */\n public sort(): void {\n for (let i = Math.ceil(this.length / 2); i >= 0; i--)\n this._heapify(i);\n }\n\n /**\n * Pushes a value onto the queue according to the sorting criterion.\n * @param value The value to insert\n * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\n */\n public push(value: T): T {\n const clone = this._clone(value);\n\n let index = this.length;\n this._array.push(clone);\n\n while (index !== 0) {\n const parent = Math.floor((index - 1) / 2);\n if (this._compare(this._array[index], this._array[parent]) < 0) {\n this._swap(index, parent);\n index = parent;\n } else {\n break;\n }\n }\n\n return clone;\n }\n\n /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.\n * After using this function, you must manually invoke sort() to ensure the queue is sorted again.\n * @param value The value to append\n * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\n */\n public append(value: T): T {\n const clone = this._clone(value);\n this._array.push(clone);\n return clone;\n }\n\n /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */\n public get front(): T | undefined {\n return this._peek(0);\n }\n\n /**\n * Removes the front-most element off of the queue and returns it.\n * @returns The front-most element, or undefined if the queue is empty.\n */\n public pop(): T | undefined {\n return this._pop(0);\n }\n\n /** Removes all values from the queue. */\n public clear(): void {\n this._array.length = 0;\n }\n\n /**\n * Removes the value at the specified index from the queue and reorders the queue.\n * @param index The index of the value to remove\n * @returns the value at the specified index, or undefined if the index is out of range.\n */\n protected _pop(index: number): T | undefined {\n if (index < 0 || index >= this.length)\n return undefined;\n\n const root = this._array[index];\n this._swap(index, this.length - 1);\n this._array.length--;\n\n this._heapify(index);\n return root;\n }\n\n /**\n * Returns the value at the specified index in the queue.\n * @param index The index of the value to retrieve\n * @returns the value at the specified index, or undefined if the index is out of range.\n */\n protected _peek(index: number): T | undefined {\n if (index < 0 || index >= this.length)\n return undefined;\n else\n return this._array[index];\n }\n}\n"]}