HeapByteBuffer.java revision d80eadc041c833c2808beb823f4edb90ff7410f7
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
343781c9c932ef4560c78949d855073566aa91e402Shubham Ajmeraclass HeapByteBuffer extends ByteBuffer {
35dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
36dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    // For speed these fields are actually declared in X-Buffer;
37dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    // these declarations are here as documentation
38dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    /*
39dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
40069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera      protected final byte[] hb;
41069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera      protected final int offset;
42dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
43dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    */
44dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
453781c9c932ef4560c78949d855073566aa91e402Shubham Ajmera    HeapByteBuffer(int cap, int lim) {            // packag-private
46069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(cap, lim, false);
47069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
48dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
49dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
50069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(int cap, int lim, boolean isReadOnly) {            // package-private
51069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        super(-1, 0, lim, cap, new byte[cap], 0);
52069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
53dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
54dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
55dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    HeapByteBuffer(byte[] buf, int off, int len) { // package-private
56069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(buf, off, len, false);
57069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
58dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
59069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    HeapByteBuffer(byte[] buf, int off, int len, boolean isReadOnly) { // package-private
60dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        super(-1, off, off + len, buf.length, buf, 0);
61069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
62dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
63dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
64dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    protected HeapByteBuffer(byte[] buf,
65069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int mark, int pos, int lim, int cap,
66069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int off) {
67069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this(buf, mark, pos, lim, cap, off, false);
68069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
69dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
70069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    protected HeapByteBuffer(byte[] buf,
71069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int mark, int pos, int lim, int cap,
72069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                             int off, boolean isReadOnly) {
73dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        super(mark, pos, lim, cap, buf, off);
74069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        this.isReadOnly = isReadOnly;
75dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
76dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
77dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer slice() {
78dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return new HeapByteBuffer(hb,
79069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  -1,
80069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  0,
81d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  remaining(),
82d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  remaining(),
83d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  position() + offset,
84d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  isReadOnly);
85dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
86dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
87dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer duplicate() {
88dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return new HeapByteBuffer(hb,
89d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  markValue(),
90d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  position(),
91d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  limit(),
92d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  capacity(),
93d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  offset,
94d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera                                  isReadOnly);
95dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
96dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
97dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer asReadOnlyBuffer() {
98069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        return new HeapByteBuffer(hb,
99069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.markValue(),
100069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.position(),
101069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.limit(),
102069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  this.capacity(),
103069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera                                  offset, true);
104dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
105dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
106dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    protected int ix(int i) {
107dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return i + offset;
108dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
109dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
110dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public byte get() {
111dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[ix(nextGetIndex())];
112dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
113dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
114dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public byte get(int i) {
115dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[ix(checkIndex(i))];
116dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
117dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
118dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer get(byte[] dst, int offset, int length) {
119dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        checkBounds(offset, length, dst.length);
120dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (length > remaining())
121dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            throw new BufferUnderflowException();
122dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(hb, ix(position()), dst, offset, length);
123dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(position() + length);
124dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
125dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
126dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
127dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public boolean isDirect() {
128dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return false;
129dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
130dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
131dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public boolean isReadOnly() {
132069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        return isReadOnly;
133dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
134dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
135dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(byte x) {
136069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
137069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
138069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
139dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[ix(nextPutIndex())] = x;
140dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
141dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
142dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
143dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(int i, byte x) {
144069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
145069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
146069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
147dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[ix(checkIndex(i))] = x;
148dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
149dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
150dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
151dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(byte[] src, int offset, int length) {
152069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
153069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
154069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
155dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        checkBounds(offset, length, src.length);
156dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (length > remaining())
157dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            throw new BufferOverflowException();
158dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(src, offset, hb, ix(position()), length);
159dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(position() + length);
160dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
161dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
162dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
163dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer put(ByteBuffer src) {
164069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
165069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
166069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
167dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        if (src instanceof HeapByteBuffer) {
168dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            if (src == this)
169dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                throw new IllegalArgumentException();
170dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            HeapByteBuffer sb = (HeapByteBuffer)src;
171dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            int n = sb.remaining();
172dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            if (n > remaining())
173dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                throw new BufferOverflowException();
174dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            System.arraycopy(sb.hb, sb.ix(sb.position()),
175dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                             hb, ix(position()), n);
176dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            sb.position(sb.position() + n);
177dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            position(position() + n);
178dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        } else if (src.isDirect()) {
179dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            int n = src.remaining();
180dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            if (n > remaining())
181dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski                throw new BufferOverflowException();
182dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            src.get(hb, ix(position()), n);
183dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            position(position() + n);
184dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        } else {
185dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski            super.put(src);
186dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        }
187dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
188dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
189dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
190dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer compact() {
191069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
192069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
193069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
194dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        System.arraycopy(hb, ix(position()), hb, ix(0), remaining());
195dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        position(remaining());
196dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        limit(capacity());
197dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        discardMark();
198dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
199dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
200dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
201dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    byte _get(int i) {                          // package-private
202dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return hb[i];
203dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
204dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
205dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    void _put(int i, byte b) {                  // package-private
206069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
207069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
208069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
209dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        hb[i] = b;
210dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
211dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
212dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public char getChar() {
213dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getChar(this, ix(nextGetIndex(2)), bigEndian);
214dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
215dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
216dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public char getChar(int i) {
217dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getChar(this, ix(checkIndex(i, 2)), bigEndian);
218dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
219dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
220dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putChar(char x) {
221069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
222069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
223069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
224dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putChar(this, ix(nextPutIndex(2)), x, bigEndian);
225dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
226dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
227dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
228dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putChar(int i, char x) {
229069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
230069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
231069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
232dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putChar(this, ix(checkIndex(i, 2)), x, bigEndian);
233dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
234dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
235dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
236dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public CharBuffer asCharBuffer() {
237dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 1;
238d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
239622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera        return (CharBuffer)(new ByteBufferAsCharBuffer(this,
240622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera                                                       -1,
241622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera                                                       0,
242622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera                                                       size,
243622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera                                                       size,
244622cc37ae444f5cbe18417a0b2da3cc14c85d219Shubham Ajmera                                                       off,
24546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                       order()));
246dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
247dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
248dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public short getShort() {
249dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getShort(this, ix(nextGetIndex(2)), bigEndian);
250dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
251dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
252dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public short getShort(int i) {
253dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getShort(this, ix(checkIndex(i, 2)), bigEndian);
254dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
255dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
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
272dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ShortBuffer asShortBuffer() {
273dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 1;
274d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
275490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera        return new ByteBufferAsShortBuffer(this,
276490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                           -1,
277490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                           0,
278490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                           size,
279490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                           size,
280490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                           off,
28146edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                           order());
282dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
283dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
284dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public int getInt() {
285dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getInt(this, ix(nextGetIndex(4)), bigEndian);
286dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
287dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
288dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public int getInt(int i) {
289dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getInt(this, ix(checkIndex(i, 4)), bigEndian);
290dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
291dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
292dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putInt(int x) {
293069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
294069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
295069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
296dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putInt(this, ix(nextPutIndex(4)), x, bigEndian);
297dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
298dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
299dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
300dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putInt(int i, int x) {
301069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
302069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
303069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
304dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putInt(this, ix(checkIndex(i, 4)), x, bigEndian);
305dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
306dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
307dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
308dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public IntBuffer asIntBuffer() {
309dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 2;
310d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
311dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
3123781c9c932ef4560c78949d855073566aa91e402Shubham Ajmera        return (IntBuffer)(new ByteBufferAsIntBuffer(this,
313490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                                     -1,
314490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                                     0,
315490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                                     size,
316490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                                     size,
317490d8356c6d541aa296c5bf19b872473cd78deb8Shubham Ajmera                                                     off,
31846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                     order()));
319069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera    }
320dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
321dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public long getLong() {
322dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getLong(this, ix(nextGetIndex(8)), bigEndian);
323dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
324dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
325dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public long getLong(int i) {
326dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getLong(this, ix(checkIndex(i, 8)), bigEndian);
327dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
328dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
329dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putLong(long x) {
330069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
331069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
332069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
333dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putLong(this, ix(nextPutIndex(8)), x, bigEndian);
334dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
335dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
336dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
337dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putLong(int i, long x) {
338069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
339069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
340069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
341dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putLong(this, ix(checkIndex(i, 8)), x, bigEndian);
342dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
343dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
344dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
345dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public LongBuffer asLongBuffer() {
346dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 3;
347d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
348cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera        return (LongBuffer)(new ByteBufferAsLongBuffer(this,
349cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera                                                       -1,
350cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera                                                       0,
351cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera                                                       size,
352cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera                                                       size,
353cb270ef16cdf175422468ea7d69a8df47cfddff6Shubham Ajmera                                                       off,
35446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                       order()));
355dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
356dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
357dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public float getFloat() {
358dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getFloat(this, ix(nextGetIndex(4)), bigEndian);
359dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
360dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
361dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public float getFloat(int i) {
362dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getFloat(this, ix(checkIndex(i, 4)), bigEndian);
363dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
364dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
365dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
366dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
367dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putFloat(float x) {
368069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
369069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
370069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
371dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putFloat(this, ix(nextPutIndex(4)), x, bigEndian);
372dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
373dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
374dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
375dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putFloat(int i, float x) {
376069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
377069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
378069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
379dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putFloat(this, ix(checkIndex(i, 4)), x, bigEndian);
380dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
381dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
382dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
383dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public FloatBuffer asFloatBuffer() {
384dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 2;
385d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
38634dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera        return (FloatBuffer)(new ByteBufferAsFloatBuffer(this,
38734dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera                                                         -1,
38834dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera                                                         0,
38934dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera                                                         size,
39034dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera                                                         size,
39134dd9b7638f85b80ae4082f36c76263904e1c3e4Shubham Ajmera                                                         off,
39246edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                         order()));
393dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
394dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
395dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public double getDouble() {
396dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getDouble(this, ix(nextGetIndex(8)), bigEndian);
397dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
398dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
399dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public double getDouble(int i) {
400dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return Bits.getDouble(this, ix(checkIndex(i, 8)), bigEndian);
401dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
402dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
403dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
404dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
405dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putDouble(double x) {
406069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
407069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
408069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
409dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putDouble(this, ix(nextPutIndex(8)), x, bigEndian);
410dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
411dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
412dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
413dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public ByteBuffer putDouble(int i, double x) {
414069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        if (isReadOnly) {
415069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera            throw new ReadOnlyBufferException();
416069d99326386490f9492afd824a364c5fb645e41Shubham Ajmera        }
417dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        Bits.putDouble(this, ix(checkIndex(i, 8)), x, bigEndian);
418dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        return this;
419dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
420dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski
421dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    public DoubleBuffer asDoubleBuffer() {
422dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski        int size = this.remaining() >> 3;
423d80eadc041c833c2808beb823f4edb90ff7410f7Shubham Ajmera        int off = position();
42446edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera        return (DoubleBuffer)(new ByteBufferAsDoubleBuffer(this,
42546edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                           -1,
42646edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                           0,
42746edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                           size,
42846edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                           size,
42946edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                           off,
43046edfaf31e67122f4f67780a83a0bda4dfbbf6a7Shubham Ajmera                                                           order()));
431dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski    }
432dee594e6a72064fc994b305487a61f2e2bb250e1Piotr Jastrzebski}
433