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 2043a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughesimport libcore.io.SizeOf; 21f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughesimport libcore.io.Memory; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DirectByteBuffer, ReadWriteDirectByteBuffer and ReadOnlyDirectByteBuffer 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * compose the implementation of platform memory based byte buffers. 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReadWriteDirectByteBuffer extends DirectByteBuffer with all the write 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class is marked final for runtime performance. 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectfinal class ReadWriteDirectByteBuffer extends DirectByteBuffer { 354940ff34c242c7907f548e6eb7b1680d7d53fbc7Elliott Hughes static ReadWriteDirectByteBuffer copy(DirectByteBuffer other, int markOfOther) { 3617b2f493468764dc1f237c02d94747d122dbd101Elliott Hughes ReadWriteDirectByteBuffer buf = 3717b2f493468764dc1f237c02d94747d122dbd101Elliott Hughes new ReadWriteDirectByteBuffer(other.block, 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 4429dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes // Used by ByteBuffer.allocateDirect. 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ReadWriteDirectByteBuffer(int capacity) { 4627c11c7c7b1fc023cb6464bd551aceef300e39b6Elliott Hughes super(MemoryBlock.allocate(capacity), capacity, 0); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 494d68282a79fb0417f43efdef41b9a920385bddedElliott Hughes // Used by the JNI NewDirectByteBuffer function. 50040bb9d72f4a406a40f40e198857a8a27e3de688Elliott Hughes ReadWriteDirectByteBuffer(int address, int capacity) { 51eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes super(MemoryBlock.wrapFromJni(address, capacity), capacity, 0); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes ReadWriteDirectByteBuffer(MemoryBlock block, int capacity, int offset) { 55eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes super(block, capacity, offset); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer asReadOnlyBuffer() { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ReadOnlyDirectByteBuffer.copy(this, mark); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer compact() { 650568a63ba1086a78ffb4cff68dd2eac4f9908e13Elliott Hughes Memory.memmove(this, 0, this, position, remaining()); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = limit - position; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project limit = capacity; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mark = UNSET_MARK; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 72eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer duplicate() { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return copy(this, mark); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isReadOnly() { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer put(byte value) { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (position == limit) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeByte(offset + position++, value); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer put(int index, byte value) { 93a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index); 94eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeByte(offset + index, value); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 990e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public ByteBuffer put(byte[] src, int srcOffset, int byteCount) { 1008fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes checkPutBounds(1, src.length, srcOffset, byteCount); 1010e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeByteArray(offset + position, src, srcOffset, byteCount); 1020e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes position += byteCount; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 105eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson 106961da1e7487bdb8ad8ac226d4f2789d003aa87b9Elliott Hughes final void put(char[] src, int srcOffset, int charCount) { 10743a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.CHAR, src.length, srcOffset, charCount); 1080e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeCharArray(offset + position, src, srcOffset, charCount, order.needsSwap); 10929dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes position += byteCount; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112961da1e7487bdb8ad8ac226d4f2789d003aa87b9Elliott Hughes final void put(double[] src, int srcOffset, int doubleCount) { 11343a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.DOUBLE, src.length, srcOffset, doubleCount); 1140e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeDoubleArray(offset + position, src, srcOffset, doubleCount, order.needsSwap); 11529dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes position += byteCount; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117bfb0099cc4c8eca744eeda0f20e5b3644f1a4cb9Owen Lin 118961da1e7487bdb8ad8ac226d4f2789d003aa87b9Elliott Hughes final void put(float[] src, int srcOffset, int floatCount) { 11943a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.FLOAT, src.length, srcOffset, floatCount); 1200e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeFloatArray(offset + position, src, srcOffset, floatCount, order.needsSwap); 12129dbfe19b113a13b712be2bc762ef1c81cd06c47Elliott Hughes position += byteCount; 122bfb0099cc4c8eca744eeda0f20e5b3644f1a4cb9Owen Lin } 123eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson 124961da1e7487bdb8ad8ac226d4f2789d003aa87b9Elliott Hughes final void put(int[] src, int srcOffset, int intCount) { 12543a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.INT, src.length, srcOffset, intCount); 1260e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeIntArray(offset + position, src, srcOffset, intCount, order.needsSwap); 127692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes position += byteCount; 128692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes } 129692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes 130961da1e7487bdb8ad8ac226d4f2789d003aa87b9Elliott Hughes final void put(long[] src, int srcOffset, int longCount) { 13143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.LONG, src.length, srcOffset, longCount); 1320e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeLongArray(offset + position, src, srcOffset, longCount, order.needsSwap); 133692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes position += byteCount; 134692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes } 135692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes 136961da1e7487bdb8ad8ac226d4f2789d003aa87b9Elliott Hughes final void put(short[] src, int srcOffset, int shortCount) { 13743a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkPutBounds(SizeOf.SHORT, src.length, srcOffset, shortCount); 1380e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.block.pokeShortArray(offset + position, src, srcOffset, shortCount, order.needsSwap); 139692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes position += byteCount; 140692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes } 141692222b08ff88eb92b523bf4780d7ea17a23aa80Elliott Hughes 142eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 1430bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes public ByteBuffer putChar(char value) { 14443a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.CHAR; 1450bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes if (newPosition > limit) { 1460bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes throw new BufferOverflowException(); 1470bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1480bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes this.block.pokeShort(offset + position, (short) value, order); 1490bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes position = newPosition; 1500bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return this; 1510bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1520bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes 1530bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes @Override 1540bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes public ByteBuffer putChar(int index, char value) { 155a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.CHAR); 1560bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes this.block.pokeShort(offset + index, (short) value, order); 1570bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return this; 1580bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1590bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes 1600bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes @Override 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putDouble(double value) { 16243a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.DOUBLE; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1660bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes this.block.pokeLong(offset + position, Double.doubleToRawLongBits(value), order); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 171eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putDouble(int index, double value) { 173a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.DOUBLE); 1740bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes this.block.pokeLong(offset + index, Double.doubleToRawLongBits(value), order); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 178eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putFloat(float value) { 18043a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.FLOAT; 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1840bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes this.block.pokeInt(offset + position, Float.floatToRawIntBits(value), order); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 189eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putFloat(int index, float value) { 191a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.FLOAT); 1920bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes this.block.pokeInt(offset + index, Float.floatToRawIntBits(value), order); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 196eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putInt(int value) { 19843a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.INT; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeInt(offset + position, value, order); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putInt(int index, int value) { 209a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.INT); 210eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeInt(offset + index, value, order); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putLong(long value) { 21643a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.LONG; 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeLong(offset + position, value, order); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 225eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putLong(int index, long value) { 227a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.LONG); 228eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeLong(offset + index, value, order); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 232eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putShort(short value) { 23443a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.SHORT; 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferOverflowException(); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 238eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeShort(offset + position, value, order); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 243eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putShort(int index, short value) { 245a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.SHORT); 246eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes this.block.pokeShort(offset + index, value, order); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer slice() { 25217b2f493468764dc1f237c02d94747d122dbd101Elliott Hughes return new ReadWriteDirectByteBuffer(block, remaining(), offset + position); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 256