DirectByteBuffer.java revision c1b2d56a068a7bce28a429a1ffb085cbac28c221
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 Jastrzebski// -- This file was mechanically generated: Do not edit! -- // 27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskipackage java.nio; 29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 30dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport java.io.FileDescriptor; 31dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.misc.Cleaner; 32dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.misc.Unsafe; 33dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.misc.VM; 34dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.nio.ch.DirectBuffer; 35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 37dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiclass DirectByteBuffer 38dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 39dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski extends MappedByteBuffer 40dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 41dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 42dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 43dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski implements DirectBuffer 44dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski{ 45dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 46dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 47dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 48dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Cached unsafe-access object 49dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected static final Unsafe unsafe = Bits.unsafe(); 50dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 51dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Cached unaligned-access capability 52dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski /* ----- BEGIN android ----- 53c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera protected static final boolean unaligned = Bits.unaligned();*/ 54dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private static Boolean unalignedCache; 55dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected static boolean unaligned() { 56dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unalignedCache == null) { 57dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unalignedCache = Bits.unaligned(); 58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 59dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return unalignedCache; 60dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 61dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 62dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 63dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Base address, used in all indexing calculations 64dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress 65dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // protected long address; 66dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 67dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // An object attached to this buffer. If this buffer is a view of another 68dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // buffer then we use this field to keep a reference to that buffer to 69dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // ensure that its memory isn't freed before we are done with it. 70dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private final Object att; 71dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 72dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public Object attachment() { 73dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return att; 74dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 75dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 76dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 77dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 78dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski /* ----- BEGIN android ----- 79c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera private static class Deallocator*/ 80dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private class Deallocator 81dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // ----- END android ----- 82dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski implements Runnable 83dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski { 84dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 85c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera /* ----- BEGIN android ----- 86c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera private static Unsafe unsafe = Unsafe.getUnsafe(); 87c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera ----- END android ----- */ 88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 89dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long address; 90dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long size; 91dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private int capacity; 92dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 93dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private Deallocator(long address, long size, int capacity) { 94dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (address != 0); 95dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski this.address = address; 96dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski this.size = size; 97dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski this.capacity = capacity; 98dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 99dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 100dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public void run() { 101dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (address == 0) { 102dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Paranoia 103dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return; 104dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 105dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.freeMemory(address); 106dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = 0; 107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.unreserveMemory(size, capacity); 108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 110dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private final Cleaner cleaner; 113dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public Cleaner cleaner() { return cleaner; } 115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 116dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 117dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 118dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 119dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 120dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 121dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 122dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Primary constructor 127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski DirectByteBuffer(int cap) { // package-private 129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap); 131dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski boolean pa = VM.isDirectMemoryPageAligned(); 132dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int ps = Bits.pageSize(); 133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski long size = Math.max(1L, (long)cap + (pa ? ps : 0)); 134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.reserveMemory(size, cap); 135dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 136dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski long base = 0; 137dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski try { 138dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski base = unsafe.allocateMemory(size); 139dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } catch (OutOfMemoryError x) { 140dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.unreserveMemory(size, cap); 141dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw x; 142dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 143dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.setMemory(base, size, (byte) 0); 144dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (pa && (base % ps != 0)) { 145dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Round up to page boundary 146dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = base + ps - (base & (ps - 1)); 147dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 148dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = base; 149dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 150dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = Cleaner.create(this, new Deallocator(base, size, cap)); 151dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = null; 152dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 153dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 154dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 155dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 156dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 157dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 158dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 159dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Invoked to construct a direct ByteBuffer referring to the block of 160dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // memory. A given arbitrary object may also be attached to the buffer. 161dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 162dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski DirectByteBuffer(long addr, int cap, Object ob) { 163dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap); 164dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 165dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 166dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = ob; 167dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 168dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 169dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Invoked only by JNI: NewDirectByteBuffer(void*, long) 171dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 172dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private DirectByteBuffer(long addr, int cap) { 173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap); 174dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 175dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 176dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = null; 177dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 179dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 180dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 181dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For memory-mapped buffers -- invoked by FileChannelImpl via reflection 182dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 183dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski protected DirectByteBuffer(int cap, long addr, 184c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera FileDescriptor fd, 185c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera Runnable unmapper) 186dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski { 187dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 188dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap, fd); 189dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = Cleaner.create(this, unmapper); 191dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = null; 192dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 193dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 194dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 195dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 196dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 197dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 198dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 199dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For duplicates and slices 200dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // 201dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski DirectByteBuffer(DirectBuffer db, // package-private 202c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera int mark, int pos, int lim, int cap, 203c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera int off) 204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski { 205dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 206dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(mark, pos, lim, cap); 207dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = db.address() + off; 208dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 209dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 210dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 211dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski att = db; 212dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 213dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 214dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 215dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 216dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 217dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer slice() { 218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = this.position(); 219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 220dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 221dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 222dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = (pos << 0); 223dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off >= 0); 224dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new DirectByteBuffer(this, -1, 0, rem, rem, off); 225dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 226dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 227dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer duplicate() { 228dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new DirectByteBuffer(this, 229c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.markValue(), 230c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.position(), 231c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.limit(), 232c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.capacity(), 233c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0); 234dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 235dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 236dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer asReadOnlyBuffer() { 237dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 238dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return new DirectByteBufferR(this, 239c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.markValue(), 240c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.position(), 241c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.limit(), 242c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera this.capacity(), 243c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0); 244dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 245dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 247dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 248dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 249dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 250dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 251dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long address() { 252dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return address; 253dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 254dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 255dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long ix(int i) { 256dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return address + (i << 0); 257dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 258dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 259dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get() { 260dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return ((unsafe.getByte$(ix(nextGetIndex())))); 261dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 262dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 263dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public byte get(int i) { 264dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return ((unsafe.getByte$(ix(checkIndex(i))))); 265dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 266dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 267dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer get(byte[] dst, int offset, int length) { 268dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 269dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) { 270dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski checkBounds(offset, length, dst.length); 271dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = position(); 272dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = limit(); 273dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 274dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 275dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (length > rem) 276dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferUnderflowException(); 277dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 278dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 279dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 280dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 281dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 282dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 283dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 284dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 285c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera Bits.copyToArray(ix(pos), dst, 0, 286c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera offset << 0, 287c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera length << 0); 288dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(pos + length); 289dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super.get(dst, offset, length); 291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 293dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 294dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 295dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 300dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte x) { 301dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 302dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putByte$(ix(nextPutIndex()), ((x))); 303dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 304dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 305dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 306dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 307dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 309dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(int i, byte x) { 310dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 311dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putByte$(ix(checkIndex(i)), ((x))); 312dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 313dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 314dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 315dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 316dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 317dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 318dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(ByteBuffer src) { 319dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (src instanceof DirectByteBuffer) { 321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (src == this) 322dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new IllegalArgumentException(); 323dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski DirectByteBuffer sb = (DirectByteBuffer)src; 324dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 325dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int spos = sb.position(); 326dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int slim = sb.limit(); 327dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (spos <= slim); 328dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int srem = (spos <= slim ? slim - spos : 0); 329dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 330dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = position(); 331dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = limit(); 332dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 333dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 334dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 335dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (srem > rem) 336dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferOverflowException(); 337dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.copyMemory(sb.ix(spos), ix(pos), srem << 0); 338dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski sb.position(spos + srem); 339dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(pos + srem); 340dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else if (src.hb != null) { 341dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 342dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int spos = src.position(); 343dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int slim = src.limit(); 344dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (spos <= slim); 345dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int srem = (spos <= slim ? slim - spos : 0); 346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 347dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski put(src.hb, src.offset + spos, srem); 348dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski src.position(spos + srem); 349dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 350dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 351dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super.put(src); 352dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 353dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 354dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 355dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 356dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 357dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 358dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 359dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer put(byte[] src, int offset, int length) { 360dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 361dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if ((length << 0) > Bits.JNI_COPY_FROM_ARRAY_THRESHOLD) { 362dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski checkBounds(offset, length, src.length); 363dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = position(); 364dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = limit(); 365dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 366dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 367dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (length > rem) 368dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski throw new BufferOverflowException(); 369dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 370dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 371dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 372dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 373dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 374dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 375dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 376c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera Bits.copyFromArray(src, 0, offset << 0, 377c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera ix(pos), length << 0); 378dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(pos + length); 379dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 380dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super.put(src, offset, length); 381dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 382dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 383dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 384dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 385dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 386dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 387dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 388dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer compact() { 389dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 390dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = position(); 391dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = limit(); 392dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 393dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 394dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.copyMemory(ix(pos), ix(0), rem << 0); 396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(rem); 397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski limit(capacity()); 398dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski discardMark(); 399dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 400dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 401dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 404dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 405dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isDirect() { 406dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return true; 407dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 408dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 409dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isReadOnly() { 410dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return false; 411dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 412dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 413dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 414dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 415dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 416dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 421dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 422dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 423dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 424dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 425dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 426dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 427dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 428dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 429dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 430dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 431dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 432dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 433dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 434dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 435dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 436dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 437dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 438dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 439dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 440dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 441dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 442dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 443dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 444dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 445dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 446dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 447dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 448dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 449dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 450dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 451dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 452dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 453dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 454dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 455dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 456dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 457dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 458dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 459dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 460dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 461dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 462dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 463dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 464dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 465dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 466dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 467dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 468dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 469dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 470dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 471dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 472dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 473dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 474dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 475dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 476dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski byte _get(int i) { // package-private 477dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return unsafe.getByte$(address + i); 478dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 479dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 480dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski void _put(int i, byte b) { // package-private 481dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 482dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putByte$(address + i, b); 483dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 484dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 485dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 486dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 487dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 488dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 489dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 490dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 491dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private char getChar(long a) { 492dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 493dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski char x = unsafe.getChar$(a); 494dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder ? x : Bits.swap(x)); 495dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 496dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getChar(a, bigEndian); 497dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 498dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 499dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar() { 500dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getChar(ix(nextGetIndex((1 << 1)))); 501dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 502dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 503dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public char getChar(int i) { 504dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getChar(ix(checkIndex(i, (1 << 1)))); 505dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 506dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 507dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 508dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 509dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putChar(long a, char x) { 510dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 511dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 512dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski char y = (x); 513dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putChar$(a, (nativeByteOrder ? y : Bits.swap(y))); 514dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 515dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putChar(a, x, bigEndian); 516dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 517dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 518dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 519dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 520dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 521dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 522dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 523dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(char x) { 524dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 525dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putChar(ix(nextPutIndex((1 << 1))), x); 526dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 527dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 528dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 529dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 530dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 531dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 532dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putChar(int i, char x) { 533dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 534dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putChar(ix(checkIndex(i, (1 << 1))), x); 535dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 536dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 537dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 538dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 539dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 540dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 541dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public CharBuffer asCharBuffer() { 542dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 543dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 544dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 545dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 546dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 547dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 1; 548dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (!unaligned() && ((address + off) % (1 << 1) != 0)) { 549dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (bigEndian 550dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (CharBuffer)(new ByteBufferAsCharBufferB(this, 551c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 552c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 553c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 554c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 555c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 556dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (CharBuffer)(new ByteBufferAsCharBufferL(this, 557c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 558c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 559c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 560c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 561c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 562dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 563dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder 564dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (CharBuffer)(new DirectCharBufferU(this, 565c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 566c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 567c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 568c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 569c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 570dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (CharBuffer)(new DirectCharBufferS(this, 571c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 572c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 573c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 574c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 575c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 576dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 577dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 578dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 579dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 580dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 581dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 582dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private short getShort(long a) { 583dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 584dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski short x = unsafe.getShort$(a); 585dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder ? x : Bits.swap(x)); 586dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 587dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getShort(a, bigEndian); 588dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 589dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 590dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort() { 591dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getShort(ix(nextGetIndex((1 << 1)))); 592dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 593dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 594dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public short getShort(int i) { 595dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getShort(ix(checkIndex(i, (1 << 1)))); 596dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 597dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 598dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 599dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 600dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putShort(long a, short x) { 601dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 602dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 603dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski short y = (x); 604dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putShort$(a, (nativeByteOrder ? y : Bits.swap(y))); 605dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 606dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putShort(a, x, bigEndian); 607dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 608dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 609dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 610dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 611dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 612dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 613dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 614dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putShort(short x) { 615dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 616dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putShort(ix(nextPutIndex((1 << 1))), x); 617dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 618dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 619dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 620dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 621dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 622dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 623dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putShort(int i, short x) { 624dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 625dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putShort(ix(checkIndex(i, (1 << 1))), x); 626dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 627dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 628dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 629dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 630dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 631dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 632dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ShortBuffer asShortBuffer() { 633dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 634dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 635dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 636dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 637dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 638dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 1; 639dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (!unaligned() && ((address + off) % (1 << 1) != 0)) { 640dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (bigEndian 641dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (ShortBuffer)(new ByteBufferAsShortBufferB(this, 642dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski -1, 643dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 0, 644dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 645dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 646dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski off)) 647c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera : (ShortBuffer)(new ByteBufferAsShortBufferL(this, 648dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski -1, 649dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 0, 650dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 651dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 652dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski off))); 653c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera } else { 654c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera return (nativeByteOrder 655c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera ? (ShortBuffer)(new DirectShortBufferU(this, 656c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 657c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 658c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 659c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 660c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 661c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera : (ShortBuffer)(new DirectShortBufferS(this, 662c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 663c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 664c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 665c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 666c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 667dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 668dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 669dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 670dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 671dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 672dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 673dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private int getInt(long a) { 674dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 675dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int x = unsafe.getInt$(a); 676dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder ? x : Bits.swap(x)); 677dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 678dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getInt(a, bigEndian); 679dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 680dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 681dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt() { 682dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getInt(ix(nextGetIndex((1 << 2)))); 683dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 684dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 685dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt(int i) { 686dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getInt(ix(checkIndex(i, (1 << 2)))); 687dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 688dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 689dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 690dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 691dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putInt(long a, int x) { 692dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 693dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 694dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int y = (x); 695dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putInt$(a, (nativeByteOrder ? y : Bits.swap(y))); 696dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 697dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putInt(a, x, bigEndian); 698dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 699dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 700dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 701dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 702dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 703dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 704dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 705dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int x) { 706dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 707dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putInt(ix(nextPutIndex((1 << 2))), x); 708dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 709dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 710dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 711dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 712dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 713dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 714dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putInt(int i, int x) { 715dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 716dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putInt(ix(checkIndex(i, (1 << 2))), x); 717dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 718dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 719dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 720dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 721dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 722dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 723dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public IntBuffer asIntBuffer() { 724dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 725dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 726dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 727dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 728dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 729dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 2; 730dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (!unaligned() && ((address + off) % (1 << 2) != 0)) { 731dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (bigEndian 732dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (IntBuffer)(new ByteBufferAsIntBufferB(this, 733c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 734c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 735c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 736c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 737c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 738dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (IntBuffer)(new ByteBufferAsIntBufferL(this, 739c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 740c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 741c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 742c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 743c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 744dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 745dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder 746dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (IntBuffer)(new DirectIntBufferU(this, 747c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 748c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 749c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 750c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 751c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 752dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (IntBuffer)(new DirectIntBufferS(this, 753c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 754c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 755c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 756c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 757c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 758dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 759dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 760dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 761dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 762dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 763dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 764dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long getLong(long a) { 765dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 766dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski long x = unsafe.getLong$(a); 767dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder ? x : Bits.swap(x)); 768dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 769dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getLong(a, bigEndian); 770dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 771dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 772dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong() { 773dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getLong(ix(nextGetIndex((1 << 3)))); 774dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 775dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 776dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public long getLong(int i) { 777dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getLong(ix(checkIndex(i, (1 << 3)))); 778dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 779dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 780dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 781dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 782dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putLong(long a, long x) { 783dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 784dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 785dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski long y = (x); 786dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putLong$(a, (nativeByteOrder ? y : Bits.swap(y))); 787dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 788dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putLong(a, x, bigEndian); 789dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 790dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 791dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 792dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 793dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 794dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 795dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 796dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(long x) { 797dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 798dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putLong(ix(nextPutIndex((1 << 3))), x); 799dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 800dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 801dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 802dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 803dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 804dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 805dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putLong(int i, long x) { 806dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 807dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putLong(ix(checkIndex(i, (1 << 3))), x); 808dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 809dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 810dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 811dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 812dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 813dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 814dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public LongBuffer asLongBuffer() { 815dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 816dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 817dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 818dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 819dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 820dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 3; 821dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (!unaligned() && ((address + off) % (1 << 3) != 0)) { 822dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (bigEndian 823dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (LongBuffer)(new ByteBufferAsLongBufferB(this, 824c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 825c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 826c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 827c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 828c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 829dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (LongBuffer)(new ByteBufferAsLongBufferL(this, 830c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 831c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 832c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 833c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 834c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 835dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 836dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder 837dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (LongBuffer)(new DirectLongBufferU(this, 838c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 839c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 840c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 841c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 842c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 843dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (LongBuffer)(new DirectLongBufferS(this, 844c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 845c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 846c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 847c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 848c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 849dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 850dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 851dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 852dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 853dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 854dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 855dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private float getFloat(long a) { 856dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 857dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int x = unsafe.getInt$(a); 858dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Float.intBitsToFloat(nativeByteOrder ? x : Bits.swap(x)); 859dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 860dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getFloat(a, bigEndian); 861dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 862dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 863dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat() { 864dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getFloat(ix(nextGetIndex((1 << 2)))); 865dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 866dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 867dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public float getFloat(int i) { 868dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getFloat(ix(checkIndex(i, (1 << 2)))); 869dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 870dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 871dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 872dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 873dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putFloat(long a, float x) { 874dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 875dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 876dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int y = Float.floatToRawIntBits(x); 877dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putInt$(a, (nativeByteOrder ? y : Bits.swap(y))); 878dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 879dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putFloat(a, x, bigEndian); 880dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 881dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 882dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 883dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 884dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 885dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 886dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 887dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(float x) { 888dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 889dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putFloat(ix(nextPutIndex((1 << 2))), x); 890dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 891dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 892dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 893dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 894dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 895dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 896dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putFloat(int i, float x) { 897dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 898dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putFloat(ix(checkIndex(i, (1 << 2))), x); 899dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 900dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 901dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 902dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 903dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 904dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 905dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public FloatBuffer asFloatBuffer() { 906dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 907dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 908dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 909dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 910dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 911dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 2; 912dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (!unaligned() && ((address + off) % (1 << 2) != 0)) { 913dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (bigEndian 914dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (FloatBuffer)(new ByteBufferAsFloatBufferB(this, 915dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski -1, 916dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 0, 917dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 918dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 919dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski off)) 920c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera : (FloatBuffer)(new ByteBufferAsFloatBufferL(this, 921dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski -1, 922dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 0, 923dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 924dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski size, 925dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski off))); 926c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera } else { 927c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera return (nativeByteOrder 928c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera ? (FloatBuffer)(new DirectFloatBufferU(this, 929c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 930c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 931c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 932c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 933c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 934c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera : (FloatBuffer)(new DirectFloatBufferS(this, 935c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 936c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 937c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 938c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 939c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 940dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 941dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 942dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 943dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 944dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 945dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 946dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private double getDouble(long a) { 947dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 948dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski long x = unsafe.getLong$(a); 949dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Double.longBitsToDouble(nativeByteOrder ? x : Bits.swap(x)); 950dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 951dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return Bits.getDouble(a, bigEndian); 952dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 953dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 954dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble() { 955dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getDouble(ix(nextGetIndex((1 << 3)))); 956dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 957dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 958dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public double getDouble(int i) { 959dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return getDouble(ix(checkIndex(i, (1 << 3)))); 960dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 961dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 962dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 963dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 964dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putDouble(long a, double x) { 965dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 966dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (unaligned()) { 967dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski long y = Double.doubleToRawLongBits(x); 968dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski unsafe.putLong$(a, (nativeByteOrder ? y : Bits.swap(y))); 969dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 970dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski Bits.putDouble(a, x, bigEndian); 971dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 972dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 973dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 974dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 975dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 976dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 977dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 978dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(double x) { 979dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 980dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putDouble(ix(nextPutIndex((1 << 3))), x); 981dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 982dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 983dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 984dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 985dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 986dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 987dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public ByteBuffer putDouble(int i, double x) { 988dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 989dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski putDouble(ix(checkIndex(i, (1 << 3))), x); 990dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 991dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 992dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 993dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 994dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 995dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 996dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public DoubleBuffer asDoubleBuffer() { 997dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 998dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 999dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 1000dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 1001dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 1002dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 3; 1003dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski if (!unaligned() && ((address + off) % (1 << 3) != 0)) { 1004dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (bigEndian 1005c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera ? (DoubleBuffer)(new ByteBufferAsDoubleBuffer(this, 1006c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 1007c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 1008c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1009c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1010c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off, ByteOrder.BIG_ENDIAN)) 1011c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera : (DoubleBuffer)(new ByteBufferAsDoubleBuffer(this, 1012c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 1013c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 1014c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1015c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1016c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off, 1017c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera ByteOrder.LITTLE_ENDIAN))); 1018dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } else { 1019dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return (nativeByteOrder 1020dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski ? (DoubleBuffer)(new DirectDoubleBufferU(this, 1021c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 1022c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 1023c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1024c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1025c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off)) 1026dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski : (DoubleBuffer)(new DirectDoubleBufferS(this, 1027c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera -1, 1028c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera 0, 1029c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1030c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera size, 1031c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera off))); 1032dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 1033dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 1034dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 1035dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // ----- BEGIN android ----- 10360f7f0c999e751ab883a247e1409dcc8730c87b9fPrzemyslaw Szczepaniak // TODO(pszczepaniak): Remove these after adding this functionality 10370f7f0c999e751ab883a247e1409dcc8730c87b9fPrzemyslaw Szczepaniak // in the framework 1038dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private boolean accessible = true; 1039dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private boolean freed = false; 1040dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski /** 1041dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * @hide 1042dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 1043dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public void setAccessible(boolean value) { 1044dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski accessible = value; 1045dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 1046dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski /** 1047dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * @hide 1048dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 1049dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public boolean isAccessible() { 1050dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return accessible && !freed; 1051dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 1052dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // ----- END android ----- 1053dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski} 1054