FloatBuffer.java revision 126ab1b546c71137a97cef68cc89267e7f7be634
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
20a1603838fe9e865575c87982e32c6343740e464cElliott Hughesimport java.util.Arrays;
21a1603838fe9e865575c87982e32c6343740e464cElliott Hughes
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A buffer of floats.
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A float buffer can be created in either of the following ways:
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul>
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #allocate(int) Allocate} a new float array and create a buffer
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * based on it;</li>
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #wrap(float[]) Wrap} an existing float array to create a new
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer;</li>
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Use {@link java.nio.ByteBuffer#asFloatBuffer() ByteBuffer.asFloatBuffer}
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to create a float buffer based on a byte buffer.</li>
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul>
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
35eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilsonpublic abstract class FloatBuffer extends Buffer implements
36eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        Comparable<FloatBuffer> {
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a float buffer based on a newly allocated float array.
40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param capacity
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the capacity of the new buffer.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created float buffer.
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code capacity} is less than zero.
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static FloatBuffer allocate(int capacity) {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (capacity < 0) {
49126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes            throw new IllegalArgumentException("capacity < 0: " + capacity);
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
5129dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes        return new ReadWriteFloatArrayBuffer(capacity);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new float buffer by wrapping the given float array.
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code wrap(array, 0, array.length)}.
59eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param array
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float array which the new buffer will be based on.
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created float buffer.
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static FloatBuffer wrap(float[] array) {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return wrap(array, 0, array.length);
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new float buffer by wrapping the given float array.
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be {@code start}, limit will be
720e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * {@code start + floatCount}, capacity will be the length of the array.
73eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param array
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float array which the new buffer will be based on.
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param start
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the start index, must not be negative and not greater than
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code array.length}.
790e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param floatCount
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the length, must not be negative and not greater than
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code array.length - start}.
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created float buffer.
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
840e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code start} or {@code floatCount} is invalid.
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception NullPointerException
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code array} is null.
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
880e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public static FloatBuffer wrap(float[] array, int start, int floatCount) {
89a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(array.length, start, floatCount);
9029dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes        FloatBuffer buf = new ReadWriteFloatArrayBuffer(array);
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.position = start;
920e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        buf.limit = start + floatCount;
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buf;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    FloatBuffer(int capacity) {
97934767b07d94041390785d8fe66c86b2379730bcElliott Hughes        super(2, capacity, null);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final float[] array() {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArray();
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int arrayOffset() {
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArrayOffset();
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a read-only buffer that shares its content with this buffer.
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The returned buffer is guaranteed to be a new instance, even if this
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is read-only itself. The new buffer's position, limit, capacity
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and mark are the same as this buffer.
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means this
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the new buffer. The two
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's position, limit and mark are independent.
118eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a read-only version of this buffer.
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer asReadOnlyBuffer();
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compacts this float buffer.
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The remaining floats will be moved to the head of the buffer, starting
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * from position zero. Then the position is set to {@code remaining()}; the
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * limit is set to capacity; the mark is cleared.
129eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer compact();
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compare the remaining floats of this buffer to another float buffer's
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * remaining floats.
139f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param otherBuffer
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            another float buffer.
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a negative value if this is less than {@code otherBuffer}; 0 if
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         this equals to {@code otherBuffer}; a positive value if this is
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         greater than {@code otherBuffer}.
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ClassCastException
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code otherBuffer} is not a float buffer.
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int compareTo(FloatBuffer otherBuffer) {
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining()
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                : otherBuffer.remaining();
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int thisPos = position;
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPos = otherBuffer.position;
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float thisFloat, otherFloat;
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (compareRemaining > 0) {
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisFloat = get(thisPos);
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherFloat = otherBuffer.get(otherPos);
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // checks for float and NaN inequality
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((thisFloat != otherFloat)
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && ((thisFloat == thisFloat) || (otherFloat == otherFloat))) {
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return thisFloat < otherFloat ? -1 : 1;
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisPos++;
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherPos++;
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            compareRemaining--;
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return remaining() - otherBuffer.remaining();
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a duplicated buffer that shares its content with this buffer.
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The duplicated buffer's position, limit, capacity and mark are the same
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * as this buffer. The duplicated buffer's read-only property and byte order
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are same as this buffer too.
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
179eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a duplicated buffer that shares its content with this buffer.
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer duplicate();
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
185438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Checks whether this float buffer is equal to another object. If {@code
186438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * other} is not a {@code FloatBuffer} then {@code false} is returned.
187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
188438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * <p>Two float buffers are equal if their remaining floats are equal.
189438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Position, limit, capacity and mark are not considered.
190f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
191438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * <p>This method considers two floats {@code a} and {@code b} to be equal
192438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * if {@code a == b} or if {@code a} and {@code b} are both {@code NaN}.
193438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Unlike {@link Float#equals}, this method considers {@code -0.0} and
194438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * {@code +0.0} to be equal.
195f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param other
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this float buffer.
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this float buffer is equal to {@code other},
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
201eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object other) {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(other instanceof FloatBuffer)) {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        FloatBuffer otherBuffer = (FloatBuffer) other;
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remaining() != otherBuffer.remaining()) {
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPosition = otherBuffer.position;
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean equalSoFar = true;
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (equalSoFar && (myPosition < limit)) {
216438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            float a = get(myPosition++);
217438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            float b = otherBuffer.get(otherPosition++);
218438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            equalSoFar = a == b || (a != a && b != b);
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return equalSoFar;
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the float at the current position and increases the position by
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * 1.
227f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the float at the current position.
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if the position is equal or greater than limit.
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get();
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array and
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats read.
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
239ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * {@code get(dst, 0, dst.length)}.
240eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
241ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination float array.
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
245ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *                if {@code dst.length} is greater than {@code remaining()}.
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
247ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes    public FloatBuffer get(float[] dst) {
248ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes        return get(dst, 0, dst.length);
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array,
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * starting from the specified offset, and increases the position by the
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats read.
255f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
256ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target float array.
2580e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param dstOffset
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of the float array, must not be negative and no
260ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *            greater than {@code dst.length}.
2610e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param floatCount
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to read, must be no less than zero and no
2630e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *            greater than {@code dst.length - dstOffset}.
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
2660e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code dstOffset} or {@code floatCount} is invalid.
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
2680e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if {@code floatCount} is greater than {@code remaining()}.
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2700e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public FloatBuffer get(float[] dst, int dstOffset, int floatCount) {
271a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(dst.length, dstOffset, floatCount);
2720e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        if (floatCount > remaining()) {
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferUnderflowException();
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2750e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        for (int i = dstOffset; i < dstOffset + floatCount; ++i) {
276ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes            dst[i] = get();
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a float at the specified index; the position is not changed.
283f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than limit.
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a float at the specified index.
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get(int index);
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean hasArray() {
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedHasArray();
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calculates this buffer's hash code from the remaining chars. The
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit, capacity and mark don't affect the hash code.
299eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the hash code calculated from the remaining floats.
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
302eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hash = 0;
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (myPosition < limit) {
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hash = hash + Float.floatToIntBits(get(myPosition++));
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return hash;
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether this buffer is direct. A direct buffer will try its
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * best to take advantage of native memory APIs and it may not stay in the
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Java heap, so it is not affected by garbage collection.
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A float buffer is direct if it is based on a byte buffer and the byte
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is direct.
319eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this buffer is direct, {@code false} otherwise.
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isDirect();
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the byte order used by this buffer when converting floats from/to
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * bytes.
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If this buffer is not based on a byte buffer, then always return the
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * platform's native byte order.
330eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the byte order used by this buffer when converting floats from/to
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         bytes.
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ByteOrder order();
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code array()}.
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code array()}
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract float[] protectedArray();
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code arrayOffset()}.
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code arrayOffset()}
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract int protectedArrayOffset();
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code hasArray()}.
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code hasArray()}
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract boolean protectedHasArray();
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes the given float to the current position and increases the position
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by 1.
360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if position is equal or greater than limit.
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(float f);
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array to the current position and
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats written.
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code put(src, 0, src.length)}.
377eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code src.length}.
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final FloatBuffer put(float[] src) {
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return put(src, 0, src.length);
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array, starting from the specified
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * offset, to the current position and increases the position by the number
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of floats written.
394f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
3970e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param srcOffset
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of float array, must not be negative and not
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code src.length}.
4000e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param floatCount
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to write, must be no less than zero and
4020e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *            no greater than {@code src.length - srcOffset}.
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
4050e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if {@code remaining()} is less than {@code floatCount}.
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
4070e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code srcOffset} or {@code floatCount} is invalid.
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4110e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public FloatBuffer put(float[] src, int srcOffset, int floatCount) {
412a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(src.length, srcOffset, floatCount);
4130e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        if (floatCount > remaining()) {
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
4160e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        for (int i = srcOffset; i < srcOffset + floatCount; ++i) {
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put(src[i]);
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes all the remaining floats of the {@code src} float buffer to this
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's current position, and increases both buffers' position by the
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats copied.
426f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float buffer.
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src.remaining()} is greater than this buffer's
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                {@code remaining()}.
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IllegalArgumentException
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src} is this buffer.
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer put(FloatBuffer src) {
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src == this) {
440126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes            throw new IllegalArgumentException("src == this");
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src.remaining() > remaining()) {
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float[] contents = new float[src.remaining()];
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        src.get(contents);
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        put(contents);
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes a float to the specified index of this buffer; the position is not
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changed.
454f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than the limit.
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(int index, float f);
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a sliced buffer that shares its content with this buffer.
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The sliced buffer's capacity will be this buffer's {@code remaining()},
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and its zero position will correspond to this buffer's current position.
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be 0, limit will be its capacity, and its
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * mark is cleared. The new buffer's read-only property and byte order are
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * same as this buffer's.
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
479f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a sliced buffer that shares its content with this buffer.
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer slice();
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
484