From 2949a4ed05a5b2740d02b2cf49d9dedbffb1806b Mon Sep 17 00:00:00 2001 From: robm Date: Mon, 30 Mar 2020 05:13:42 +0100 Subject: [PATCH] 8234841: Enhance buffering of byte buffers Reviewed-by: alanb, ahgross, rhalade, psandoz --- .../classes/java/nio/ByteBufferAs-X-Buffer.java.template | 1 - src/share/classes/java/nio/Direct-X-Buffer.java.template | 1 - src/share/classes/java/nio/Heap-X-Buffer.java.template | 6 ++++-- src/share/classes/java/nio/StringCharBuffer.java | 9 ++++++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template b/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template index bae622550..810b0f4b7 100644 --- a/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template +++ b/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template @@ -72,7 +72,6 @@ class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private public $Type$Buffer slice() { int pos = this.position(); int lim = this.limit(); - assert (pos <= lim); int rem = (pos <= lim ? lim - pos : 0); int off = (pos << $LG_BYTES_PER_VALUE$) + offset; assert (off >= 0); diff --git a/src/share/classes/java/nio/Direct-X-Buffer.java.template b/src/share/classes/java/nio/Direct-X-Buffer.java.template index e9f6d9fd0..fd7af812c 100644 --- a/src/share/classes/java/nio/Direct-X-Buffer.java.template +++ b/src/share/classes/java/nio/Direct-X-Buffer.java.template @@ -206,7 +206,6 @@ class Direct$Type$Buffer$RW$$BO$ public $Type$Buffer slice() { int pos = this.position(); int lim = this.limit(); - assert (pos <= lim); int rem = (pos <= lim ? lim - pos : 0); int off = (pos << $LG_BYTES_PER_VALUE$); assert (off >= 0); diff --git a/src/share/classes/java/nio/Heap-X-Buffer.java.template b/src/share/classes/java/nio/Heap-X-Buffer.java.template index d25cb499c..1b327277f 100644 --- a/src/share/classes/java/nio/Heap-X-Buffer.java.template +++ b/src/share/classes/java/nio/Heap-X-Buffer.java.template @@ -95,13 +95,15 @@ class Heap$Type$Buffer$RW$ } public $Type$Buffer slice() { - int rem = this.remaining(); + int pos = this.position(); + int lim = this.limit(); + int rem = (pos <= lim ? lim - pos : 0); return new Heap$Type$Buffer$RW$(hb, -1, 0, rem, rem, - this.position() + offset); + pos + offset); } public $Type$Buffer duplicate() { diff --git a/src/share/classes/java/nio/StringCharBuffer.java b/src/share/classes/java/nio/StringCharBuffer.java index 0c20fa669..a8f07f1ce 100644 --- a/src/share/classes/java/nio/StringCharBuffer.java +++ b/src/share/classes/java/nio/StringCharBuffer.java @@ -42,12 +42,15 @@ class StringCharBuffer // package-private } public CharBuffer slice() { + int pos = this.position(); + int lim = this.limit(); + int rem = (pos <= lim ? lim - pos : 0); return new StringCharBuffer(str, -1, 0, - this.remaining(), - this.remaining(), - offset + this.position()); + rem, + rem, + offset + pos); } private StringCharBuffer(CharSequence s, -- GitLab