@@ -5016,6 +5016,22 @@ reduces them without incurring seq initialization"
5016
5016
(unchecked-array-for v i))
5017
5017
v start end)))
5018
5018
5019
+ (defn- pv-reduce
5020
+ ([pv f start end]
5021
+ (if (< start end)
5022
+ (pv-reduce pv f (nth pv start) (inc start) end)
5023
+ (f )))
5024
+ ([pv f init start end]
5025
+ (loop [acc init i start arr (unchecked-array-for pv start)]
5026
+ (if (< i end)
5027
+ (let [j (bit-and i 0x01f )
5028
+ arr (if (zero? j) (unchecked-array-for pv i) arr)
5029
+ nacc (f acc (aget arr j))]
5030
+ (if (reduced? nacc)
5031
+ @nacc
5032
+ (recur nacc (inc i) arr)))
5033
+ acc))))
5034
+
5019
5035
(declare tv-editable-root tv-editable-tail TransientVector deref
5020
5036
pr-sequential-writer pr-writer chunked-seq )
5021
5037
@@ -5162,7 +5178,7 @@ reduces them without incurring seq initialization"
5162
5178
5163
5179
IReduce
5164
5180
(-reduce [v f]
5165
- (ci -reduce v f))
5181
+ (pv -reduce v f 0 cnt ))
5166
5182
(-reduce [v f init]
5167
5183
(loop [i 0 init init]
5168
5184
(if (< i cnt)
@@ -5334,10 +5350,10 @@ reduces them without incurring seq initialization"
5334
5350
5335
5351
IReduce
5336
5352
(-reduce [coll f]
5337
- (ci -reduce ( subvec vec (+ i off) (count vec)) f ))
5353
+ (pv -reduce vec f (+ i off) (count vec)))
5338
5354
5339
5355
(-reduce [coll f start]
5340
- (ci -reduce ( subvec vec (+ i off) (count vec)) f start )))
5356
+ (pv -reduce vec f start (+ i off) (count vec))))
5341
5357
5342
5358
(es6-iterable ChunkedSeq)
5343
5359
@@ -5447,9 +5463,9 @@ reduces them without incurring seq initialization"
5447
5463
5448
5464
IReduce
5449
5465
(-reduce [coll f]
5450
- (ci -reduce coll f ))
5451
- (-reduce [coll f start ]
5452
- (ci -reduce coll f start))
5466
+ (pv -reduce v f start end ))
5467
+ (-reduce [coll f init ]
5468
+ (pv -reduce v f init start end ))
5453
5469
5454
5470
IKVReduce
5455
5471
(-kv-reduce [coll f init]
0 commit comments