1dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/* 22c87ad3a45cecf9e344487cad1abfdebe79f2c7cNarayan Kamath * Copyright (C) 2014 The Android Open Source Project 3dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 4dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 6dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 7dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 8dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 9dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 10dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 11dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 12dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 13dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 16dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * accompanied this code). 17dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 18dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 19dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 20dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 21dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 22dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 23dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 24dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * questions. 25dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */ 26dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskipackage java.nio; 28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport java.io.FileDescriptor; 30fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 31fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamathimport dalvik.system.VMRuntime; 32190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmeraimport libcore.io.Memory; 33190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmeraimport libcore.io.SizeOf; 34dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.misc.Cleaner; 35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiimport sun.nio.ch.DirectBuffer; 36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 37fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath/** @hide */ 38757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller// Not final because it is extended in tests. 39fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamathpublic class DirectByteBuffer extends MappedByteBuffer implements DirectBuffer { 40fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 41fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath /** 42fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * Stores the details of the memory backing a DirectByteBuffer. This could be a pointer 43fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * (passed through from JNI or resulting from a mapping) or a non-movable byte array allocated 44fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * from Java. Each MemoryRef also has an isAccessible associated with it, which determines 45fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * whether the underlying memory is "accessible". The notion of "accessibility" is usually 46fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * defined by the allocator of the reference, and is separate from the accessibility of the 47fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * memory as defined by the underlying system. 48fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * 49fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath * A single MemoryRef instance is shared across all slices and duplicates of a given buffer. 50fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath */ 51757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final static class MemoryRef { 52fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath byte[] buffer; 53fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath long allocatedAddress; 54fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath final int offset; 55fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath boolean isAccessible; 56dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera boolean isFreed; 57fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 581a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak 591a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // Reference to original DirectByteBuffer that held this MemoryRef. The field is set 601a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // only for the MemoryRef created through JNI NewDirectByteBuffer(void*, long) function. 611a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // This allows users of JNI NewDirectByteBuffer to create a PhantomReference on the 621a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // DirectByteBuffer instance that will only be put in the associated ReferenceQueue when 631a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // the underlying memory is not referenced by any DirectByteBuffer instance. The 641a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // MemoryRef can outlive the original DirectByteBuffer instance if, for example, slice() 651a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // or asReadOnlyBuffer() are called and all strong references to the original DirectByteBuffer 661a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak // are discarded. 671a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak final Object originalBufferObject; 681a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak 69fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath MemoryRef(int capacity) { 70fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath VMRuntime runtime = VMRuntime.getRuntime(); 71190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera buffer = (byte[]) runtime.newNonMovableArray(byte.class, capacity + 7); 72fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath allocatedAddress = runtime.addressOf(buffer); 73fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath // Offset is set to handle the alignment: http://b/16449607 74190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera offset = (int) (((allocatedAddress + 7) & ~(long) 7) - allocatedAddress); 75fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath isAccessible = true; 76dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera isFreed = false; 771a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak originalBufferObject = null; 78fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath } 79fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 801a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak MemoryRef(long allocatedAddress, Object originalBufferObject) { 81fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath buffer = null; 82fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath this.allocatedAddress = allocatedAddress; 83fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath this.offset = 0; 841a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak this.originalBufferObject = originalBufferObject; 85fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath isAccessible = true; 86fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath } 87fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 88fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath void free() { 89fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath buffer = null; 90fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath allocatedAddress = 0; 91fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath isAccessible = false; 92dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera isFreed = true; 93fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath } 94fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath } 95fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 96fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath final Cleaner cleaner; 97fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath final MemoryRef memoryRef; 98fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 99fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath DirectByteBuffer(int capacity, MemoryRef memoryRef) { 100fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath super(-1, 0, capacity, capacity, memoryRef.buffer, memoryRef.offset); 10180eddeeb7660e50af95155decf4c64ba2dd0abf0Mathieu Chartier // Only have references to java objects, no need for a cleaner since the GC will do all 10280eddeeb7660e50af95155decf4c64ba2dd0abf0Mathieu Chartier // the work. 103fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath this.memoryRef = memoryRef; 104190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.address = memoryRef.allocatedAddress + memoryRef.offset; 10580eddeeb7660e50af95155decf4c64ba2dd0abf0Mathieu Chartier cleaner = null; 1069b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.isReadOnly = false; 107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // Invoked only by JNI: NewDirectByteBuffer(void*, long) 110757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @SuppressWarnings("unused") 111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private DirectByteBuffer(long addr, int cap) { 112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap); 1131a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak memoryRef = new MemoryRef(addr, this); 114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 1169b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 1179b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera 118fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath /** @hide */ 119fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath public DirectByteBuffer(int cap, long addr, 120fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath FileDescriptor fd, 121fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath Runnable unmapper, 122fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath boolean isReadOnly) { 123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski super(-1, 0, cap, cap, fd); 1249b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.isReadOnly = isReadOnly; 1251a6436a8de0d3dd8e1ec0c6a3a54529468dc298dPrzemyslaw Szczepaniak memoryRef = new MemoryRef(addr, null); 126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski address = addr; 127fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath cleaner = Cleaner.create(memoryRef, unmapper); 128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski // For duplicates and slices 131fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath DirectByteBuffer(MemoryRef memoryRef, // package-private 132c1b2d56a068a7bce28a429a1ffb085cbac28c221Shubham Ajmera int mark, int pos, int lim, int cap, 133fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int off) { 134fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath this(memoryRef, mark, pos, lim, cap, off, false); 1359b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 1369b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera 137fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath DirectByteBuffer(MemoryRef memoryRef, // package-private 1389b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera int mark, int pos, int lim, int cap, 1399b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera int off, boolean isReadOnly) { 140fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath super(mark, pos, lim, cap, memoryRef.buffer, off); 1419b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera this.isReadOnly = isReadOnly; 142fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath this.memoryRef = memoryRef; 1437b67633543b3202edbd60add5161495540b9ac51Alex Klyubin address = memoryRef.allocatedAddress + off; 144dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski cleaner = null; 145fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath } 146fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 147fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath @Override 148757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final Object attachment() { 149fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath return memoryRef; 150fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath } 151fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath 152fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath @Override 153757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final Cleaner cleaner() { 154fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath return cleaner; 155dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 156dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 157757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 158757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer slice() { 159fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 160f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 161f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 1621817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera int pos = position(); 1631817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera int lim = limit(); 164dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 165dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 166fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath int off = pos + offset; 167dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off >= 0); 168fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath return new DirectByteBuffer(memoryRef, -1, 0, rem, rem, off, isReadOnly); 169dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 171757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 172757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer duplicate() { 173dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 174dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 175f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 176fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath return new DirectByteBuffer(memoryRef, 177190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.markValue(), 178190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.position(), 179190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.limit(), 180190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.capacity(), 181190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera offset, 182190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera isReadOnly); 183dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 184dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 185757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 186757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer asReadOnlyBuffer() { 187dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 188dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 189f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 190fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath return new DirectByteBuffer(memoryRef, 191190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.markValue(), 192190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.position(), 193190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.limit(), 194190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera this.capacity(), 195190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera offset, 196190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera true); 197dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 198dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 1997b67633543b3202edbd60add5161495540b9ac51Alex Klyubin @Override 200757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final long address() { 201dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return address; 202dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 203dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long ix(int i) { 2057b67633543b3202edbd60add5161495540b9ac51Alex Klyubin return address + i; 206dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 207dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 2081817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera private byte get(long a) { 209fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekByte(a); 210fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera } 211fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera 212757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 213757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final byte get() { 214fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 215d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2169b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 2171817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera return get(ix(nextGetIndex())); 218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 220757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 221757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final byte get(int i) { 222fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 223d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2249b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 2251817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera return get(ix(checkIndex(i))); 226dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 227dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 228757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller // This method is not declared final because it is overridden in tests. 229757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 230fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera public ByteBuffer get(byte[] dst, int dstOffset, int length) { 231fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 232d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2339b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 234fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera checkBounds(dstOffset, length, dst.length); 235fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int pos = position(); 236fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int lim = limit(); 237fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera assert (pos <= lim); 238fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int rem = (pos <= lim ? lim - pos : 0); 239fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera if (length > rem) 240fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera throw new BufferUnderflowException(); 2411817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera Memory.peekByteArray(ix(pos), 242190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length); 243fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera position = pos + length; 244eb638671b477b765d763ed737d5dcbe6e5e3102eShubham Ajmera return this; 245eb638671b477b765d763ed737d5dcbe6e5e3102eShubham Ajmera } 246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 247757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller private ByteBuffer put(long a, byte x) { 248fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeByte(a, x); 249fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return this; 250fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera } 25166102fec246eb9e68e4e2d5c009f69902259823bNarayan Kamath 252757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 253757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer put(byte x) { 254fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 255d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2569b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 257dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 258dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 259dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 260fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera put(ix(nextPutIndex()), x); 261dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 262dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 263dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 264757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 265757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer put(int i, byte x) { 266fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 267d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2689b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 269dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 270dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 271dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 272fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera put(ix(checkIndex(i)), x); 273dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 274dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 275dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 276757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller // This method is not declared final because it is overridden in tests. 277757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 278fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera public ByteBuffer put(byte[] src, int srcOffset, int length) { 279fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 280d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 2819b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 282dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 283dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 284dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 285fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera checkBounds(srcOffset, length, src.length); 286fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int pos = position(); 287fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int lim = limit(); 288fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera assert (pos <= lim); 289fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int rem = (pos <= lim ? lim - pos : 0); 290fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera if (length > rem) 291fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera throw new BufferOverflowException(); 2921817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera Memory.pokeByteArray(ix(pos), 293190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length); 294fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera position = pos + length; 295dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 298757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 299757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer compact() { 300fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 301d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3029b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 303dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 304dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 305dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 306dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int pos = position(); 307dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = limit(); 308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (pos <= lim); 309dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (pos <= lim ? lim - pos : 0); 3101817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera System.arraycopy(hb, position + offset, hb, offset, remaining()); 311dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski position(rem); 312dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski limit(capacity()); 313dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski discardMark(); 314dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 315dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 316dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 317757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 318757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final boolean isDirect() { 319dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return true; 320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 322757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 323757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final boolean isReadOnly() { 3249b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera return isReadOnly; 325dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 326dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 327757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller // Used by java.nio.Bits 328757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 329757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final byte _get(int i) { // package-private 3309b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera return get(i); 331dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 332dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 333757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller // Used by java.nio.Bits 334757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 335757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void _put(int i, byte b) { // package-private 3369b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera put(i, b); 337dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 338dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 339757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 340757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final char getChar() { 341fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 342d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3439b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 344fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int newPosition = position + SizeOf.CHAR; 345fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera if (newPosition > limit()) { 346fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera throw new BufferUnderflowException(); 347fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera } 3481817e4d9ef742ceebb2d6a04d624c086686b42baShubham Ajmera char x = (char) Memory.peekShort(ix(position), !nativeByteOrder); 349fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera position = newPosition; 350fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return x; 351dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 352dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 353757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 354757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final char getChar(int i) { 355fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 356d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3579b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 358fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera checkIndex(i, SizeOf.CHAR); 359757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return (char) Memory.peekShort(ix(i), !nativeByteOrder); 360dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 361dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 362757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 363e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera char getCharUnchecked(int i) { 364dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 365dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 366dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 367190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return (char) Memory.peekShort(ix(i), !nativeByteOrder); 368e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 369e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 370757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 371f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, char[] dst, int dstOffset, int length) { 372dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 373dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 374dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 375f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.peekCharArray(ix(pos), 376190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length, !nativeByteOrder); 377f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 378f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 379dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putChar(long a, char x) { 380fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeShort(a, (short) x, !nativeByteOrder); 381dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 382dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 383dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 384757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 385757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putChar(char x) { 386fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 387d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 3889b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 389dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 390dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 391dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 392fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putChar(ix(nextPutIndex(SizeOf.CHAR)), x); 393dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 394dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 396757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 397757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putChar(int i, char x) { 398fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 399d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4009b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 401dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 402dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 403dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 404fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putChar(ix(checkIndex(i, SizeOf.CHAR)), x); 405dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 406dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 407dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 408757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 409e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putCharUnchecked(int i, char x) { 410dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 411dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 412dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 413e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera putChar(ix(i), x); 414e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 415e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 416757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 417f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, char[] src, int srcOffset, int length) { 418dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 419dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 420dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 421f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.pokeCharArray(ix(pos), 422190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length, !nativeByteOrder); 423f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 424f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 425757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 426757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final CharBuffer asCharBuffer() { 427dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 428dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 429f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 430dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 431dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 432dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 433dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 434dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 1; 435757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return new ByteBufferAsCharBuffer(this, 436190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 437190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 438190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 439190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 440190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 441757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller order()); 442dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 443dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 444dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private short getShort(long a) { 445fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekShort(a, !nativeByteOrder); 446dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 447dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 448757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 449757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final short getShort() { 450fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 451d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4529b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 453fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getShort(ix(nextGetIndex(SizeOf.SHORT))); 454dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 455dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 456757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 457757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final short getShort(int i) { 458fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 459d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4609b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 461fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getShort(ix(checkIndex(i, SizeOf.SHORT))); 462dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 463dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 464757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 465e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera short getShortUnchecked(int i) { 466dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 467dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 468dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 469e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return getShort(ix(i)); 470e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 471e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 472757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 473f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void getUnchecked(int pos, short[] dst, int dstOffset, int length) { 474dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 475dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 476dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 477f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.peekShortArray(ix(pos), 478190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length, !nativeByteOrder); 479f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 480f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 481dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putShort(long a, short x) { 482fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeShort(a, x, !nativeByteOrder); 483dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 484dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 485dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 486757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 487757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putShort(short x) { 488fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 489d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 4909b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 491dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 492dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 493dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 494fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putShort(ix(nextPutIndex(SizeOf.SHORT)), x); 495dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 496dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 497dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 498757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 499757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putShort(int i, short x) { 500fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 501d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5029b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 503dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 504dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 505dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 506fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putShort(ix(checkIndex(i, SizeOf.SHORT)), x); 507dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 508dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 509dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 510757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 511e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera void putShortUnchecked(int i, short x) { 512dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 513dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 514dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 515e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera putShort(ix(i), x); 516e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 517e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 518757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 519f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera void putUnchecked(int pos, short[] src, int srcOffset, int length) { 520dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 521dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 522dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 523f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.pokeShortArray(ix(pos), 524190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length, !nativeByteOrder); 525f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 526f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 527757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 528757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ShortBuffer asShortBuffer() { 529dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 530dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 531f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 532dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 533dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 534dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 535dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 536dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 1; 537757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return new ByteBufferAsShortBuffer(this, 538190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 539190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 540190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 541190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 542190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 543757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller order()); 544dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 545dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 546dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private int getInt(long a) { 547190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera return Memory.peekInt(a, !nativeByteOrder); 548dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 549dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 550757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 551dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt() { 552fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 553d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5549b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 555fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getInt(ix(nextGetIndex(SizeOf.INT))); 556dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 557dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 558757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 559dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski public int getInt(int i) { 560fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 561d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5629b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 563fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getInt(ix(checkIndex(i, (SizeOf.INT)))); 564dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 565dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 566757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 567757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final int getIntUnchecked(int i) { 568dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 569dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 570dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 571e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return getInt(ix(i)); 572e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 573e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 574757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 575757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void getUnchecked(int pos, int[] dst, int dstOffset, int length) { 576dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 577dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 578dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 579f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.peekIntArray(ix(pos), 580190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length, !nativeByteOrder); 581f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 582f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 583dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putInt(long a, int x) { 584fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeInt(a, x, !nativeByteOrder); 585dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 586dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 587dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 588757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 589757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putInt(int x) { 590fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 591d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 5929b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 593dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 594dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 595dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 596fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putInt(ix(nextPutIndex(SizeOf.INT)), x); 597dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 598dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 599dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 600757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 601757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putInt(int i, int x) { 602fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 603d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6049b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 605dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 606dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 607dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 608fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putInt(ix(checkIndex(i, SizeOf.INT)), x); 609dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 610dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 611dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 612757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 613757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putIntUnchecked(int i, int x) { 614dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 615dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 616dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 617e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera putInt(ix(i), x); 618e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 619e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 620757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 621757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putUnchecked(int pos, int[] src, int srcOffset, int length) { 622dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 623dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 624dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 625f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.pokeIntArray(ix(pos), 626190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length, !nativeByteOrder); 627f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 628f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 629757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 630757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final IntBuffer asIntBuffer() { 631dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 632dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 633f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 634dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 635dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 636dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 637dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 638dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 2; 639757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return new ByteBufferAsIntBuffer(this, 640190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 641190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 642190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 643190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 644190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 645757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller order()); 646dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 647dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 648dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private long getLong(long a) { 649fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Memory.peekLong(a, !nativeByteOrder); 650dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 651dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 652757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 653757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final long getLong() { 654fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 655d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6569b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 657fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getLong(ix(nextGetIndex(SizeOf.LONG))); 658dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 659dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 660757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 661757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final long getLong(int i) { 662fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 663d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6649b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 665fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getLong(ix(checkIndex(i, SizeOf.LONG))); 666dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 667dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 668757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 669757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final long getLongUnchecked(int i) { 670dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 671dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 672dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 673e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return getLong(ix(i)); 674e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 675e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 676757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 677757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void getUnchecked(int pos, long[] dst, int dstOffset, int length) { 678dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 679dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 680dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 681f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.peekLongArray(ix(pos), 682190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length, !nativeByteOrder); 683f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 684f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 685dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putLong(long a, long x) { 686fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeLong(a, x, !nativeByteOrder); 687dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 688dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 689dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 690757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 691757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putLong(long x) { 692fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 693d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 6949b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 695dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 696dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 697dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 698fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putLong(ix(nextPutIndex(SizeOf.LONG)), x); 699dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 700dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 701dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 702757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 703757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putLong(int i, long x) { 704fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 705d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 7069b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 707dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 708dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 709dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 710fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putLong(ix(checkIndex(i, SizeOf.LONG)), x); 711dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 712dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 713dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 714757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 715757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putLongUnchecked(int i, long x) { 716dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 717dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 718dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 719e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera putLong(ix(i), x); 720e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 721e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 722757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 723757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putUnchecked(int pos, long[] src, int srcOffset, int length) { 724dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 725dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 726dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 727f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.pokeLongArray(ix(pos), 728190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length, !nativeByteOrder); 729f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 730f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 731757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 732757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final LongBuffer asLongBuffer() { 733dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 734dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 735f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 736dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 737dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 738dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 739dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 740dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 3; 741757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return new ByteBufferAsLongBuffer(this, 742190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 743190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 744190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 745190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 746190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 747757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller order()); 748dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 749dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 750dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private float getFloat(long a) { 751fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int x = Memory.peekInt(a, !nativeByteOrder); 752fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Float.intBitsToFloat(x); 753dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 754dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 755757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 756757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final float getFloat() { 757fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 758d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 7599b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 760fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getFloat(ix(nextGetIndex(SizeOf.FLOAT))); 761dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 762dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 763757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 764757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final float getFloat(int i) { 765fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 766d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 7679b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 768fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getFloat(ix(checkIndex(i, SizeOf.FLOAT))); 769dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 770dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 771757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 772757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final float getFloatUnchecked(int i) { 773dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 774dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 775dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 776e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return getFloat(ix(i)); 777e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 778e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 779757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 780757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void getUnchecked(int pos, float[] dst, int dstOffset, int length) { 781dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 782dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 783dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 784f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.peekFloatArray(ix(pos), 785190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length, !nativeByteOrder); 786f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 787f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 788dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putFloat(long a, float x) { 789fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera int y = Float.floatToRawIntBits(x); 790fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeInt(a, y, !nativeByteOrder); 791dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 792dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 793dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 794757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 795757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putFloat(float x) { 796fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 797d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 7989b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 799dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 800dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 801dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 802fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putFloat(ix(nextPutIndex(SizeOf.FLOAT)), x); 803dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 804dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 805dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 806757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 807757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putFloat(int i, float x) { 808fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 809d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 8109b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 811dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 812dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 813dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 814fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putFloat(ix(checkIndex(i, SizeOf.FLOAT)), x); 815dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 816dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 817dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 818757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 819757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putFloatUnchecked(int i, float x) { 820dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 821dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 822dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 823e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera putFloat(ix(i), x); 824e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 825e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 826757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 827757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putUnchecked(int pos, float[] src, int srcOffset, int length) { 828dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 829dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 830dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 831f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.pokeFloatArray(ix(pos), 832190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length, !nativeByteOrder); 833f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 834f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 835757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 836757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final FloatBuffer asFloatBuffer() { 837dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 838dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 839f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 840dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 841dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 842dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 843dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 844dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 2; 845757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return new ByteBufferAsFloatBuffer(this, 846190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 847190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 848190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 849190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 850190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 851757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller order()); 852dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 853dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 854dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private double getDouble(long a) { 855fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera long x = Memory.peekLong(a, !nativeByteOrder); 856fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return Double.longBitsToDouble(x); 857dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 858dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 859757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 860757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final double getDouble() { 861fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 862d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 8639b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 864fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getDouble(ix(nextGetIndex(SizeOf.DOUBLE))); 865dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 866dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 867757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 868757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final double getDouble(int i) { 869fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 870d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 8719b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 872fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera return getDouble(ix(checkIndex(i, SizeOf.DOUBLE))); 873dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 874dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 875757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 876757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final double getDoubleUnchecked(int i) { 877dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 878dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 879dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 880e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera return getDouble(ix(i)); 881e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 882e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 883757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 884757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void getUnchecked(int pos, double[] dst, int dstOffset, int length) { 885dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 886dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 887dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 888f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.peekDoubleArray(ix(pos), 889190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera dst, dstOffset, length, !nativeByteOrder); 890f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 891f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 892dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski private ByteBuffer putDouble(long a, double x) { 893fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera long y = Double.doubleToRawLongBits(x); 894fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera Memory.pokeLong(a, y, !nativeByteOrder); 895dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 896dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 897dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 898757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 899757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putDouble(double x) { 900fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 901d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 9029b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 903dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 904dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 905dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 906fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putDouble(ix(nextPutIndex(SizeOf.DOUBLE)), x); 907dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 908dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 909dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 910757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 911757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final ByteBuffer putDouble(int i, double x) { 912fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath if (!memoryRef.isAccessible) { 913d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 9149b30f636b4ce3e4c48a817d7b2f7bd7a8d579631Shubham Ajmera } 915dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (isReadOnly) { 916dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new ReadOnlyBufferException(); 917dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 918fde0200e844b5c508b628da74a15eff193f31745Shubham Ajmera putDouble(ix(checkIndex(i, SizeOf.DOUBLE)), x); 919dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski return this; 920dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 921dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 922757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 923757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putDoubleUnchecked(int i, double x) { 924dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 925dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 926dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 927e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera putDouble(ix(i), x); 928e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera } 929e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera 930757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 931757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller final void putUnchecked(int pos, double[] src, int srcOffset, int length) { 932dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (!memoryRef.isAccessible) { 933dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer is inaccessible"); 934dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera } 935f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera Memory.pokeDoubleArray(ix(pos), 936190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera src, srcOffset, length, !nativeByteOrder); 937f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera } 938f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera 939757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 940757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final DoubleBuffer asDoubleBuffer() { 941dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera if (memoryRef.isFreed) { 942dc5090e980361d9c0831c2a7ecd5341d50fc2b00Shubham Ajmera throw new IllegalStateException("buffer has been freed"); 943f4145724170d5e3e52b3bf683d527fa5698cb12dShubham Ajmera } 944dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int off = this.position(); 945dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int lim = this.limit(); 946dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski assert (off <= lim); 947dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int rem = (off <= lim ? lim - off : 0); 948dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 949dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski int size = rem >> 3; 950757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller return new ByteBufferAsDoubleBuffer(this, 951190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera -1, 952190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera 0, 953190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 954190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera size, 955190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera off, 956757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller order()); 957dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski } 958dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski 959757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 960757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final boolean isAccessible() { 961fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath return memoryRef.isAccessible; 962d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera } 963d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera 964757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller @Override 965757b76e91f9d1f8006a970d9ca894b81c6fadea8Neil Fuller public final void setAccessible(boolean value) { 966fe0e5d3e460de87d24e0224ef10b089289355c47Narayan Kamath memoryRef.isAccessible = value; 967d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera } 968dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski} 969