HeapByteBuffer.java revision 069d99326386490f9492afd824a364c5fb645e41
1dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/*
2dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Copyright (c) 2000, 2008, 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
27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskipackage java.nio;
28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
30dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/**
31dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * A read/write HeapByteBuffer.
32dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */
33dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
34dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskiclass HeapByteBuffer
35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    extends ByteBuffer
36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski{
37dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
38dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    // For speed these fields are actually declared in X-Buffer;
39dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    // these declarations are here as documentation
40dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    /*
41dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
42069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera      protected final byte[] hb;
43069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera      protected final int offset;
44dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
45dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    */
46dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
47069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    private final boolean isReadOnly;
48dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
49069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(int cap, int lim) {            // package-private
50069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(cap, lim, false);
51069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
52dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
53dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
54069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(int cap, int lim, boolean isReadOnly) {            // package-private
55069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        super(-1, 0, lim, cap, new byte[cap], 0);
56069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
57dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
59dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    HeapByteBuffer(byte[] buf, int off, int len) { // package-private
60069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(buf, off, len, false);
61069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
62dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
63069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(byte[] buf, int off, int len, boolean isReadOnly) { // package-private
64dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        super(-1, off, off + len, buf.length, buf, 0);
65069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
66dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
67dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
68dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    protected HeapByteBuffer(byte[] buf,
69069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int mark, int pos, int lim, int cap,
70069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int off) {
71069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(buf, mark, pos, lim, cap, off, false);
72069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
73dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
74069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    protected HeapByteBuffer(byte[] buf,
75069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int mark, int pos, int lim, int cap,
76069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int off, boolean isReadOnly) {
77dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        super(mark, pos, lim, cap, buf, off);
78069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
79dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
80dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
81dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer slice() {
82dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return new HeapByteBuffer(hb,
83069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  -1,
84069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  0,
85069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.remaining(),
86069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.remaining(),
87069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.position() + offset);
88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
89dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
90dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer duplicate() {
91dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return new HeapByteBuffer(hb,
92069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.markValue(),
93069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.position(),
94069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.limit(),
95069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.capacity(),
96069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  offset);
97dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
98dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
99dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer asReadOnlyBuffer() {
100dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
101069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        return new HeapByteBuffer(hb,
102069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.markValue(),
103069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.position(),
104069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.limit(),
105069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.capacity(),
106069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  offset, true);
107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
110dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    protected int ix(int i) {
113dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return i + offset;
114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
116dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public byte get() {
117dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[ix(nextGetIndex())];
118dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
119dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
120dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public byte get(int i) {
121dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[ix(checkIndex(i))];
122dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer get(byte[] dst, int offset, int length) {
125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        checkBounds(offset, length, dst.length);
126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (length > remaining())
127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            throw new BufferUnderflowException();
128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(hb, ix(position()), dst, offset, length);
129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(position() + length);
130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
131dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
132dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public boolean isDirect() {
134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return false;
135dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
136dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
137dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public boolean isReadOnly() {
138069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        return isReadOnly;
139dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
140dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
141dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(byte x) {
142069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
143069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
144069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
145dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[ix(nextPutIndex())] = x;
146dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
147dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
148dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
149dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(int i, byte x) {
150069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
151069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
152069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
153dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[ix(checkIndex(i))] = x;
154dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
155dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
156dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
157dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(byte[] src, int offset, int length) {
158069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
159069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
160069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
161dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        checkBounds(offset, length, src.length);
162dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (length > remaining())
163dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            throw new BufferOverflowException();
164dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(src, offset, hb, ix(position()), length);
165dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(position() + length);
166dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
167dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
168dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
169dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(ByteBuffer src) {
170069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
171069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
172069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (src instanceof HeapByteBuffer) {
174dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            if (src == this)
175dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                throw new IllegalArgumentException();
176dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            HeapByteBuffer sb = (HeapByteBuffer)src;
177dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            int n = sb.remaining();
178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            if (n > remaining())
179dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                throw new BufferOverflowException();
180dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            System.arraycopy(sb.hb, sb.ix(sb.position()),
181dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                             hb, ix(position()), n);
182dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            sb.position(sb.position() + n);
183dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            position(position() + n);
184dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        } else if (src.isDirect()) {
185dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            int n = src.remaining();
186dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            if (n > remaining())
187dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                throw new BufferOverflowException();
188dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            src.get(hb, ix(position()), n);
189dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            position(position() + n);
190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        } else {
191dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            super.put(src);
192dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        }
193dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
194dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
195dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
196dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer compact() {
197069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
198069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
199069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
200dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(hb, ix(position()), hb, ix(0), remaining());
201dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(remaining());
202dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        limit(capacity());
203dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        discardMark();
204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
205dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
206dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
207dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    byte _get(int i) {                          // package-private
208dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[i];
209dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
210dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
211dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    void _put(int i, byte b) {                  // package-private
212069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
213069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
214069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
215dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[i] = b;
216dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
217dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public char getChar() {
219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian);
220dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
221dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
222dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public char getChar(int i) {
223dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian);
224dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
225dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
226dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putChar(char x) {
227069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
228069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
229069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
230dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian);
231dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
232dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
233dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
234dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putChar(int i, char x) {
235069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
236069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
237069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
238dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian);
239dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
240dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
241dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
242dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public CharBuffer asCharBuffer() {
243dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 1;
244dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int off = offset + position();
245069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
246069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
247069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (CharBuffer)(new ByteBufferAsCharBufferRB(this,
248069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                -1,
249069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                0,
250069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
251069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
252069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                off))
253069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (CharBuffer)(new ByteBufferAsCharBufferRL(this,
254069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                -1,
255069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                0,
256069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
257069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
258069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                off)));
259069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        } else {
260069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
261069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (CharBuffer)(new ByteBufferAsCharBufferB(this,
262dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               -1,
263dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               0,
264dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
265dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
266dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               off))
267069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (CharBuffer)(new ByteBufferAsCharBufferL(this,
268dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               -1,
269dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               0,
270dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
271dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
272dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               off)));
273069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
274dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
275dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
276dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public short getShort() {
277dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian);
278dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
279dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
280dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public short getShort(int i) {
281dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian);
282dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
283dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
284dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putShort(short x) {
285069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
286069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
287069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
288dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putShort(this, ix(nextPutIndex(2)), x, bigEndian);
289dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putShort(int i, short x) {
293069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
294069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
295069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putShort(this, ix(checkIndex(i, 2)), x, bigEndian);
297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
300dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ShortBuffer asShortBuffer() {
301dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 1;
302dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int off = offset + position();
303069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
304069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
305069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (ShortBuffer)(new ByteBufferAsShortBufferRB(this,
306069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  -1,
307069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  0,
308069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
309069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
310069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  off))
311069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (ShortBuffer)(new ByteBufferAsShortBufferRL(this,
312069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  -1,
313069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  0,
314069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
315069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
316069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  off)));
317069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        } else {
318069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
319069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (ShortBuffer)(new ByteBufferAsShortBufferB(this,
320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 -1,
321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 0,
322dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
323dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
324dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 off))
325069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (ShortBuffer)(new ByteBufferAsShortBufferL(this,
326dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 -1,
327dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 0,
328dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
329dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
330dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 off)));
331069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
332dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
333dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
334dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public int getInt() {
335dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
336dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
337dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
338dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public int getInt(int i) {
339dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian);
340dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
341dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
342dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putInt(int x) {
343069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
344069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
345069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian);
347dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
348dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
349dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
350dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putInt(int i, int x) {
351069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
352069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
353069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
354dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian);
355dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
356dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
357dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
358dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public IntBuffer asIntBuffer() {
359dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 2;
360dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int off = offset + position();
361069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
362069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
363069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (IntBuffer)(new ByteBufferAsIntBufferRB(this,
364069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              -1,
365069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              0,
366069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              size,
367069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              size,
368069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              off))
369069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (IntBuffer)(new ByteBufferAsIntBufferRL(this,
370069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              -1,
371069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              0,
372069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              size,
373069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              size,
374069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                              off)));
375069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        } else {
376069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
377069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (IntBuffer)(new ByteBufferAsIntBufferB(this,
378dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             -1,
379dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             0,
380dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             size,
381dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             size,
382dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             off))
383069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (IntBuffer)(new ByteBufferAsIntBufferL(this,
384dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             -1,
385dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             0,
386dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             size,
387dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             size,
388dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                             off)));
389069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
390dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
391069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
392dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
393dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public long getLong() {
394dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian);
395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public long getLong(int i) {
398dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian);
399dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
400dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
401dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putLong(long x) {
404069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
405069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
406069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
407dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian);
408dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
409dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
410dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
411dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putLong(int i, long x) {
412069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
413069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
414069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
415dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian);
416dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public LongBuffer asLongBuffer() {
420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 3;
421dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int off = offset + position();
422069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
423069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
424069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (LongBuffer)(new ByteBufferAsLongBufferRB(this,
425069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                -1,
426069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                0,
427069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
428069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
429069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                off))
430069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (LongBuffer)(new ByteBufferAsLongBufferRL(this,
431069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                -1,
432069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                0,
433069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
434069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                size,
435069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                off)));
436069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        } else {
437069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
438069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (LongBuffer)(new ByteBufferAsLongBufferB(this,
439dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               -1,
440dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               0,
441dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
442dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
443dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               off))
444069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (LongBuffer)(new ByteBufferAsLongBufferL(this,
445dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               -1,
446dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               0,
447dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
448dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               size,
449dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                               off)));
450069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
451dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
452dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
453dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public float getFloat() {
454dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian);
455dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
456dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
457dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public float getFloat(int i) {
458dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian);
459dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
460dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
461dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
462dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
463dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putFloat(float x) {
464069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
465069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
466069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
467dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian);
468dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
469dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
470dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
471dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putFloat(int i, float x) {
472069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
473069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
474069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
475dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian);
476dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
477dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
478dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
479dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public FloatBuffer asFloatBuffer() {
480dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 2;
481dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int off = offset + position();
482069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
483069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
484069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (FloatBuffer)(new ByteBufferAsFloatBufferRB(this,
485069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  -1,
486069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  0,
487069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
488069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
489069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  off))
490069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (FloatBuffer)(new ByteBufferAsFloatBufferRL(this,
491069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  -1,
492069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  0,
493069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
494069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  size,
495069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                  off)));
496069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        } else {
497069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
498069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (FloatBuffer)(new ByteBufferAsFloatBufferB(this,
499dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 -1,
500dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 0,
501dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
502dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
503dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 off))
504069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (FloatBuffer)(new ByteBufferAsFloatBufferL(this,
505dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 -1,
506dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 0,
507dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
508dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 size,
509dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                 off)));
510069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
511dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
512dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
513dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public double getDouble() {
514dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian);
515dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
516dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
517dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public double getDouble(int i) {
518dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian);
519dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
520dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
521dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
522dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
523dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putDouble(double x) {
524069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
525069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
526069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
527dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian);
528dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
529dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
530dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
531dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putDouble(int i, double x) {
532069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
533069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
534069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
535dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian);
536dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
537dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
538dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
539dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public DoubleBuffer asDoubleBuffer() {
540dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 3;
541dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int off = offset + position();
542069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
543069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
544069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (DoubleBuffer)(new ByteBufferAsDoubleBufferRB(this,
545069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    -1,
546069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    0,
547069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    size,
548069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    size,
549069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    off))
550069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (DoubleBuffer)(new ByteBufferAsDoubleBufferRL(this,
551069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    -1,
552069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    0,
553069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    size,
554069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    size,
555069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                                                    off)));
556069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        } else {
557069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            return (bigEndian
558069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    ? (DoubleBuffer)(new ByteBufferAsDoubleBufferB(this,
559dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   -1,
560dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   0,
561dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   size,
562dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   size,
563dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   off))
564069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                    : (DoubleBuffer)(new ByteBufferAsDoubleBufferL(this,
565dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   -1,
566dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   0,
567dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   size,
568dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   size,
569dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                                                                   off)));
570069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
571dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
572dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski}
573