DirectByteBuffer.java revision 1817e4d9ef742ceebb2d6a04d624c086686b42ba
1dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/* 2dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Copyright (c) 2000, 2011, 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 Jastrzebskipackage java.nio; 27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport java.io.FileDescriptor; 29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.misc.Cleaner; 30dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.misc.VM; 31dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.nio.ch.DirectBuffer; 32fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmeraimport libcore.io.SizeOf; 33fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmeraimport libcore.io.Memory; 34dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 35fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmeraclass DirectByteBuffer extends MappedByteBuffer 36fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera implements DirectBuffer { 37dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 38f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera private boolean isAccessible = true; 39d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera 40dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Base address, used in all indexing calculations 41dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress 42dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // protected long address; 43dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 44dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // An object attached to this buffer. If this buffer is a view of another 45dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // buffer then we use this field to keep a reference to that buffer to 46dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // ensure that its memory isn't freed before we are done with it. 47dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private final Object att; 48dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 49dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public Object attachment() { 50dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return att; 51dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 52dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 53fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera private Cleaner cleaner; 54dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 551817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera private long actualAddress; 561817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera 57dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public Cleaner cleaner() { return cleaner; } 58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 591817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera DirectByteBuffer(int capacity, long address, byte[] hb, int offset) { 601817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera super(-1, 0, capacity, capacity, hb, offset); 6180eddeeb7660e50af95155decf4c64ba2dd0abf0Mathieu Chartier // Only have references to java objects, no need for a cleaner since the GC will do all 6280eddeeb7660e50af95155decf4c64ba2dd0abf0Mathieu Chartier // the work. 631817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera this.address = address + offset; 641817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera this.actualAddress = address; 6580eddeeb7660e50af95155decf4c64ba2dd0abf0Mathieu Chartier cleaner = null; 669b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.isReadOnly = false; 67dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = null; 68dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 69dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 70dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski DirectByteBuffer(long addr, int cap, Object ob) { 71dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap); 72dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 731817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera actualAddress = addr; 74dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 75dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = ob; 76dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 77dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 78dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Invoked only by JNI: NewDirectByteBuffer(void*, long) 79dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 80dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private DirectByteBuffer(long addr, int cap) { 81dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap); 82dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 831817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera actualAddress = addr; 84dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 85dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = null; 86dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 87dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For memory-mapped buffers -- invoked by FileChannelImpl via reflection 89dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 90dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected DirectByteBuffer(int cap, long addr, 91c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera FileDescriptor fd, 92fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Runnable unmapper) { 939b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this(cap, addr, fd, unmapper, false); 949b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 959b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera 969b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera protected DirectByteBuffer(int cap, long addr, 979b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera FileDescriptor fd, 989b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera Runnable unmapper, 999b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera boolean isReadOnly) { 100dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap, fd); 1019b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.isReadOnly = isReadOnly; 102dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 1031817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera actualAddress = addr; 104dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = Cleaner.create(this, unmapper); 105dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = null; 106dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For duplicates and slices 109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 110d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera DirectByteBuffer(DirectByteBuffer db, // package-private 111c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera int mark, int pos, int lim, int cap, 112fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int off) { 1139b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this(db, mark, pos, lim, cap, off, false); 1149b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 1159b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera 116d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera DirectByteBuffer(DirectByteBuffer db, // package-private 1179b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera int mark, int pos, int lim, int cap, 1189b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera int off, boolean isReadOnly) { 119d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera super(mark, pos, lim, cap, db.hb, off); 1209b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.isReadOnly = isReadOnly; 1211817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera address = db.address; 1221817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera actualAddress = db.actualAddress; 123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = db; 125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer slice() { 128f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 129f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 130f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 1311817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera int pos = position(); 1321817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera int lim = limit(); 133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 1351817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera int off = (pos << 0) + offset; 136dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off >= 0); 1379b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera return new DirectByteBuffer(this, -1, 0, rem, rem, off, isReadOnly); 138dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 139dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 140dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer duplicate() { 141f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 142f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 143f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 144dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new DirectByteBuffer(this, 145c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.markValue(), 146c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.position(), 147c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.limit(), 148c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.capacity(), 1491817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera offset, 1509b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera isReadOnly); 151dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 152dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 153dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer asReadOnlyBuffer() { 154f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 155f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 156f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 1579b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera return new DirectByteBuffer(this, 1589b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.markValue(), 1599b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.position(), 1609b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.limit(), 1619b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.capacity(), 1621817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera offset, 1639b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera true); 164dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 165dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 166dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long address() { 167dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return address; 168dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 169dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long ix(int i) { 1711817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera return actualAddress + offset + (i << 0); 172dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 1741817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera private byte get(long a) { 175fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekByte(a); 176fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera } 177fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera 178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get() { 179f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 180d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 1819b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 1821817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera return get(ix(nextGetIndex())); 183dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 184dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 185dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get(int i) { 186f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 187d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 1889b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 1891817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera return get(ix(checkIndex(i))); 190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 191dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 192fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera public ByteBuffer get(byte[] dst, int dstOffset, int length) { 193f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 194d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 1959b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 196fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera checkBounds(dstOffset, length, dst.length); 197fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int pos = position(); 198fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int lim = limit(); 199fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera assert (pos <= lim); 200fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int rem = (pos <= lim ? lim - pos : 0); 201fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera if (length > rem) 202fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera throw new BufferUnderflowException(); 2031817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera Memory.peekByteArray(ix(pos), 204fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera dst, dstOffset, length); 205fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera position = pos + length; 206eb638671b477b765d763ed737d5dcbe6e5e3102eShubham Ajmera return this; 207eb638671b477b765d763ed737d5dcbe6e5e3102eShubham Ajmera } 208dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 209fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera public ByteBuffer put(long a, byte x) { 210fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeByte(a, x); 211fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return this; 212fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera } 21366102fec246eb9e68e4e2d5c009f69902259823bNarayan Kamath 214dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte x) { 2159b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 2169b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 2179b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 218f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 219d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2209b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 221fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera put(ix(nextPutIndex()), x); 222dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 223dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 224dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 225dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(int i, byte x) { 2269b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 2279b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 2289b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 229f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 230d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2319b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 232fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera put(ix(checkIndex(i)), x); 233dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 234dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 235dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 236dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(ByteBuffer src) { 2379b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 2389b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 2399b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 240f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 241d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2429b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 243d556642d9c5ef258a0867b0101842fae10165f64Shubham Ajmera if (src.hb != null) { 244dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int spos = src.position(); 245dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int slim = src.limit(); 246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (spos <= slim); 247dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int srem = (spos <= slim ? slim - spos : 0); 248d556642d9c5ef258a0867b0101842fae10165f64Shubham Ajmera if (src == this) 249d556642d9c5ef258a0867b0101842fae10165f64Shubham Ajmera throw new IllegalArgumentException(); 250dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski put(src.hb, src.offset + spos, srem); 251dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski src.position(spos + srem); 252dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 253dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super.put(src); 254dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 255dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 256dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 257dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 258fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera public ByteBuffer put(byte[] src, int srcOffset, int length) { 2599b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 2609b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 2619b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 262f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 263d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2649b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 265fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera checkBounds(srcOffset, length, src.length); 266fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int pos = position(); 267fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int lim = limit(); 268fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera assert (pos <= lim); 269fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int rem = (pos <= lim ? lim - pos : 0); 270fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera if (length > rem) 271fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera throw new BufferOverflowException(); 2721817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera Memory.pokeByteArray(ix(pos), 273fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera src, srcOffset, length); 274fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera position = pos + length; 275dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 276dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 277dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 278dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer compact() { 2799b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 2809b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 2819b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 282f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 283d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2849b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 285dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = position(); 286dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = limit(); 287dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 288dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 2891817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera System.arraycopy(hb, position + offset, hb, offset, remaining()); 290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(rem); 291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski limit(capacity()); 292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski discardMark(); 293dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 294dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 295dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isDirect() { 297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return true; 298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 300dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isReadOnly() { 3019b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera return isReadOnly; 302dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 303dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 304dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski byte _get(int i) { // package-private 3059b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera return get(i); 306dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 307dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski void _put(int i, byte b) { // package-private 3099b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera put(i, b); 310dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 311dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 312dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private char getChar(long a) { 313f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 314d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3159b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 316fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return (char) Memory.peekShort(position, !nativeByteOrder); 317dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 318dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 319dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar() { 320f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 321d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3229b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 323fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int newPosition = position + SizeOf.CHAR; 324fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera if (newPosition > limit()) { 325fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera throw new BufferUnderflowException(); 326fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera } 3271817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera char x = (char) Memory.peekShort(ix(position), !nativeByteOrder); 328fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera position = newPosition; 329fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return x; 330dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 331dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 332dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar(int i) { 333f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 334d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3359b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 336fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera checkIndex(i, SizeOf.CHAR); 3371817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera char x = (char)Memory.peekShort(ix(i), !nativeByteOrder); 338fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return x; 339dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 340dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 341dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putChar(long a, char x) { 342fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeShort(a, (short) x, !nativeByteOrder); 343dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 344dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 345dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(char x) { 3479b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 3489b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 3499b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 350f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 351d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3529b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 353fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putChar(ix(nextPutIndex(SizeOf.CHAR)), x); 354dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 355dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 356dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 357dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(int i, char x) { 3589b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 3599b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 3609b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 361f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 362d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3639b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 364fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putChar(ix(checkIndex(i, SizeOf.CHAR)), x); 365dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 366dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 367dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 368dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public CharBuffer asCharBuffer() { 369f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 370f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 371f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 372dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 373dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 374dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 375dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 376dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 1; 37746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (CharBuffer)(new ByteBufferAsCharBuffer(this, 37846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 37946edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 38046edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 38146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 38246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 38346edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 384dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 385dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 386dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private short getShort(long a) { 387fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekShort(a, !nativeByteOrder); 388dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 389dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 390dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort() { 391f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 392d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3939b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 394fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getShort(ix(nextGetIndex(SizeOf.SHORT))); 395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort(int i) { 398f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 399d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4009b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 401fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getShort(ix(checkIndex(i, SizeOf.SHORT))); 402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 404dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putShort(long a, short x) { 405fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeShort(a, x, !nativeByteOrder); 406dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 407dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 408dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 409dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putShort(short x) { 4109b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 4119b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 4129b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 413f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 414d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4159b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 416fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putShort(ix(nextPutIndex(SizeOf.SHORT)), x); 417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putShort(int i, short x) { 4219b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 4229b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 4239b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 424f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 425d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4269b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 427fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putShort(ix(checkIndex(i, SizeOf.SHORT)), x); 428dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 429dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 430dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 431dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ShortBuffer asShortBuffer() { 432f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 433f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 434f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 435dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 436dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 437dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 438dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 439dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 1; 44046edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (ShortBuffer)(new ByteBufferAsShortBuffer(this, 44146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 44246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 44346edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 44446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 44546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 44646edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 447dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 448dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 449dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private int getInt(long a) { 450fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekInt(a, !nativeByteOrder); 451dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 452dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 453dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt() { 454f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 455d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4569b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 457fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getInt(ix(nextGetIndex(SizeOf.INT))); 458dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 459dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 460dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt(int i) { 461f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 462d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4639b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 464fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getInt(ix(checkIndex(i, (SizeOf.INT)))); 465dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 466dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 467dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putInt(long a, int x) { 468fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeInt(a, x, !nativeByteOrder); 469dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 470dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 471dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 472dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int x) { 4739b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 4749b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 4759b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 476f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 477d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4789b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 479fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putInt(ix(nextPutIndex(SizeOf.INT)), x); 480dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 481dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 482dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 483dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int i, int x) { 4849b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 4859b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 4869b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 487f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 488d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4899b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 490fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putInt(ix(checkIndex(i, SizeOf.INT)), x); 491dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 492dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 493dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 494dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public IntBuffer asIntBuffer() { 495f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 496f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 497f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 498dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 499dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 500dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 501dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 502dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 2; 50346edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (IntBuffer)(new ByteBufferAsIntBuffer(this, 50446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 50546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 50646edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 50746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 50846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 50946edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 510dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 511dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 512dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long getLong(long a) { 513fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekLong(a, !nativeByteOrder); 514dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 515dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 516dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong() { 517f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 518d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5199b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 520fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getLong(ix(nextGetIndex(SizeOf.LONG))); 521dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 522dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 523dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong(int i) { 524f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 525d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5269b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 527fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getLong(ix(checkIndex(i, SizeOf.LONG))); 528dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 529dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 530dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putLong(long a, long x) { 531fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeLong(a, x, !nativeByteOrder); 532dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 533dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 534dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 535dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(long x) { 5369b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 5379b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 5389b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 539f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 540d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5419b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 542fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putLong(ix(nextPutIndex(SizeOf.LONG)), x); 543dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 544dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 545dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 546dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(int i, long x) { 5479b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 5489b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 5499b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 550f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 551d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5529b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 553fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putLong(ix(checkIndex(i, SizeOf.LONG)), x); 554dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 555dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 556dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 557dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public LongBuffer asLongBuffer() { 558f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 559f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 560f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 561dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 562dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 563dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 564dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 565dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 3; 56646edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (LongBuffer)(new ByteBufferAsLongBuffer(this, 56746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 56846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 56946edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 57046edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 57146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 57246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 573dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 574dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 575dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private float getFloat(long a) { 576fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int x = Memory.peekInt(a, !nativeByteOrder); 577fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Float.intBitsToFloat(x); 578dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 579dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 580dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat() { 581f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 582d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5839b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 584fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getFloat(ix(nextGetIndex(SizeOf.FLOAT))); 585dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 586dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 587dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat(int i) { 588f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 589d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5909b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 591fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getFloat(ix(checkIndex(i, SizeOf.FLOAT))); 592dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 593dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 594dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putFloat(long a, float x) { 595fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int y = Float.floatToRawIntBits(x); 596fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeInt(a, y, !nativeByteOrder); 597dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 598dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 599dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 600dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(float x) { 6019b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 6029b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 6039b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 604f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 605d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6069b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 607fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putFloat(ix(nextPutIndex(SizeOf.FLOAT)), x); 608dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 609dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 610dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 611dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(int i, float x) { 6129b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 6139b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 6149b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 615f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 616d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6179b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 618fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putFloat(ix(checkIndex(i, SizeOf.FLOAT)), x); 619dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 620dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 621dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 622dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public FloatBuffer asFloatBuffer() { 623f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 624f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 625f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 626dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 627dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 628dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 629dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 630dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 2; 63146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (FloatBuffer)(new ByteBufferAsFloatBuffer(this, 63246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 63346edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 63446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 63546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 63646edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 63746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 638dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 639dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 640dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private double getDouble(long a) { 641fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera long x = Memory.peekLong(a, !nativeByteOrder); 642fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Double.longBitsToDouble(x); 643dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 644dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 645dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble() { 646f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 647d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6489b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 649fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getDouble(ix(nextGetIndex(SizeOf.DOUBLE))); 650dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 651dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 652dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble(int i) { 653f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 654d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6559b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 656fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getDouble(ix(checkIndex(i, SizeOf.DOUBLE))); 657dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 658dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 659dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putDouble(long a, double x) { 660fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera long y = Double.doubleToRawLongBits(x); 661fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeLong(a, y, !nativeByteOrder); 662dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 663dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 664dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 665dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(double x) { 6669b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 6679b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 6689b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 669f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 670d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6719b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 672fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putDouble(ix(nextPutIndex(SizeOf.DOUBLE)), x); 673dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 674dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 675dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 676dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(int i, double x) { 6779b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera if (isReadOnly) { 6789b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera throw new ReadOnlyBufferException(); 6799b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 680f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 681d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6829b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 683fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putDouble(ix(checkIndex(i, SizeOf.DOUBLE)), x); 684dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 685dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 686dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 687dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public DoubleBuffer asDoubleBuffer() { 688f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera if (!isAccessible) { 689f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 690f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 691dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 692dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 693dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 694dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 695dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 696dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 3; 69746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera return (DoubleBuffer)(new ByteBufferAsDoubleBuffer(this, 69846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera -1, 69946edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera 0, 70046edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 70146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera size, 70246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera off, 70346edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera order())); 704dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 705dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 706d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera public boolean isAccessible() { 707d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera return isAccessible; 708d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera } 709d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera 710d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera public void setAccessible(boolean value) { 711d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera isAccessible = value; 712d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera } 713dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski} 714