mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8265029: Preserve SIZED characteristics on slice operations (skip, limit)
Reviewed-by: psandoz
This commit is contained in:
parent
95b1fa7a88
commit
0c9daa7ed5
12 changed files with 704 additions and 89 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -252,16 +252,18 @@ final class ReduceOps {
|
|||
@Override
|
||||
public <P_IN> Long evaluateSequential(PipelineHelper<T> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateSequential(helper, spliterator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <P_IN> Long evaluateParallel(PipelineHelper<T> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateParallel(helper, spliterator);
|
||||
}
|
||||
|
||||
|
@ -426,16 +428,18 @@ final class ReduceOps {
|
|||
@Override
|
||||
public <P_IN> Long evaluateSequential(PipelineHelper<Integer> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateSequential(helper, spliterator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <P_IN> Long evaluateParallel(PipelineHelper<Integer> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateParallel(helper, spliterator);
|
||||
}
|
||||
|
||||
|
@ -600,16 +604,18 @@ final class ReduceOps {
|
|||
@Override
|
||||
public <P_IN> Long evaluateSequential(PipelineHelper<Long> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateSequential(helper, spliterator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <P_IN> Long evaluateParallel(PipelineHelper<Long> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateParallel(helper, spliterator);
|
||||
}
|
||||
|
||||
|
@ -774,16 +780,18 @@ final class ReduceOps {
|
|||
@Override
|
||||
public <P_IN> Long evaluateSequential(PipelineHelper<Double> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateSequential(helper, spliterator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <P_IN> Long evaluateParallel(PipelineHelper<Double> helper,
|
||||
Spliterator<P_IN> spliterator) {
|
||||
if (StreamOpFlag.SIZED.isKnown(helper.getStreamAndOpFlags()))
|
||||
return spliterator.getExactSizeIfKnown();
|
||||
long size = helper.exactOutputSizeIfKnown(spliterator);
|
||||
if (size != -1)
|
||||
return size;
|
||||
return super.evaluateParallel(helper, spliterator);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue