HeapByteBuffer.java revision d80eadc041c833c2808beb823f4edb90ff7410f7
1dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/* 2dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. 3dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 5dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 6dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 7dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 8dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 9dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 10dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 11dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 12dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 15dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * accompanied this code). 16dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 17dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 18dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 19dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 21dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 23dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * questions. 24dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 25dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 26dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskipackage java.nio; 28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 30dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/** 31dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * A read/write HeapByteBuffer. 32dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 33dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 343781c9c932ef4560c78949d855073566aa91e402Shubham Ajmeraclass HeapByteBuffer extends ByteBuffer { 35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For speed these fields are actually declared in X-Buffer; 37dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // these declarations are here as documentation 38dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski /* 39dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 40069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera protected final byte[] hb; 41069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera protected final int offset; 42dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 43dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 44dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 453781c9c932ef4560c78949d855073566aa91e402Shubham Ajmera HeapByteBuffer(int cap, int lim) { // packag-private 46069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this(cap, lim, false); 47069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 48dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 49dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 50069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera HeapByteBuffer(int cap, int lim, boolean isReadOnly) { // package-private 51069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera super(-1, 0, lim, cap, new byte[cap], 0); 52069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.isReadOnly = isReadOnly; 53dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 54dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 55dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski HeapByteBuffer(byte[] buf, int off, int len) { // package-private 56069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this(buf, off, len, false); 57069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 59069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera HeapByteBuffer(byte[] buf, int off, int len, boolean isReadOnly) { // package-private 60dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, off, off + len, buf.length, buf, 0); 61069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.isReadOnly = isReadOnly; 62dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 63dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 64dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected HeapByteBuffer(byte[] buf, 65069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int mark, int pos, int lim, int cap, 66069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int off) { 67069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this(buf, mark, pos, lim, cap, off, false); 68069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 69dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 70069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera protected HeapByteBuffer(byte[] buf, 71069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int mark, int pos, int lim, int cap, 72069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int off, boolean isReadOnly) { 73dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(mark, pos, lim, cap, buf, off); 74069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.isReadOnly = isReadOnly; 75dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 76dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 77dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer slice() { 78dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new HeapByteBuffer(hb, 79069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera -1, 80069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera 0, 81d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera remaining(), 82d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera remaining(), 83d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera position() + offset, 84d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera isReadOnly); 85dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 86dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 87dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer duplicate() { 88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new HeapByteBuffer(hb, 89d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera markValue(), 90d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera position(), 91d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera limit(), 92d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera capacity(), 93d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera offset, 94d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera isReadOnly); 95dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 96dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 97dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer asReadOnlyBuffer() { 98069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera return new HeapByteBuffer(hb, 99069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.markValue(), 100069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.position(), 101069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.limit(), 102069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.capacity(), 103069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera offset, true); 104dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 105dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 106dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected int ix(int i) { 107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return i + offset; 108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 110dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get() { 111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return hb[ix(nextGetIndex())]; 112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 113dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get(int i) { 115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return hb[ix(checkIndex(i))]; 116dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 117dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 118dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer get(byte[] dst, int offset, int length) { 119dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski checkBounds(offset, length, dst.length); 120dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (length > remaining()) 121dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferUnderflowException(); 122dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(hb, ix(position()), dst, offset, length); 123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(position() + length); 124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isDirect() { 128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return false; 129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 131dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isReadOnly() { 132069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera return isReadOnly; 133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 135dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte x) { 136069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 137069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 138069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 139dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb[ix(nextPutIndex())] = x; 140dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 141dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 142dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 143dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(int i, byte x) { 144069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 145069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 146069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 147dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb[ix(checkIndex(i))] = x; 148dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 149dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 150dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 151dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte[] src, int offset, int length) { 152069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 153069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 154069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 155dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski checkBounds(offset, length, src.length); 156dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (length > remaining()) 157dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferOverflowException(); 158dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(src, offset, hb, ix(position()), length); 159dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(position() + length); 160dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 161dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 162dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 163dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(ByteBuffer src) { 164069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 165069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 166069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 167dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (src instanceof HeapByteBuffer) { 168dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (src == this) 169dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new IllegalArgumentException(); 170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski HeapByteBuffer sb = (HeapByteBuffer)src; 171dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int n = sb.remaining(); 172dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (n > remaining()) 173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferOverflowException(); 174dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(sb.hb, sb.ix(sb.position()), 175dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb, ix(position()), n); 176dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski sb.position(sb.position() + n); 177dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(position() + n); 178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else if (src.isDirect()) { 179dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int n = src.remaining(); 180dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (n > remaining()) 181dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferOverflowException(); 182dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski src.get(hb, ix(position()), n); 183dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(position() + n); 184dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 185dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super.put(src); 186dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 187dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 188dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 189dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer compact() { 191069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 192069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 193069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 194dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(hb, ix(position()), hb, ix(0), remaining()); 195dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(remaining()); 196dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski limit(capacity()); 197dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski discardMark(); 198dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 199dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 200dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 201dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski byte _get(int i) { // package-private 202dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return hb[i]; 203dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 205dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski void _put(int i, byte b) { // package-private 206069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 207069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 208069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 209dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb[i] = b; 210dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 211dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 212dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar() { 213dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian); 214dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 215dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 216dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar(int i) { 217dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian); 218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 220dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(char x) { 221069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 222069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 223069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 224dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian); 225dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 226dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 227dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 228dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(int i, char x) { 229069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 230069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 231069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 232dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian); 233dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 234dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 235dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 236dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public CharBuffer asCharBuffer() { 237dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 1; 238d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 239622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera return (CharBuffer)(new ByteBufferAsCharBuffer(this, 240622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera -1, 241622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera 0, 242622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera size, 243622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera size, 244622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera off, 24546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 247dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 248dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort() { 249dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian); 250dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 251dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 252dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort(int i) { 253dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian); 254dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 255dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 256dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putShort(short x) { 257069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 258069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 259069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 260dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putShort(this, ix(nextPutIndex(2)), x, bigEndian); 261dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 262dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 263dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 264dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putShort(int i, short x) { 265069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 266069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 267069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 268dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putShort(this, ix(checkIndex(i, 2)), x, bigEndian); 269dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 270dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 271dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 272dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ShortBuffer asShortBuffer() { 273dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 1; 274d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 275490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera return new ByteBufferAsShortBuffer(this, 276490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera -1, 277490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera 0, 278490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera size, 279490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera size, 280490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera off, 28146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order()); 282dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 283dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 284dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt() { 285dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian); 286dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 287dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 288dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt(int i) { 289dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian); 290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int x) { 293069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 294069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 295069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian); 297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 300dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int i, int x) { 301069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 302069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 303069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 304dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian); 305dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 306dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 307dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public IntBuffer asIntBuffer() { 309dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 2; 310d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 311dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 3123781c9c932ef4560c78949d855073566aa91e402Shubham Ajmera return (IntBuffer)(new ByteBufferAsIntBuffer(this, 313490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera -1, 314490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera 0, 315490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera size, 316490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera size, 317490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera off, 31846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 319069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong() { 322dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian); 323dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 324dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 325dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong(int i) { 326dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian); 327dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 328dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 329dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(long x) { 330069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 331069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 332069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 333dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian); 334dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 335dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 336dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 337dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(int i, long x) { 338069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 339069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 340069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 341dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian); 342dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 343dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 344dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 345dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public LongBuffer asLongBuffer() { 346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 3; 347d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 348cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera return (LongBuffer)(new ByteBufferAsLongBuffer(this, 349cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera -1, 350cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera 0, 351cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera size, 352cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera size, 353cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera off, 35446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 355dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 356dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 357dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat() { 358dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian); 359dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 360dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 361dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat(int i) { 362dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian); 363dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 364dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 365dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 366dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 367dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(float x) { 368069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 369069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 370069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 371dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian); 372dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 373dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 374dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 375dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(int i, float x) { 376069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 377069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 378069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 379dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian); 380dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 381dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 382dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 383dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public FloatBuffer asFloatBuffer() { 384dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 2; 385d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 38634dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera return (FloatBuffer)(new ByteBufferAsFloatBuffer(this, 38734dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera -1, 38834dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera 0, 38934dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera size, 39034dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera size, 39134dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera off, 39246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 393dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 394dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble() { 396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian); 397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 398dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 399dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble(int i) { 400dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian); 401dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 404dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 405dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(double x) { 406069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 407069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 408069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 409dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian); 410dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 411dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 412dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 413dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(int i, double x) { 414069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 415069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 416069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian); 418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 421dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public DoubleBuffer asDoubleBuffer() { 422dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 3; 423d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 42446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (DoubleBuffer)(new ByteBufferAsDoubleBuffer(this, 42546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 42646edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 42746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 42846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 42946edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 43046edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 431dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 432dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski} 433