< prev index next >

src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2000, 2016, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 36,45 **** --- 36,47 ---- * ReadOnlyBufferException} and overriding the view-buffer methods to return an * instance of this class rather than of the superclass. #end[rw] */ + import java.util.Objects; + class Heap$Type$Buffer$RW$ extends {#if[ro]?Heap}$Type$Buffer { // Cached array base offset private static final long ARRAY_BASE_OFFSET = UNSAFE.arrayBaseOffset($type$[].class);
*** 179,188 **** --- 181,198 ---- System.arraycopy(hb, ix(position()), dst, offset, length); position(position() + length); 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; } #end[rw]
*** 248,257 **** --- 258,306 ---- #else[rw] throw new ReadOnlyBufferException(); #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()); position(remaining()); limit(capacity());
< prev index next >