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