FloatBuffer.java revision 126ab1b546c71137a97cef68cc89267e7f7be634
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.nio; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20a1603838fe9e865575c87982e32c6343740e464cElliott Hughesimport java.util.Arrays; 21a1603838fe9e865575c87982e32c6343740e464cElliott Hughes 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A buffer of floats. 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A float buffer can be created in either of the following ways: 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #allocate(int) Allocate} a new float array and create a buffer 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * based on it;</li> 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #wrap(float[]) Wrap} an existing float array to create a new 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer;</li> 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Use {@link java.nio.ByteBuffer#asFloatBuffer() ByteBuffer.asFloatBuffer} 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to create a float buffer based on a byte buffer.</li> 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 35eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilsonpublic abstract class FloatBuffer extends Buffer implements 36eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson Comparable<FloatBuffer> { 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a float buffer based on a newly allocated float array. 40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param capacity 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the capacity of the new buffer. 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the created float buffer. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code capacity} is less than zero. 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static FloatBuffer allocate(int capacity) { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (capacity < 0) { 49126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes throw new IllegalArgumentException("capacity < 0: " + capacity); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 5129dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes return new ReadWriteFloatArrayBuffer(capacity); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new float buffer by wrapping the given float array. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calling this method has the same effect as 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code wrap(array, 0, array.length)}. 59eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the float array which the new buffer will be based on. 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the created float buffer. 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static FloatBuffer wrap(float[] array) { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrap(array, 0, array.length); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new float buffer by wrapping the given float array. 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The new buffer's position will be {@code start}, limit will be 720e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * {@code start + floatCount}, capacity will be the length of the array. 73eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the float array which the new buffer will be based on. 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index, must not be negative and not greater than 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code array.length}. 790e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * @param floatCount 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the length, must not be negative and not greater than 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code array.length - start}. 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the created float buffer. 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception IndexOutOfBoundsException 840e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * if either {@code start} or {@code floatCount} is invalid. 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception NullPointerException 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code array} is null. 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 880e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public static FloatBuffer wrap(float[] array, int start, int floatCount) { 89a1603838fe9e865575c87982e32c6343740e464cElliott Hughes Arrays.checkOffsetAndCount(array.length, start, floatCount); 9029dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes FloatBuffer buf = new ReadWriteFloatArrayBuffer(array); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf.position = start; 920e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes buf.limit = start + floatCount; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return buf; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FloatBuffer(int capacity) { 97934767b07d94041390785d8fe66c86b2379730bcElliott Hughes super(2, capacity, null); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final float[] array() { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return protectedArray(); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final int arrayOffset() { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return protectedArrayOffset(); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a read-only buffer that shares its content with this buffer. 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned buffer is guaranteed to be a new instance, even if this 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer is read-only itself. The new buffer's position, limit, capacity 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and mark are the same as this buffer. 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The new buffer shares its content with this buffer, which means this 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer's change of content will be visible to the new buffer. The two 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer's position, limit and mark are independent. 118eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a read-only version of this buffer. 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract FloatBuffer asReadOnlyBuffer(); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compacts this float buffer. 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The remaining floats will be moved to the head of the buffer, starting 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from position zero. Then the position is set to {@code remaining()}; the 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limit is set to capacity; the mark is cleared. 129eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ReadOnlyBufferException 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no changes may be made to the contents of this buffer. 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract FloatBuffer compact(); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compare the remaining floats of this buffer to another float buffer's 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * remaining floats. 139f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param otherBuffer 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * another float buffer. 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a negative value if this is less than {@code otherBuffer}; 0 if 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this equals to {@code otherBuffer}; a positive value if this is 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * greater than {@code otherBuffer}. 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ClassCastException 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code otherBuffer} is not a float buffer. 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int compareTo(FloatBuffer otherBuffer) { 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining() 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : otherBuffer.remaining(); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int thisPos = position; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int otherPos = otherBuffer.position; 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project float thisFloat, otherFloat; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (compareRemaining > 0) { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thisFloat = get(thisPos); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project otherFloat = otherBuffer.get(otherPos); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // checks for float and NaN inequality 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((thisFloat != otherFloat) 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && ((thisFloat == thisFloat) || (otherFloat == otherFloat))) { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return thisFloat < otherFloat ? -1 : 1; 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thisPos++; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project otherPos++; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project compareRemaining--; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return remaining() - otherBuffer.remaining(); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a duplicated buffer that shares its content with this buffer. 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The duplicated buffer's position, limit, capacity and mark are the same 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as this buffer. The duplicated buffer's read-only property and byte order 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are same as this buffer too. 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The new buffer shares its content with this buffer, which means either 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer's change of content will be visible to the other. The two buffer's 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * position, limit and mark are independent. 179eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a duplicated buffer that shares its content with this buffer. 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract FloatBuffer duplicate(); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 185438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * Checks whether this float buffer is equal to another object. If {@code 186438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * other} is not a {@code FloatBuffer} then {@code false} is returned. 187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 188438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * <p>Two float buffers are equal if their remaining floats are equal. 189438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * Position, limit, capacity and mark are not considered. 190f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 191438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * <p>This method considers two floats {@code a} and {@code b} to be equal 192438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * if {@code a == b} or if {@code a} and {@code b} are both {@code NaN}. 193438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * Unlike {@link Float#equals}, this method considers {@code -0.0} and 194438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * {@code +0.0} to be equal. 195f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param other 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare with this float buffer. 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this float buffer is equal to {@code other}, 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise. 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 201eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object other) { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(other instanceof FloatBuffer)) { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FloatBuffer otherBuffer = (FloatBuffer) other; 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (remaining() != otherBuffer.remaining()) { 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int myPosition = position; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int otherPosition = otherBuffer.position; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean equalSoFar = true; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (equalSoFar && (myPosition < limit)) { 216438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes float a = get(myPosition++); 217438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes float b = otherBuffer.get(otherPosition++); 218438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes equalSoFar = a == b || (a != a && b != b); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equalSoFar; 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the float at the current position and increases the position by 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1. 227f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the float at the current position. 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferUnderflowException 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the position is equal or greater than limit. 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract float get(); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads floats from the current position into the specified float array and 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * increases the position by the number of floats read. 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calling this method has the same effect as 239ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes * {@code get(dst, 0, dst.length)}. 240eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 241ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes * @param dst 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the destination float array. 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferUnderflowException 245ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes * if {@code dst.length} is greater than {@code remaining()}. 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 247ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes public FloatBuffer get(float[] dst) { 248ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes return get(dst, 0, dst.length); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads floats from the current position into the specified float array, 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * starting from the specified offset, and increases the position by the 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of floats read. 255f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 256ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes * @param dst 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target float array. 2580e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * @param dstOffset 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of the float array, must not be negative and no 260ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes * greater than {@code dst.length}. 2610e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * @param floatCount 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of floats to read, must be no less than zero and no 2630e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * greater than {@code dst.length - dstOffset}. 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception IndexOutOfBoundsException 2660e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * if either {@code dstOffset} or {@code floatCount} is invalid. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferUnderflowException 2680e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * if {@code floatCount} is greater than {@code remaining()}. 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2700e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public FloatBuffer get(float[] dst, int dstOffset, int floatCount) { 271a1603838fe9e865575c87982e32c6343740e464cElliott Hughes Arrays.checkOffsetAndCount(dst.length, dstOffset, floatCount); 2720e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes if (floatCount > remaining()) { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2750e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes for (int i = dstOffset; i < dstOffset + floatCount; ++i) { 276ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes dst[i] = get(); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a float at the specified index; the position is not changed. 283f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param index 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index, must not be negative and less than limit. 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a float at the specified index. 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception IndexOutOfBoundsException 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if index is invalid. 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract float get(int index); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final boolean hasArray() { 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return protectedHasArray(); 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calculates this buffer's hash code from the remaining chars. The 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * position, limit, capacity and mark don't affect the hash code. 299eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code calculated from the remaining floats. 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 302eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int myPosition = position; 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hash = 0; 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (myPosition < limit) { 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hash = hash + Float.floatToIntBits(get(myPosition++)); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hash; 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this buffer is direct. A direct buffer will try its 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * best to take advantage of native memory APIs and it may not stay in the 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Java heap, so it is not affected by garbage collection. 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A float buffer is direct if it is based on a byte buffer and the byte 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer is direct. 319eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this buffer is direct, {@code false} otherwise. 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean isDirect(); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the byte order used by this buffer when converting floats from/to 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this buffer is not based on a byte buffer, then always return the 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * platform's native byte order. 330eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the byte order used by this buffer when converting floats from/to 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes. 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract ByteOrder order(); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Child class implements this method to realize {@code array()}. 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return see {@code array()} 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project abstract float[] protectedArray(); 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Child class implements this method to realize {@code arrayOffset()}. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return see {@code arrayOffset()} 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project abstract int protectedArrayOffset(); 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Child class implements this method to realize {@code hasArray()}. 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return see {@code hasArray()} 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project abstract boolean protectedHasArray(); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes the given float to the current position and increases the position 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by 1. 360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param f 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the float to write. 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferOverflowException 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if position is equal or greater than limit. 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ReadOnlyBufferException 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no changes may be made to the contents of this buffer. 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract FloatBuffer put(float f); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes floats from the given float array to the current position and 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * increases the position by the number of floats written. 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calling this method has the same effect as 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code put(src, 0, src.length)}. 377eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source float array. 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferOverflowException 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code remaining()} is less than {@code src.length}. 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ReadOnlyBufferException 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no changes may be made to the contents of this buffer. 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final FloatBuffer put(float[] src) { 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return put(src, 0, src.length); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes floats from the given float array, starting from the specified 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offset, to the current position and increases the position by the number 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of floats written. 394f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source float array. 3970e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * @param srcOffset 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset of float array, must not be negative and not 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * greater than {@code src.length}. 4000e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * @param floatCount 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of floats to write, must be no less than zero and 4020e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * no greater than {@code src.length - srcOffset}. 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferOverflowException 4050e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * if {@code remaining()} is less than {@code floatCount}. 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception IndexOutOfBoundsException 4070e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes * if either {@code srcOffset} or {@code floatCount} is invalid. 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ReadOnlyBufferException 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no changes may be made to the contents of this buffer. 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 4110e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public FloatBuffer put(float[] src, int srcOffset, int floatCount) { 412a1603838fe9e865575c87982e32c6343740e464cElliott Hughes Arrays.checkOffsetAndCount(src.length, srcOffset, floatCount); 4130e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes if (floatCount > remaining()) { 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 4160e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes for (int i = srcOffset; i < srcOffset + floatCount; ++i) { 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project put(src[i]); 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes all the remaining floats of the {@code src} float buffer to this 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer's current position, and increases both buffers' position by the 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of floats copied. 426f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source float buffer. 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception BufferOverflowException 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code src.remaining()} is greater than this buffer's 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code remaining()}. 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception IllegalArgumentException 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code src} is this buffer. 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ReadOnlyBufferException 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no changes may be made to the contents of this buffer. 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public FloatBuffer put(FloatBuffer src) { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (src == this) { 440126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes throw new IllegalArgumentException("src == this"); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (src.remaining() > remaining()) { 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project float[] contents = new float[src.remaining()]; 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project src.get(contents); 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project put(contents); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes a float to the specified index of this buffer; the position is not 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * changed. 454f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param index 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index, must not be negative and less than the limit. 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param f 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the float to write. 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this buffer. 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception IndexOutOfBoundsException 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if index is invalid. 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ReadOnlyBufferException 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no changes may be made to the contents of this buffer. 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract FloatBuffer put(int index, float f); 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a sliced buffer that shares its content with this buffer. 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The sliced buffer's capacity will be this buffer's {@code remaining()}, 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and its zero position will correspond to this buffer's current position. 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The new buffer's position will be 0, limit will be its capacity, and its 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * mark is cleared. The new buffer's read-only property and byte order are 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same as this buffer's. 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The new buffer shares its content with this buffer, which means either 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer's change of content will be visible to the other. The two buffer's 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * position, limit and mark are independent. 479f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a sliced buffer that shares its content with this buffer. 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract FloatBuffer slice(); 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 484