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        }
51fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        return new FloatArrayBuffer(new float[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);
90fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        FloatBuffer buf = new FloatArrayBuffer(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
177223ab34ad4890414b278a1e7893a99220c8f3203Elliott Hughes     * buffer's change of content will be visible to the other. The two buffers'
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer duplicate();
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
183438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Checks whether this float buffer is equal to another object. If {@code
184438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * other} is not a {@code FloatBuffer} then {@code false} is returned.
185f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
186438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * <p>Two float buffers are equal if their remaining floats are equal.
187438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Position, limit, capacity and mark are not considered.
188f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
189438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * <p>This method considers two floats {@code a} and {@code b} to be equal
190438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * if {@code a == b} or if {@code a} and {@code b} are both {@code NaN}.
191438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * Unlike {@link Float#equals}, this method considers {@code -0.0} and
192438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes     * {@code +0.0} to be equal.
193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param other
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this float buffer.
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this float buffer is equal to {@code other},
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
199eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object other) {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(other instanceof FloatBuffer)) {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        FloatBuffer otherBuffer = (FloatBuffer) other;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remaining() != otherBuffer.remaining()) {
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPosition = otherBuffer.position;
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean equalSoFar = true;
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (equalSoFar && (myPosition < limit)) {
214438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            float a = get(myPosition++);
215438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            float b = otherBuffer.get(otherPosition++);
216438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes            equalSoFar = a == b || (a != a && b != b);
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return equalSoFar;
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the float at the current position and increases the position by
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * 1.
225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the float at the current position.
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if the position is equal or greater than limit.
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get();
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array and
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats read.
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
237ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * {@code get(dst, 0, dst.length)}.
238eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
239ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination float array.
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
243ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *                if {@code dst.length} is greater than {@code remaining()}.
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
245ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes    public FloatBuffer get(float[] dst) {
246ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes        return get(dst, 0, dst.length);
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads floats from the current position into the specified float array,
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * starting from the specified offset, and increases the position by the
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats read.
253f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
254ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target float array.
2560e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param dstOffset
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of the float array, must not be negative and no
258ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *            greater than {@code dst.length}.
2590e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param floatCount
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to read, must be no less than zero and no
2610e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *            greater than {@code dst.length - dstOffset}.
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
2640e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code dstOffset} or {@code floatCount} is invalid.
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferUnderflowException
2660e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if {@code floatCount} is greater than {@code remaining()}.
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2680e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public FloatBuffer get(float[] dst, int dstOffset, int floatCount) {
269a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(dst.length, dstOffset, floatCount);
2700e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        if (floatCount > remaining()) {
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferUnderflowException();
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2730e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        for (int i = dstOffset; i < dstOffset + floatCount; ++i) {
274ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes            dst[i] = get();
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a float at the specified index; the position is not changed.
281f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than limit.
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a float at the specified index.
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract float get(int index);
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean hasArray() {
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedHasArray();
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calculates this buffer's hash code from the remaining chars. The
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit, capacity and mark don't affect the hash code.
297eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the hash code calculated from the remaining floats.
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
300eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hash = 0;
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (myPosition < limit) {
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hash = hash + Float.floatToIntBits(get(myPosition++));
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return hash;
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether this buffer is direct. A direct buffer will try its
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * best to take advantage of native memory APIs and it may not stay in the
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Java heap, so it is not affected by garbage collection.
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A float buffer is direct if it is based on a byte buffer and the byte
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is direct.
317eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this buffer is direct, {@code false} otherwise.
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isDirect();
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the byte order used by this buffer when converting floats from/to
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * bytes.
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If this buffer is not based on a byte buffer, then always return the
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * platform's native byte order.
328eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the byte order used by this buffer when converting floats from/to
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         bytes.
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ByteOrder order();
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code array()}.
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code array()}
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract float[] protectedArray();
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code arrayOffset()}.
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code arrayOffset()}
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract int protectedArrayOffset();
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code hasArray()}.
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code hasArray()}
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract boolean protectedHasArray();
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes the given float to the current position and increases the position
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by 1.
358f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if position is equal or greater than limit.
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(float f);
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array to the current position and
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of floats written.
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code put(src, 0, src.length)}.
375eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code src.length}.
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final FloatBuffer put(float[] src) {
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return put(src, 0, src.length);
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes floats from the given float array, starting from the specified
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * offset, to the current position and increases the position by the number
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of floats written.
392f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float array.
3950e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param srcOffset
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of float array, must not be negative and not
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code src.length}.
3980e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param floatCount
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of floats to write, must be no less than zero and
4000e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *            no greater than {@code src.length - srcOffset}.
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
4030e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if {@code remaining()} is less than {@code floatCount}.
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
4050e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code srcOffset} or {@code floatCount} is invalid.
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4090e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public FloatBuffer put(float[] src, int srcOffset, int floatCount) {
410a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(src.length, srcOffset, floatCount);
4110e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        if (floatCount > remaining()) {
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
4140e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        for (int i = srcOffset; i < srcOffset + floatCount; ++i) {
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put(src[i]);
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes all the remaining floats of the {@code src} float buffer to this
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's current position, and increases both buffers' position by the
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of floats copied.
424f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source float buffer.
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception BufferOverflowException
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src.remaining()} is greater than this buffer's
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                {@code remaining()}.
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IllegalArgumentException
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src} is this buffer.
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public FloatBuffer put(FloatBuffer src) {
437fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        if (isReadOnly()) {
438fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes            throw new ReadOnlyBufferException();
439fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        }
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src == this) {
441126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes            throw new IllegalArgumentException("src == this");
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src.remaining() > remaining()) {
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        float[] contents = new float[src.remaining()];
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        src.get(contents);
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        put(contents);
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes a float to the specified index of this buffer; the position is not
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changed.
455f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than the limit.
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param f
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the float to write.
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception IndexOutOfBoundsException
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @exception ReadOnlyBufferException
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer put(int index, float f);
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a sliced buffer that shares its content with this buffer.
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The sliced buffer's capacity will be this buffer's {@code remaining()},
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and its zero position will correspond to this buffer's current position.
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be 0, limit will be its capacity, and its
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * mark is cleared. The new buffer's read-only property and byte order are
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * same as this buffer's.
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
478223ab34ad4890414b278a1e7893a99220c8f3203Elliott Hughes     * buffer's change of content will be visible to the other. The two buffers'
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract FloatBuffer slice();
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
483