--- old/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template 2019-02-08 14:19:27.000000000 -0800 +++ new/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template 2019-02-08 14:19:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2019, 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 @@ -38,6 +38,8 @@ #end[rw] */ +import java.util.Objects; + class Heap$Type$Buffer$RW$ extends {#if[ro]?Heap}$Type$Buffer { @@ -181,6 +183,14 @@ return this; } + public $Type$Buffer get(int index, $type$[] dst, int offset, int length) { + //System.out.println("Heap absolute bulk get"); + Objects.checkFromIndexSize(index, length, limit()); + Objects.checkFromIndexSize(offset, length, dst.length); + System.arraycopy(hb, ix(index), dst, offset, length); + return this; + } + public boolean isDirect() { return false; } @@ -250,6 +260,45 @@ #end[rw] } + public $Type$Buffer put(int index, $type$[] src, int offset, int length) { + //System.out.println("Heap absolute bulk put array"); +#if[rw] + Objects.checkFromIndexSize(index, length, limit()); + Objects.checkFromIndexSize(offset, length, src.length); + System.arraycopy(src, offset, hb, ix(index), length); + return this; +#else[rw] + throw new ReadOnlyBufferException(); +#end[rw] + } + + public $Type$Buffer put(int index, $Type$Buffer src, int offset, + int length) { + //System.out.println("Heap absolute bulk put buffer"); +#if[rw] + if (src instanceof Heap$Type$Buffer) { + if (index < 0) + throw new IndexOutOfBoundsException("Index negative: " + index); + Heap$Type$Buffer sb = (Heap$Type$Buffer)src; + Objects.checkFromIndexSize(index, length, limit()); + Objects.checkFromIndexSize(offset, length, sb.limit()); + System.arraycopy(sb.hb, sb.ix(offset), + hb, ix(index), length); + } else if (src.isDirect()) { + if (index < 0) + throw new IndexOutOfBoundsException("Index negative: " + index); + Objects.checkFromIndexSize(index, length, limit()); + Objects.checkFromIndexSize(offset, length, src.limit()); + src.get(offset, hb, ix(index), length); + } else { + super.put(index, src, offset, length); + } + return this; +#else[rw] + throw new ReadOnlyBufferException(); +#end[rw] + } + public $Type$Buffer compact() { #if[rw] System.arraycopy(hb, ix(position()), hb, ix(0), remaining());