1 |
|
/* |
2 |
< |
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. |
2 |
> |
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. |
3 |
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
|
* |
5 |
|
* This code is free software; you can redistribute it and/or modify it |
27 |
|
|
28 |
|
import java.util.function.Consumer; |
29 |
|
import java.util.function.Predicate; |
30 |
< |
import jdk.internal.misc.SharedSecrets; |
30 |
> |
// OPENJDK import jdk.internal.access.SharedSecrets; |
31 |
> |
import jdk.internal.util.ArraysSupport; |
32 |
|
|
33 |
|
/** |
34 |
|
* An unbounded priority {@linkplain Queue queue} based on a priority heap. |
76 |
|
* ({@code peek}, {@code element}, and {@code size}). |
77 |
|
* |
78 |
|
* <p>This class is a member of the |
79 |
< |
* <a href="{@docRoot}/java/util/package-summary.html#CollectionsFramework"> |
79 |
> |
* <a href="{@docRoot}/java.base/java/util/package-summary.html#CollectionsFramework"> |
80 |
|
* Java Collections Framework</a>. |
81 |
|
* |
82 |
|
* @since 1.5 |
283 |
|
} |
284 |
|
|
285 |
|
/** |
285 |
– |
* The maximum size of array to allocate. |
286 |
– |
* Some VMs reserve some header words in an array. |
287 |
– |
* Attempts to allocate larger arrays may result in |
288 |
– |
* OutOfMemoryError: Requested array size exceeds VM limit |
289 |
– |
*/ |
290 |
– |
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; |
291 |
– |
|
292 |
– |
/** |
286 |
|
* Increases the capacity of the array. |
287 |
|
* |
288 |
|
* @param minCapacity the desired minimum capacity |
290 |
|
private void grow(int minCapacity) { |
291 |
|
int oldCapacity = queue.length; |
292 |
|
// Double size if small; else grow by 50% |
293 |
< |
int newCapacity = oldCapacity + ((oldCapacity < 64) ? |
294 |
< |
(oldCapacity + 2) : |
295 |
< |
(oldCapacity >> 1)); |
296 |
< |
// overflow-conscious code |
304 |
< |
if (newCapacity - MAX_ARRAY_SIZE > 0) |
305 |
< |
newCapacity = hugeCapacity(minCapacity); |
293 |
> |
int newCapacity = ArraysSupport.newLength(oldCapacity, |
294 |
> |
minCapacity - oldCapacity, /* minimum growth */ |
295 |
> |
oldCapacity < 64 ? oldCapacity + 2 : oldCapacity >> 1 |
296 |
> |
/* preferred growth */); |
297 |
|
queue = Arrays.copyOf(queue, newCapacity); |
298 |
|
} |
299 |
|
|
309 |
– |
private static int hugeCapacity(int minCapacity) { |
310 |
– |
if (minCapacity < 0) // overflow |
311 |
– |
throw new OutOfMemoryError(); |
312 |
– |
return (minCapacity > MAX_ARRAY_SIZE) ? |
313 |
– |
Integer.MAX_VALUE : |
314 |
– |
MAX_ARRAY_SIZE; |
315 |
– |
} |
316 |
– |
|
300 |
|
/** |
301 |
|
* Inserts the specified element into this priority queue. |
302 |
|
* |
786 |
|
// Read in (and discard) array length |
787 |
|
s.readInt(); |
788 |
|
|
789 |
< |
SharedSecrets.getJavaObjectInputStreamAccess().checkArray(s, Object[].class, size); |
789 |
> |
jsr166.Platform.checkArray(s, Object[].class, size); |
790 |
|
final Object[] es = queue = new Object[Math.max(size, 1)]; |
791 |
|
|
792 |
|
// Read in all elements. |