FloatBuffer.java revision 934767b07d94041390785d8fe66c86b2379730bc
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.
38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
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        }
4929dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes        return new ReadWriteFloatArrayBuffer(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
9429dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes        FloatBuffer buf = new ReadWriteFloatArrayBuffer(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    FloatBuffer(int capacity) {
102934767b07d94041390785d8fe66c86b2379730bcElliott Hughes        super(2, capacity, null);
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final float[] array() {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArray();
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int arrayOffset() {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArrayOffset();
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a read-only buffer that shares its content with this buffer.
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The returned buffer is guaranteed to be a new instance, even if this
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is read-only itself. The new buffer's position, limit, capacity
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and mark are the same as this buffer.
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means this
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the new buffer. The two
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's position, limit and mark are independent.
123eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a read-only version of this buffer.
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer asReadOnlyBuffer();
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compacts this float buffer.
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The remaining floats will be moved to the head of the buffer, starting
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * from position zero. Then the position is set to {@code remaining()}; the
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * limit is set to capacity; the mark is cleared.
134eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer compact();
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compare the remaining floats of this buffer to another float buffer's
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * remaining floats.
144f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param otherBuffer
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            another float buffer.
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a negative value if this is less than {@code otherBuffer}; 0 if
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         this equals to {@code otherBuffer}; a positive value if this is
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         greater than {@code otherBuffer}.
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ClassCastException
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code otherBuffer} is not a float buffer.
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int compareTo(FloatBuffer otherBuffer) {
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining()
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                : otherBuffer.remaining();
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int thisPos = position;
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPos = otherBuffer.position;
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float thisFloat, otherFloat;
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (compareRemaining > 0) {
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisFloat = get(thisPos);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherFloat = otherBuffer.get(otherPos);
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // checks for float and NaN inequality
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((thisFloat != otherFloat)
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && ((thisFloat == thisFloat) || (otherFloat == otherFloat))) {
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return thisFloat < otherFloat ? -1 : 1;
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisPos++;
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherPos++;
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            compareRemaining--;
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return remaining() - otherBuffer.remaining();
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a duplicated buffer that shares its content with this buffer.
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The duplicated buffer's position, limit, capacity and mark are the same
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * as this buffer. The duplicated buffer's read-only property and byte order
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are same as this buffer too.
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
184eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a duplicated buffer that shares its content with this buffer.
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer duplicate();
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
190438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Checks whether this float buffer is equal to another object. If {@code
191438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * other} is not a {@code FloatBuffer} then {@code false} is returned.
192f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
193438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * <p>Two float buffers are equal if their remaining floats are equal.
194438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Position, limit, capacity and mark are not considered.
195f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
196438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * <p>This method considers two floats {@code a} and {@code b} to be equal
197438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * if {@code a == b} or if {@code a} and {@code b} are both {@code NaN}.
198438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Unlike {@link Float#equals}, this method considers {@code -0.0} and
199438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * {@code +0.0} to be equal.
200f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param other
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this float buffer.
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this float buffer is equal to {@code other},
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
206eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object other) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(other instanceof FloatBuffer)) {
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        FloatBuffer otherBuffer = (FloatBuffer) other;
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remaining() != otherBuffer.remaining()) {
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPosition = otherBuffer.position;
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean equalSoFar = true;
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (equalSoFar && (myPosition < limit)) {
221438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            float a = get(myPosition++);
222438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            float b = otherBuffer.get(otherPosition++);
223438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            equalSoFar = a == b || (a != a && b != b);
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return equalSoFar;
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the float at the current position and increases the position by
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * 1.
232f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the float at the current position.
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if the position is equal or greater than limit.
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get();
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array and
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats read.
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
244ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * {@code get(dst, 0, dst.length)}.
245eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
246ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination float array.
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
250ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *                if {@code dst.length} is greater than {@code remaining()}.
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
252ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes    public FloatBuffer get(float[] dst) {
253ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes        return get(dst, 0, dst.length);
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array,
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * starting from the specified offset, and increases the position by the
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats read.
260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
261ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target float array.
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param off
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of the float array, must not be negative and no
265ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *            greater than {@code dst.length}.
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param len
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to read, must be no less than zero and no
268ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *            greater than {@code dst.length - off}.
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if either {@code off} or {@code len} is invalid.
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code len} is greater than {@code remaining()}.
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
275ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes    public FloatBuffer get(float[] dst, int off, int len) {
276ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes        int length = dst.length;
277eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        if (off < 0 || len < 0 || (long) off + (long) len > length) {
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IndexOutOfBoundsException();
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
280eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (len > remaining()) {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferUnderflowException();
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = off; i < off + len; i++) {
285ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes            dst[i] = get();
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a float at the specified index; the position is not changed.
292f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than limit.
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a float at the specified index.
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get(int index);
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean hasArray() {
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedHasArray();
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calculates this buffer's hash code from the remaining chars. The
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit, capacity and mark don't affect the hash code.
308eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the hash code calculated from the remaining floats.
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
311eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hash = 0;
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (myPosition < limit) {
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hash = hash + Float.floatToIntBits(get(myPosition++));
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return hash;
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether this buffer is direct. A direct buffer will try its
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * best to take advantage of native memory APIs and it may not stay in the
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Java heap, so it is not affected by garbage collection.
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A float buffer is direct if it is based on a byte buffer and the byte
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is direct.
328eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this buffer is direct, {@code false} otherwise.
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isDirect();
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the byte order used by this buffer when converting floats from/to
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * bytes.
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If this buffer is not based on a byte buffer, then always return the
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * platform's native byte order.
339eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the byte order used by this buffer when converting floats from/to
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         bytes.
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ByteOrder order();
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code array()}.
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code array()}
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract float[] protectedArray();
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code arrayOffset()}.
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code arrayOffset()}
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract int protectedArrayOffset();
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code hasArray()}.
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code hasArray()}
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract boolean protectedHasArray();
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes the given float to the current position and increases the position
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by 1.
369f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if position is equal or greater than limit.
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(float f);
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array to the current position and
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats written.
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code put(src, 0, src.length)}.
386eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code src.length}.
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final FloatBuffer put(float[] src) {
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return put(src, 0, src.length);
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array, starting from the specified
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * offset, to the current position and increases the position by the number
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of floats written.
403f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param off
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of float array, must not be negative and not
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code src.length}.
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param len
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to write, must be no less than zero and
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            no greater than {@code src.length - off}.
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code len}.
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if either {@code off} or {@code len} is invalid.
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer put(float[] src, int off, int len) {
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int length = src.length;
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (off < 0 || len < 0 || (long)off + (long)len > length) {
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IndexOutOfBoundsException();
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
425eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (len > remaining()) {
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = off; i < off + len; i++) {
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put(src[i]);
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes all the remaining floats of the {@code src} float buffer to this
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's current position, and increases both buffers' position by the
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats copied.
439f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float buffer.
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src.remaining()} is greater than this buffer's
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                {@code remaining()}.
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IllegalArgumentException
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src} is this buffer.
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer put(FloatBuffer src) {
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src == this) {
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException();
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src.remaining() > remaining()) {
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float[] contents = new float[src.remaining()];
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        src.get(contents);
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        put(contents);
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes a float to the specified index of this buffer; the position is not
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changed.
467f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than the limit.
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(int index, float f);
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a sliced buffer that shares its content with this buffer.
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The sliced buffer's capacity will be this buffer's {@code remaining()},
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and its zero position will correspond to this buffer's current position.
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be 0, limit will be its capacity, and its
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * mark is cleared. The new buffer's read-only property and byte order are
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * same as this buffer's.
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
492f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a sliced buffer that shares its content with this buffer.
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer slice();
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a string representing the state of this float buffer.
499f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a string representing the state of this float buffer.
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
502eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
504eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        StringBuilder buf = new StringBuilder();
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(getClass().getName());
506f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        buf.append(", status: capacity=");
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(capacity());
508f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        buf.append(" position=");
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(position());
510f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        buf.append(" limit=");
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.append(limit());
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buf.toString();
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
515