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