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