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