1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* Licensed to the Apache Software Foundation (ASF) under one or more 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 7f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.nio; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughesimport libcore.io.Memory; 2043a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughesimport libcore.io.SizeOf; 218fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * HeapByteBuffer, ReadWriteHeapByteBuffer and ReadOnlyHeapByteBuffer compose 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the implementation of array based byte buffers. 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReadWriteHeapByteBuffer extends HeapByteBuffer with all the write methods. 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class is marked final for runtime performance. 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 31f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectfinal class ReadWriteHeapByteBuffer extends HeapByteBuffer { 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static ReadWriteHeapByteBuffer copy(HeapByteBuffer other, int markOfOther) { 3617b2f493468764dc1f237c02d94747d122dbd101Elliott Hughes ReadWriteHeapByteBuffer buf = 3717b2f493468764dc1f237c02d94747d122dbd101Elliott Hughes new ReadWriteHeapByteBuffer(other.backingArray, other.capacity(), other.offset); 380c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes buf.limit = other.limit; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf.position = other.position(); 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf.mark = markOfOther; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return buf; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ReadWriteHeapByteBuffer(byte[] backingArray) { 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(backingArray); 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ReadWriteHeapByteBuffer(int capacity) { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(capacity); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ReadWriteHeapByteBuffer(byte[] backingArray, int capacity, int arrayOffset) { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(backingArray, capacity, arrayOffset); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer asReadOnlyBuffer() { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ReadOnlyHeapByteBuffer.copy(this, mark); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer compact() { 6329dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes System.arraycopy(backingArray, position + offset, backingArray, offset, remaining()); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = limit - position; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project limit = capacity; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mark = UNSET_MARK; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer duplicate() { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return copy(this, mark); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isReadOnly() { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 80bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override byte[] protectedArray() { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingArray; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override int protectedArrayOffset() { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return offset; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override boolean protectedHasArray() { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 92eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer put(byte b) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (position == limit) { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project backingArray[offset + position++] = b; 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer put(int index, byte b) { 103a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project backingArray[offset + index] = b; 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 1090e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public ByteBuffer put(byte[] src, int srcOffset, int byteCount) { 1108fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes checkPutBounds(1, src.length, srcOffset, byteCount); 1110e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes System.arraycopy(src, srcOffset, backingArray, offset + position, byteCount); 1120e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes position += byteCount; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson 1168fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void put(char[] src, int srcOffset, int charCount) { 11743a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.CHAR, src.length, srcOffset, charCount); 118f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkPut(backingArray, offset + position, byteCount, src, srcOffset, SizeOf.CHAR, order.needsSwap); 1198fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes position += byteCount; 1208fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes } 1218fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 1228fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void put(double[] src, int srcOffset, int doubleCount) { 12343a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.DOUBLE, src.length, srcOffset, doubleCount); 124f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkPut(backingArray, offset + position, byteCount, src, srcOffset, SizeOf.DOUBLE, order.needsSwap); 1258fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes position += byteCount; 1268fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes } 1278fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 1288fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void put(float[] src, int srcOffset, int floatCount) { 12943a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.FLOAT, src.length, srcOffset, floatCount); 130f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkPut(backingArray, offset + position, byteCount, src, srcOffset, SizeOf.FLOAT, order.needsSwap); 1318fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes position += byteCount; 1328fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes } 1338fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 1348fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void put(int[] src, int srcOffset, int intCount) { 13543a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.INT, src.length, srcOffset, intCount); 136f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkPut(backingArray, offset + position, byteCount, src, srcOffset, SizeOf.INT, order.needsSwap); 1378fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes position += byteCount; 1388fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes } 1398fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 1408fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void put(long[] src, int srcOffset, int longCount) { 14143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.LONG, src.length, srcOffset, longCount); 142f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkPut(backingArray, offset + position, byteCount, src, srcOffset, SizeOf.LONG, order.needsSwap); 1438fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes position += byteCount; 1448fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes } 1458fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 1468fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void put(short[] src, int srcOffset, int shortCount) { 14743a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.SHORT, src.length, srcOffset, shortCount); 148f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkPut(backingArray, offset + position, byteCount, src, srcOffset, SizeOf.SHORT, order.needsSwap); 1498fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes position += byteCount; 1508fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes } 1518fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes 152eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 1530bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes public ByteBuffer putChar(int index, char value) { 154a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.CHAR); 155f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeShort(backingArray, offset + index, (short) value, order); 1560bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return this; 1570bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1580bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes 1590bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes @Override 1600bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes public ByteBuffer putChar(char value) { 16143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.CHAR; 1620bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes if (newPosition > limit) { 1630bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes throw new BufferOverflowException(); 1640bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 165f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeShort(backingArray, offset + position, (short) value, order); 1660bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes position = newPosition; 1670bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return this; 1680bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1690bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes 1700bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes @Override 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putDouble(double value) { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return putLong(Double.doubleToRawLongBits(value)); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putDouble(int index, double value) { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return putLong(index, Double.doubleToRawLongBits(value)); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 180eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putFloat(float value) { 1820bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return putInt(Float.floatToRawIntBits(value)); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 185eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putFloat(int index, float value) { 1870bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return putInt(index, Float.floatToRawIntBits(value)); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putInt(int value) { 19243a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.INT; 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeInt(backingArray, offset + position, value, order); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putInt(int index, int value) { 203a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.INT); 204f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeInt(backingArray, offset + index, value, order); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putLong(int index, long value) { 210a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.LONG); 211f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeLong(backingArray, offset + index, value, order); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putLong(long value) { 21743a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.LONG; 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeLong(backingArray, offset + position, value, order); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 226eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putShort(int index, short value) { 228a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.SHORT); 229f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeShort(backingArray, offset + index, value, order); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 233eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putShort(short value) { 23543a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.SHORT; 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.pokeShort(backingArray, offset + position, value, order); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 244eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer slice() { 24617b2f493468764dc1f237c02d94747d122dbd101Elliott Hughes return new ReadWriteHeapByteBuffer(backingArray, remaining(), offset + position); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 249