FloatBuffer.java revision eaa2ff09069424b0f7a95c7cd831cef1b744fe67
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.nio;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A buffer of floats.
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A float buffer can be created in either of the following ways:
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul>
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #allocate(int) Allocate} a new float array and create a buffer
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * based on it;</li>
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #wrap(float[]) Wrap} an existing float array to create a new
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer;</li>
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Use {@link java.nio.ByteBuffer#asFloatBuffer() ByteBuffer.asFloatBuffer}
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to create a float buffer based on a byte buffer.</li>
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul>
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
33eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilsonpublic abstract class FloatBuffer extends Buffer implements
34eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        Comparable<FloatBuffer> {
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a float buffer based on a newly allocated float array.
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param capacity
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the capacity of the new buffer.
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created float buffer.
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code capacity} is less than zero.
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static FloatBuffer allocate(int capacity) {
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (capacity < 0) {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException();
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return BufferFactory.newFloatBuffer(capacity);
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new float buffer by wrapping the given float array.
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code wrap(array, 0, array.length)}.
57eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param array
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float array which the new buffer will be based on.
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created float buffer.
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static FloatBuffer wrap(float[] array) {
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return wrap(array, 0, array.length);
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new float buffer by wrapping the given float array.
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be {@code start}, limit will be
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code start + len}, capacity will be the length of the array.
71eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param array
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float array which the new buffer will be based on.
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param start
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the start index, must not be negative and not greater than
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code array.length}.
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param len
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the length, must not be negative and not greater than
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code array.length - start}.
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created float buffer.
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if either {@code start} or {@code len} is invalid.
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception NullPointerException
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code array} is null.
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static FloatBuffer wrap(float[] array, int start, int len) {
87eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        if (array == null) {
88eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson            throw new NullPointerException();
89eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        }
90eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        if (start < 0 || len < 0 || (long) start + (long) len > array.length) {
91eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson            throw new IndexOutOfBoundsException();
92eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        }
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        FloatBuffer buf = BufferFactory.newFloatBuffer(array);
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.position = start;
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.limit = start + len;
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buf;
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a {@code FloatBuffer} with given capacity.
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param capacity  The capacity of the buffer
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    FloatBuffer(int capacity) {
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(capacity);
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // BEGIN android-added
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        _elementSizeShift = 2;
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // END android-added
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the float array which this buffer is based on, if there is one.
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the float array which this buffer is based on.
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if this buffer is based on an array, but it is read-only.
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception UnsupportedOperationException
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if this buffer is not based on an array.
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final float[] array() {
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArray();
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the offset of the float array which this buffer is based on, if
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * there is one.
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The offset is the index of the array and corresponds to the zero position
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the buffer.
132eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the offset of the float array which this buffer is based on.
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if this buffer is based on an array, but it is read-only.
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception UnsupportedOperationException
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if this buffer is not based on an array.
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int arrayOffset() {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArrayOffset();
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // BEGIN android-added
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override Object _array() {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (hasArray()) {
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return array();
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return null;
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override int _arrayOffset() {
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (hasArray()) {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return arrayOffset();
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return 0;
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // END android-added
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a read-only buffer that shares its content with this buffer.
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The returned buffer is guaranteed to be a new instance, even if this
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is read-only itself. The new buffer's position, limit, capacity
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and mark are the same as this buffer.
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means this
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the new buffer. The two
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's position, limit and mark are independent.
169eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a read-only version of this buffer.
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer asReadOnlyBuffer();
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compacts this float buffer.
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The remaining floats will be moved to the head of the buffer, starting
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * from position zero. Then the position is set to {@code remaining()}; the
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * limit is set to capacity; the mark is cleared.
180eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer compact();
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compare the remaining floats of this buffer to another float buffer's
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * remaining floats.
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param otherBuffer
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            another float buffer.
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a negative value if this is less than {@code otherBuffer}; 0 if
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         this equals to {@code otherBuffer}; a positive value if this is
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         greater than {@code otherBuffer}.
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ClassCastException
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code otherBuffer} is not a float buffer.
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int compareTo(FloatBuffer otherBuffer) {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining()
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                : otherBuffer.remaining();
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int thisPos = position;
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPos = otherBuffer.position;
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float thisFloat, otherFloat;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (compareRemaining > 0) {
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisFloat = get(thisPos);
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherFloat = otherBuffer.get(otherPos);
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // checks for float and NaN inequality
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((thisFloat != otherFloat)
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && ((thisFloat == thisFloat) || (otherFloat == otherFloat))) {
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return thisFloat < otherFloat ? -1 : 1;
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisPos++;
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherPos++;
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            compareRemaining--;
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return remaining() - otherBuffer.remaining();
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a duplicated buffer that shares its content with this buffer.
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The duplicated buffer's position, limit, capacity and mark are the same
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * as this buffer. The duplicated buffer's read-only property and byte order
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are same as this buffer too.
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
230eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a duplicated buffer that shares its content with this buffer.
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer duplicate();
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Checks whether this float buffer is equal to another object.
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If {@code other} is not a float buffer then {@code false} is returned.
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Two float buffers are equal if and only if their remaining floats are
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * exactly the same. Position, limit, capacity and mark are not considered.
241eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param other
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this float buffer.
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this float buffer is equal to {@code other},
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
247eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object other) {
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(other instanceof FloatBuffer)) {
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        FloatBuffer otherBuffer = (FloatBuffer) other;
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remaining() != otherBuffer.remaining()) {
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPosition = otherBuffer.position;
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean equalSoFar = true;
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (equalSoFar && (myPosition < limit)) {
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            equalSoFar = get(myPosition++) == otherBuffer.get(otherPosition++);
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return equalSoFar;
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the float at the current position and increases the position by
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * 1.
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the float at the current position.
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if the position is equal or greater than limit.
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get();
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array and
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats read.
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code get(dest, 0, dest.length)}.
284eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dest
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination float array.
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code dest.length} is greater than {@code remaining()}.
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer get(float[] dest) {
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return get(dest, 0, dest.length);
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array,
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * starting from the specified offset, and increases the position by the
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats read.
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dest
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target float array.
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param off
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of the float array, must not be negative and no
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code dest.length}.
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param len
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to read, must be no less than zero and no
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code dest.length - off}.
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if either {@code off} or {@code len} is invalid.
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code len} is greater than {@code remaining()}.
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer get(float[] dest, int off, int len) {
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int length = dest.length;
316eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        if (off < 0 || len < 0 || (long) off + (long) len > length) {
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IndexOutOfBoundsException();
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
319eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (len > remaining()) {
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferUnderflowException();
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = off; i < off + len; i++) {
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            dest[i] = get();
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a float at the specified index; the position is not changed.
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than limit.
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a float at the specified index.
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get(int index);
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether this buffer is based on a float array and is
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * read/write.
343eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this buffer is based on a float array and
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         provides read/write access, {@code false} otherwise.
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean hasArray() {
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedHasArray();
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calculates this buffer's hash code from the remaining chars. The
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit, capacity and mark don't affect the hash code.
354eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the hash code calculated from the remaining floats.
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
357eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hash = 0;
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (myPosition < limit) {
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hash = hash + Float.floatToIntBits(get(myPosition++));
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return hash;
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether this buffer is direct. A direct buffer will try its
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * best to take advantage of native memory APIs and it may not stay in the
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Java heap, so it is not affected by garbage collection.
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A float buffer is direct if it is based on a byte buffer and the byte
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is direct.
374eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this buffer is direct, {@code false} otherwise.
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isDirect();
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the byte order used by this buffer when converting floats from/to
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * bytes.
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If this buffer is not based on a byte buffer, then always return the
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * platform's native byte order.
385eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the byte order used by this buffer when converting floats from/to
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         bytes.
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ByteOrder order();
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code array()}.
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code array()}
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract float[] protectedArray();
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code arrayOffset()}.
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code arrayOffset()}
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract int protectedArrayOffset();
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code hasArray()}.
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code hasArray()}
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract boolean protectedHasArray();
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes the given float to the current position and increases the position
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by 1.
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if position is equal or greater than limit.
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(float f);
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array to the current position and
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats written.
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code put(src, 0, src.length)}.
432eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code src.length}.
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final FloatBuffer put(float[] src) {
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return put(src, 0, src.length);
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array, starting from the specified
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * offset, to the current position and increases the position by the number
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of floats written.
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param off
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of float array, must not be negative and not
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code src.length}.
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param len
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to write, must be no less than zero and
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            no greater than {@code src.length - off}.
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code len}.
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if either {@code off} or {@code len} is invalid.
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer put(float[] src, int off, int len) {
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int length = src.length;
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (off < 0 || len < 0 || (long)off + (long)len > length) {
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IndexOutOfBoundsException();
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
471eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (len > remaining()) {
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = off; i < off + len; i++) {
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put(src[i]);
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes all the remaining floats of the {@code src} float buffer to this
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's current position, and increases both buffers' position by the
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats copied.
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float buffer.
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src.remaining()} is greater than this buffer's
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                {@code remaining()}.
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IllegalArgumentException
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src} is this buffer.
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer put(FloatBuffer src) {
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src == this) {
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException();
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src.remaining() > remaining()) {
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float[] contents = new float[src.remaining()];
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        src.get(contents);
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        put(contents);
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes a float to the specified index of this buffer; the position is not
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changed.
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than the limit.
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(int index, float f);
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a sliced buffer that shares its content with this buffer.
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The sliced buffer's capacity will be this buffer's {@code remaining()},
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and its zero position will correspond to this buffer's current position.
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be 0, limit will be its capacity, and its
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * mark is cleared. The new buffer's read-only property and byte order are
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * same as this buffer's.
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a sliced buffer that shares its content with this buffer.
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer slice();
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a string representing the state of this float buffer.
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a string representing the state of this float buffer.
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
548eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
550eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        StringBuilder buf = new StringBuilder();
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(getClass().getName());
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(", status: capacity="); //$NON-NLS-1$
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(capacity());
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(" position="); //$NON-NLS-1$
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(position());
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(" limit="); //$NON-NLS-1$
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(limit());
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buf.toString();
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
561