1dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/* 22c87ad3a45cecf9e344487cad1abfdebe79f2c7cNarayan Kamath * Copyright (C) 2014 The Android Open Source Project 3dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. 4dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 6dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 7dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 8dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 9dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 10dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 11dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 12dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 13dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 16dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * accompanied this code). 17dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 18dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 19dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 20dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 21dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 22dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 23dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 24dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * questions. 25dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 26dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskipackage java.nio; 29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 30dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 31f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmeraimport libcore.io.Memory; 32f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 33dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/** 34dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * A read/write HeapByteBuffer. 35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 373781c9c932ef4560c78949d855073566aa91e402Shubham Ajmeraclass HeapByteBuffer extends ByteBuffer { 38dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 39dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For speed these fields are actually declared in X-Buffer; 40dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // these declarations are here as documentation 41dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski /* 42dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 43069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera protected final byte[] hb; 44069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera protected final int offset; 45dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 46dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 47dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 483781c9c932ef4560c78949d855073566aa91e402Shubham Ajmera HeapByteBuffer(int cap, int lim) { // packag-private 49069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this(cap, lim, false); 50069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 51dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 52dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 53069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera HeapByteBuffer(int cap, int lim, boolean isReadOnly) { // package-private 54069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera super(-1, 0, lim, cap, new byte[cap], 0); 55069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.isReadOnly = isReadOnly; 56dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 57dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski HeapByteBuffer(byte[] buf, int off, int len) { // package-private 59069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this(buf, off, len, false); 60069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 61dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 62069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera HeapByteBuffer(byte[] buf, int off, int len, boolean isReadOnly) { // package-private 63dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, off, off + len, buf.length, buf, 0); 64069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.isReadOnly = isReadOnly; 65dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 66dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 67dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected HeapByteBuffer(byte[] buf, 68069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int mark, int pos, int lim, int cap, 69069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int off) { 70069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this(buf, mark, pos, lim, cap, off, false); 71069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 72dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 73069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera protected HeapByteBuffer(byte[] buf, 74069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int mark, int pos, int lim, int cap, 75069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera int off, boolean isReadOnly) { 76dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(mark, pos, lim, cap, buf, off); 77069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera this.isReadOnly = isReadOnly; 78dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 79dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 80dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer slice() { 81dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new HeapByteBuffer(hb, 82190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 83190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 84190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera remaining(), 85190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera remaining(), 86190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera position() + offset, 87190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera isReadOnly); 88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 89dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 90dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer duplicate() { 91dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new HeapByteBuffer(hb, 92190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera markValue(), 93190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera position(), 94190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera limit(), 95190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera capacity(), 96190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera offset, 97190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera isReadOnly); 98dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 99dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 100dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer asReadOnlyBuffer() { 101069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera return new HeapByteBuffer(hb, 102190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.markValue(), 103190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.position(), 104190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.limit(), 105190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.capacity(), 106190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera offset, true); 107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected int ix(int i) { 110dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return i + offset; 111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 113dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get() { 114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return hb[ix(nextGetIndex())]; 115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 116dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 117dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get(int i) { 118dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return hb[ix(checkIndex(i))]; 119dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 120dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 121dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer get(byte[] dst, int offset, int length) { 122dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski checkBounds(offset, length, dst.length); 123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (length > remaining()) 124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferUnderflowException(); 125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(hb, ix(position()), dst, offset, length); 126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(position() + length); 127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isDirect() { 131dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return false; 132dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isReadOnly() { 135069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera return isReadOnly; 136dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 137dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 138dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte x) { 139069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 140069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 141069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 142dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb[ix(nextPutIndex())] = x; 143dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 144dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 145dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 146dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(int i, byte x) { 147069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 148069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 149069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 150dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb[ix(checkIndex(i))] = x; 151dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 152dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 153dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 154dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte[] src, int offset, int length) { 155069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 156069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 157069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 158dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski checkBounds(offset, length, src.length); 159dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (length > remaining()) 160dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferOverflowException(); 161dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(src, offset, hb, ix(position()), length); 162dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(position() + length); 163dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 164dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 165dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 166dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer compact() { 167069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 168069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 169069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski System.arraycopy(hb, ix(position()), hb, ix(0), remaining()); 171dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(remaining()); 172dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski limit(capacity()); 173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski discardMark(); 174dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 175dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 176dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 177dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski byte _get(int i) { // package-private 178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return hb[i]; 179dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 180dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 181dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski void _put(int i, byte b) { // package-private 182069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 183069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 184069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 185dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski hb[i] = b; 186dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 187dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 188dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar() { 189dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian); 190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 191dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 192dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar(int i) { 193dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian); 194dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 195dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 196e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera char getCharUnchecked(int i) { 197e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return Bits.getChar(this, ix(i), bigEndian); 198e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 199e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 200f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, char[] dst, int dstOffset, int length) { 201190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkGet(dst, dstOffset, length * 2, hb, ix(pos), 2, !nativeByteOrder); 202f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 203f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(char x) { 205069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 206069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 207069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 208dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian); 209dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 210dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 211dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 212dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(int i, char x) { 213069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 214069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 215069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 216dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian); 217dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 220e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putCharUnchecked(int i, char x) { 221e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera Bits.putChar(this, ix(i), x, bigEndian); 222e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 223e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 224f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, char[] src, int srcOffset, int length) { 225190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkPut(hb, ix(pos), length * 2, src, srcOffset, 2, !nativeByteOrder); 226f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 227f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 228dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public CharBuffer asCharBuffer() { 229dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 1; 230d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 231190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return (CharBuffer) (new ByteBufferAsCharBuffer(this, 232190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 233190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 234190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 235190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 236190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 237190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera order())); 238dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 239dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 240dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort() { 241dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian); 242dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 243dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 244dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort(int i) { 245dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian); 246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 247dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 248e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera short getShortUnchecked(int i) { 249e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return Bits.getShort(this, ix(i), bigEndian); 250e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 251e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 252f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, short[] dst, int dstOffset, int length) { 253190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkGet(dst, dstOffset, length * 2, hb, ix(pos), 2, !nativeByteOrder); 254f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 255f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 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 272e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putShortUnchecked(int i, short x) { 273e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera Bits.putShort(this, ix(i), x, bigEndian); 274e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 275e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 276f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, short[] src, int srcOffset, int length) { 277190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkPut(hb, ix(pos), length * 2, src, srcOffset, 2, !nativeByteOrder); 278f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 279f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 280dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ShortBuffer asShortBuffer() { 281dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 1; 282d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 283490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera return new ByteBufferAsShortBuffer(this, 284190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 285190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 286190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 287190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 288190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 289190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera order()); 290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt() { 293dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian); 294dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 295dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt(int i) { 297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian); 298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 300e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera int getIntUnchecked(int i) { 301e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return Bits.getInt(this, ix(i), bigEndian); 302e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 303e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 304f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, int[] dst, int dstOffset, int length) { 305190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkGet(dst, dstOffset, length * 4, hb, ix(pos), 4, !nativeByteOrder); 306f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 307f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int x) { 309069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 310069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 311069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 312dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian); 313dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 314dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 315dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 316dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int i, int x) { 317069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 318069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 319069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian); 321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 322dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 323dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 324e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putIntUnchecked(int i, int x) { 325e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera Bits.putInt(this, ix(i), x, bigEndian); 326e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 327e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 328f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, int[] src, int srcOffset, int length) { 329190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkPut(hb, ix(pos), length * 4, src, srcOffset, 4, !nativeByteOrder); 330f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 331f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 332dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public IntBuffer asIntBuffer() { 333dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 2; 334d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 335dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 336190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return (IntBuffer) (new ByteBufferAsIntBuffer(this, 337190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 338190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 339190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 340190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 341190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 342190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera order())); 343069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 344dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 345dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong() { 346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian); 347dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 348dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 349dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong(int i) { 350dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian); 351dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 352dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 353e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera long getLongUnchecked(int i) { 354e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return Bits.getLong(this, ix(i), bigEndian); 355e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 356e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 357f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, long[] dst, int dstOffset, int length) { 358190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkGet(dst, dstOffset, length * 8, hb, ix(pos), 8, !nativeByteOrder); 359f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 360f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 361dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(long x) { 362069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 363069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 364069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 365dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian); 366dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 367dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 368dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 369dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(int i, long x) { 370069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 371069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 372069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 373dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian); 374dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 375dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 376dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 377e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putLongUnchecked(int i, long x) { 378e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera Bits.putLong(this, ix(i), x, bigEndian); 379f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 380f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 381f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, long[] src, int srcOffset, int length) { 382190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkPut(hb, ix(pos), length * 8, src, srcOffset, 8, !nativeByteOrder); 383f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 384e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 385dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public LongBuffer asLongBuffer() { 386dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 3; 387d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 388190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return (LongBuffer) (new ByteBufferAsLongBuffer(this, 389190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 390190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 391190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 392190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 393190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 394190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera order())); 395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat() { 398dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian); 399dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 400dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 401dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat(int i) { 402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian); 403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 404dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 405e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera float getFloatUnchecked(int i) { 406e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return Bits.getFloat(this, ix(i), bigEndian); 407e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 408dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 409f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, float[] dst, int dstOffset, int length) { 410190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkGet(dst, dstOffset, length * 4, hb, ix(pos), 4, !nativeByteOrder); 411f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 412f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 413dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(float x) { 414069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 415069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 416069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian); 418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 421dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(int i, float x) { 422069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 423069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 424069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 425dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian); 426dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 427dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 428dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 429e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putFloatUnchecked(int i, float x) { 430e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera Bits.putFloat(this, ix(i), x, bigEndian); 431e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 432e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 433f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, float[] src, int srcOffset, int length) { 434190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkPut(hb, ix(pos), length * 4, src, srcOffset, 4, !nativeByteOrder); 435f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 436f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 437dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public FloatBuffer asFloatBuffer() { 438dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 2; 439d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 440190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return (FloatBuffer) (new ByteBufferAsFloatBuffer(this, 441190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 442190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 443190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 444190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 445190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 446190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera order())); 447dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 448dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 449dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble() { 450dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian); 451dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 452dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 453dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble(int i) { 454dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian); 455dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 456dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 457e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera double getDoubleUnchecked(int i) { 458e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return Bits.getDouble(this, ix(i), bigEndian); 459e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 460dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 461f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, double[] dst, int dstOffset, int length) { 462190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkGet(dst, dstOffset, length * 8, hb, ix(pos), 8, !nativeByteOrder); 463f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 464f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 465dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(double x) { 466069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 467069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 468069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 469dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian); 470dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 471dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 472dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 473dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(int i, double x) { 474069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera if (isReadOnly) { 475069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera throw new ReadOnlyBufferException(); 476069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera } 477dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian); 478dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 479dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 480dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 481e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putDoubleUnchecked(int i, double x) { 482e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera Bits.putDouble(this, ix(i), x, bigEndian); 483e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 484e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 485f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, double[] src, int srcOffset, int length) { 486190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera Memory.unsafeBulkPut(hb, ix(pos), length * 8, src, srcOffset, 8, !nativeByteOrder); 487f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 488f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 489dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public DoubleBuffer asDoubleBuffer() { 490dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = this.remaining() >> 3; 491d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera int off = position(); 492190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return (DoubleBuffer) (new ByteBufferAsDoubleBuffer(this, 493190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 494190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 495190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 496190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 497190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 498190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera order())); 499dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 500dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski} 501