1dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/*
22c87ad3a45cecf9e344487cad1abfdebe79f2c7cNarayan Kamath * Copyright (C) 2014 The Android Open Source Project
3dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
4dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski *
6dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it
7dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as
8dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * published by the Free Software Foundation.  Oracle designates this
9dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided
10dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code.
11dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski *
12dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT
13dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that
16dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * accompanied this code).
17dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski *
18dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * You should have received a copy of the GNU General Public License version
19dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation,
20dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski *
22dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
23dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any
24dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * questions.
25dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */
26dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
27dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
28dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebskipackage java.nio;
29dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
30dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
31f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmeraimport libcore.io.Memory;
32f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
33dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski/**
34dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski * A read/write HeapByteBuffer.
35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski */
36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
373781c9c932ef4560c78949d855073566aa91e402Shubham Ajmeraclass HeapByteBuffer extends ByteBuffer {
38dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
39dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    // For speed these fields are actually declared in X-Buffer;
40dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    // these declarations are here as documentation
41dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    /*
42dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
43069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera      protected final byte[] hb;
44069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera      protected final int offset;
45dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
46dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    */
47dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
483781c9c932ef4560c78949d855073566aa91e402Shubham Ajmera    HeapByteBuffer(int cap, int lim) {            // packag-private
49069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(cap, lim, false);
50069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
51dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
52dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
53069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(int cap, int lim, boolean isReadOnly) {            // package-private
54069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        super(-1, 0, lim, cap, new byte[cap], 0);
55069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
56dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
57dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    HeapByteBuffer(byte[] buf, int off, int len) { // package-private
59069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(buf, off, len, false);
60069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
61dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
62069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(byte[] buf, int off, int len, boolean isReadOnly) { // package-private
63dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        super(-1, off, off + len, buf.length, buf, 0);
64069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
65dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
66dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
67dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    protected HeapByteBuffer(byte[] buf,
68069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int mark, int pos, int lim, int cap,
69069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int off) {
70069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(buf, mark, pos, lim, cap, off, false);
71069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
72dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
73069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    protected HeapByteBuffer(byte[] buf,
74069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int mark, int pos, int lim, int cap,
75069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int off, boolean isReadOnly) {
76dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        super(mark, pos, lim, cap, buf, off);
77069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
78dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
79dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
80dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer slice() {
81dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return new HeapByteBuffer(hb,
82190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
83190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
84190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                remaining(),
85190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                remaining(),
86190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                position() + offset,
87190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                isReadOnly);
88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
89dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
90dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer duplicate() {
91dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return new HeapByteBuffer(hb,
92190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                markValue(),
93190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                position(),
94190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                limit(),
95190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                capacity(),
96190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                offset,
97190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                isReadOnly);
98dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
99dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
100dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer asReadOnlyBuffer() {
101069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        return new HeapByteBuffer(hb,
102190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                this.markValue(),
103190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                this.position(),
104190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                this.limit(),
105190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                this.capacity(),
106190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                offset, true);
107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    protected int ix(int i) {
110dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return i + offset;
111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
113dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public byte get() {
114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[ix(nextGetIndex())];
115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
116dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
117dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public byte get(int i) {
118dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[ix(checkIndex(i))];
119dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
120dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
121dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer get(byte[] dst, int offset, int length) {
122dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        checkBounds(offset, length, dst.length);
123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (length > remaining())
124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            throw new BufferUnderflowException();
125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(hb, ix(position()), dst, offset, length);
126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(position() + length);
127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public boolean isDirect() {
131dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return false;
132dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public boolean isReadOnly() {
135069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        return isReadOnly;
136dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
137dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
138dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(byte x) {
139069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
140069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
141069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
142dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[ix(nextPutIndex())] = x;
143dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
144dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
145dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
146dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(int i, byte x) {
147069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
148069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
149069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
150dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[ix(checkIndex(i))] = x;
151dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
152dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
153dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
154dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(byte[] src, int offset, int length) {
155069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
156069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
157069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
158dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        checkBounds(offset, length, src.length);
159dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (length > remaining())
160dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            throw new BufferOverflowException();
161dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(src, offset, hb, ix(position()), length);
162dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(position() + length);
163dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
164dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
165dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
166dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer compact() {
167069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
168069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
169069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(hb, ix(position()), hb, ix(0), remaining());
171dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(remaining());
172dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        limit(capacity());
173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        discardMark();
174dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
175dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
176dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
177dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    byte _get(int i) {                          // package-private
178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[i];
179dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
180dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
181dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    void _put(int i, byte b) {                  // package-private
182069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
183069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
184069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
185dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[i] = b;
186dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
187dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
188dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public char getChar() {
189dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian);
190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
191dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
192dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public char getChar(int i) {
193dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian);
194dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
195dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
196e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    char getCharUnchecked(int i) {
197e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        return Bits.getChar(this, ix(i), bigEndian);
198e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
199e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
200f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void getUnchecked(int pos, char[] dst, int dstOffset, int length) {
201190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkGet(dst, dstOffset, length * 2, hb, ix(pos), 2, !nativeByteOrder);
202f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
203f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putChar(char x) {
205069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
206069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
207069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
208dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian);
209dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
210dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
211dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
212dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putChar(int i, char x) {
213069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
214069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
215069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
216dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian);
217dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
220e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    void putCharUnchecked(int i, char x) {
221e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        Bits.putChar(this, ix(i), x, bigEndian);
222e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
223e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
224f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void putUnchecked(int pos, char[] src, int srcOffset, int length) {
225190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkPut(hb, ix(pos), length * 2, src, srcOffset, 2, !nativeByteOrder);
226f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
227f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
228dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public CharBuffer asCharBuffer() {
229dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 1;
230d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
231190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        return (CharBuffer) (new ByteBufferAsCharBuffer(this,
232190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
233190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
234190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
235190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
236190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                off,
237190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                order()));
238dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
239dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
240dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public short getShort() {
241dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian);
242dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
243dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
244dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public short getShort(int i) {
245dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian);
246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
247dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
248e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    short getShortUnchecked(int i) {
249e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        return Bits.getShort(this, ix(i), bigEndian);
250e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
251e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
252f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void getUnchecked(int pos, short[] dst, int dstOffset, int length) {
253190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkGet(dst, dstOffset, length * 2, hb, ix(pos), 2, !nativeByteOrder);
254f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
255f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
256dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putShort(short x) {
257069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
258069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
259069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
260dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putShort(this, ix(nextPutIndex(2)), x, bigEndian);
261dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
262dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
263dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
264dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putShort(int i, short x) {
265069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
266069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
267069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
268dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putShort(this, ix(checkIndex(i, 2)), x, bigEndian);
269dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
270dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
271dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
272e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    void putShortUnchecked(int i, short x) {
273e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        Bits.putShort(this, ix(i), x, bigEndian);
274e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
275e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
276f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void putUnchecked(int pos, short[] src, int srcOffset, int length) {
277190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkPut(hb, ix(pos), length * 2, src, srcOffset, 2, !nativeByteOrder);
278f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
279f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
280dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ShortBuffer asShortBuffer() {
281dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 1;
282d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
283490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera        return new ByteBufferAsShortBuffer(this,
284190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
285190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
286190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
287190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
288190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                off,
289190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                order());
290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public int getInt() {
293dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
294dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
295dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public int getInt(int i) {
297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian);
298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
300e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    int getIntUnchecked(int i) {
301e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        return Bits.getInt(this, ix(i), bigEndian);
302e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
303e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
304f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void getUnchecked(int pos, int[] dst, int dstOffset, int length) {
305190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkGet(dst, dstOffset, length * 4, hb, ix(pos), 4, !nativeByteOrder);
306f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
307f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putInt(int x) {
309069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
310069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
311069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
312dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian);
313dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
314dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
315dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
316dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putInt(int i, int x) {
317069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
318069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
319069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian);
321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
322dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
323dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
324e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    void putIntUnchecked(int i, int x) {
325e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        Bits.putInt(this, ix(i), x, bigEndian);
326e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
327e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
328f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void putUnchecked(int pos, int[] src, int srcOffset, int length) {
329190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkPut(hb, ix(pos), length * 4, src, srcOffset, 4, !nativeByteOrder);
330f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
331f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
332dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public IntBuffer asIntBuffer() {
333dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 2;
334d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
335dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
336190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        return (IntBuffer) (new ByteBufferAsIntBuffer(this,
337190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
338190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
339190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
340190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
341190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                off,
342190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                order()));
343069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
344dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
345dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public long getLong() {
346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian);
347dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
348dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
349dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public long getLong(int i) {
350dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian);
351dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
352dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
353e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    long getLongUnchecked(int i) {
354e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        return Bits.getLong(this, ix(i), bigEndian);
355e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
356e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
357f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void getUnchecked(int pos, long[] dst, int dstOffset, int length) {
358190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkGet(dst, dstOffset, length * 8, hb, ix(pos), 8, !nativeByteOrder);
359f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
360f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
361dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putLong(long x) {
362069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
363069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
364069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
365dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian);
366dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
367dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
368dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
369dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putLong(int i, long x) {
370069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
371069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
372069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
373dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian);
374dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
375dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
376dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
377e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    void putLongUnchecked(int i, long x) {
378e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        Bits.putLong(this, ix(i), x, bigEndian);
379f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
380f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
381f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void putUnchecked(int pos, long[] src, int srcOffset, int length) {
382190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkPut(hb, ix(pos), length * 8, src, srcOffset, 8, !nativeByteOrder);
383f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
384e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
385dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public LongBuffer asLongBuffer() {
386dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 3;
387d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
388190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        return (LongBuffer) (new ByteBufferAsLongBuffer(this,
389190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
390190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
391190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
392190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
393190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                off,
394190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                order()));
395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public float getFloat() {
398dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian);
399dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
400dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
401dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public float getFloat(int i) {
402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian);
403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
404dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
405e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    float getFloatUnchecked(int i) {
406e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        return Bits.getFloat(this, ix(i), bigEndian);
407e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
408dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
409f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void getUnchecked(int pos, float[] dst, int dstOffset, int length) {
410190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkGet(dst, dstOffset, length * 4, hb, ix(pos), 4, !nativeByteOrder);
411f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
412f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
413dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putFloat(float x) {
414069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
415069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
416069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian);
418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
421dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putFloat(int i, float x) {
422069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
423069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
424069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
425dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian);
426dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
427dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
428dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
429e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    void putFloatUnchecked(int i, float x) {
430e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        Bits.putFloat(this, ix(i), x, bigEndian);
431e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
432e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
433f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void putUnchecked(int pos, float[] src, int srcOffset, int length) {
434190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkPut(hb, ix(pos), length * 4, src, srcOffset, 4, !nativeByteOrder);
435f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
436f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
437dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public FloatBuffer asFloatBuffer() {
438dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 2;
439d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
440190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        return (FloatBuffer) (new ByteBufferAsFloatBuffer(this,
441190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
442190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
443190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
444190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
445190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                off,
446190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                order()));
447dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
448dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
449dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public double getDouble() {
450dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian);
451dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
452dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
453dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public double getDouble(int i) {
454dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian);
455dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
456dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
457e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    double getDoubleUnchecked(int i) {
458e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        return Bits.getDouble(this, ix(i), bigEndian);
459e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
460dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
461f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void getUnchecked(int pos, double[] dst, int dstOffset, int length) {
462190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkGet(dst, dstOffset, length * 8, hb, ix(pos), 8, !nativeByteOrder);
463f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
464f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
465dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putDouble(double x) {
466069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
467069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
468069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
469dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian);
470dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
471dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
472dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
473dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putDouble(int i, double x) {
474069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
475069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
476069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
477dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian);
478dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
479dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
480dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
481e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    void putDoubleUnchecked(int i, double x) {
482e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera        Bits.putDouble(this, ix(i), x, bigEndian);
483e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera    }
484e20e1b55eab0f2163e812a28cf3b3a682df38a1dShubham Ajmera
485f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    void putUnchecked(int pos, double[] src, int srcOffset, int length) {
486190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        Memory.unsafeBulkPut(hb, ix(pos), length * 8, src, srcOffset, 8, !nativeByteOrder);
487f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera    }
488f28b09a791e4e5635e4fcdfd1adde27aec0a1ed6Shubham Ajmera
489dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public DoubleBuffer asDoubleBuffer() {
490dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 3;
491d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
492190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera        return (DoubleBuffer) (new ByteBufferAsDoubleBuffer(this,
493190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                -1,
494190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                0,
495190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
496190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                size,
497190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                off,
498190a49036750b8bb6c979d958ed56aa3fb4f408aShubham Ajmera                order()));
499dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
500dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski}
501