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