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 208510524dab13e0acc1babf22cbc55002fb122777Elliott Hughesimport java.nio.channels.FileChannel.MapMode; 2143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughesimport libcore.io.SizeOf; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 238510524dab13e0acc1babf22cbc55002fb122777Elliott Hughes/** 24dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * Rather than duplicate all the code from ReadOnlyDirectByteBuffer and 25dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * ReadWriteDirectByteBuffer (and their superclasses), we delegate to one or the other. 26dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * The tricky part is that we need to keep our fields in sync with our delegate's fields. 27dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * There are lots of methods that access the fields directly. 28dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * 295a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * The main consequences of this implementation are: 305a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * 315a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * 1. we need to explicitly call wrapped.position(int) before any operation on our delegate 325a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * that makes use of the implicit position. 335a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * 345a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * 2. we need to explicitly update position after any operation on our delegate that makes 355a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * use of the implicit position. 365a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * 375a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * This means that, even more than usual, the implicit iteration 38dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * operations are more expensive than the indexed operations. 39dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * 40dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * But we save a ton of code, for classes that no-one really uses because the API's broken 41dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * by design (disallowing munmap(2) calls). Internally, we can use libcore.io.MemoryMappedFile 42dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes * as a high-performance and more usable replacement for MappedByteBuffer. 435a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * 445a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * FIXME: harmony changed their implementation after we diverged, switching to a scheme 455a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * where DirectByteBuffer extends MappedByteBuffer and this class doesn't exist. That's 465a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes * much better than their original implementation, fossilized here. 478510524dab13e0acc1babf22cbc55002fb122777Elliott Hughes */ 48ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughesfinal class MappedByteBufferAdapter extends MappedByteBuffer { 49c73a5be50cdd804ff3c12e7b43da08c33cdd6f21Elliott Hughes private MappedByteBufferAdapter(ByteBuffer buffer) { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(buffer); 510c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes effectiveDirectAddress = wrapped.effectiveDirectAddress; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes public MappedByteBufferAdapter(MemoryBlock block, int capacity, int offset, MapMode mode) { 55eb29579498a8860f81fd38275f8657c21bb67abbElliott Hughes super(block, capacity, offset, mode); 560c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes effectiveDirectAddress = wrapped.effectiveDirectAddress; 570c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes } 580c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes 590c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes @Override void limitImpl(int newLimit) { 600c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes super.limitImpl(newLimit); 610c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.limit(newLimit); 620c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes } 630c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes 640c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes @Override void positionImpl(int newPosition) { 650c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes super.positionImpl(newPosition); 660c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(newPosition); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer asCharBuffer() { 710c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.asCharBuffer(); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DoubleBuffer asDoubleBuffer() { 760c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.asDoubleBuffer(); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public FloatBuffer asFloatBuffer() { 810c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.asFloatBuffer(); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public IntBuffer asIntBuffer() { 860c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.asIntBuffer(); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public LongBuffer asLongBuffer() { 910c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.asLongBuffer(); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer asReadOnlyBuffer() { 96dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes MappedByteBufferAdapter result = new MappedByteBufferAdapter(wrapped.asReadOnlyBuffer()); 97dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes result.limit(limit); 98dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes result.position(position); 99dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes result.mark = mark; 100dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes return result; 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ShortBuffer asShortBuffer() { 1050c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.asShortBuffer(); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer compact() { 1100c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes if (wrapped.isReadOnly()) { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ReadOnlyBufferException(); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1130c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.compact(); 114dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes limit(capacity); 115dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes position(wrapped.position()); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.mark = UNSET_MARK; 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 120eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer duplicate() { 122dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes MappedByteBufferAdapter result = new MappedByteBufferAdapter(wrapped.duplicate()); 123dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes result.limit(limit); 124dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes result.position(position); 125dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes result.mark = mark; 126dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes return result; 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte get() { 131dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 1320c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes byte result = wrapped.get(); 1330c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes ++position; 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte get(int index) { 1390c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.get(index); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 143f714d3767875c96c5122683ef8c75cc9d5f1259fElliott Hughes public ByteBuffer get(byte[] dst, int dstOffset, int byteCount) { 1445a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes ByteBuffer result = wrapped.get(dst, dstOffset, byteCount); 1455a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes position += byteCount; 1465a1e8cc38e1cc6c3f2fc66f039ca0fc5309a0dc3Elliott Hughes return result; 147f714d3767875c96c5122683ef8c75cc9d5f1259fElliott Hughes } 148f714d3767875c96c5122683ef8c75cc9d5f1259fElliott Hughes 149f714d3767875c96c5122683ef8c75cc9d5f1259fElliott Hughes @Override 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char getChar() { 151dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 1520c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes char result = wrapped.getChar(); 15343a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes position += SizeOf.CHAR; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char getChar(int index) { 1590c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.getChar(index); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 162eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double getDouble() { 164dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 1650c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes double result = wrapped.getDouble(); 16643a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes position += SizeOf.DOUBLE; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double getDouble(int index) { 1720c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.getDouble(index); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float getFloat() { 177dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 1780c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes float result = wrapped.getFloat(); 17943a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes position += SizeOf.FLOAT; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 183eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float getFloat(int index) { 1850c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.getFloat(index); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getInt() { 190dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 1910c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes int result = wrapped.getInt(); 19243a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes position += SizeOf.INT; 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 196eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getInt(int index) { 1980c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.getInt(index); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getLong() { 203dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 2040c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes long result = wrapped.getLong(); 20543a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes position += SizeOf.LONG; 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 209eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getLong(int index) { 2110c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.getLong(index); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short getShort() { 216dbb973b7f1dc6d3e86c6f9528a2aadff1e01c0cbElliott Hughes wrapped.position(position); 2170c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes short result = wrapped.getShort(); 21843a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes position += SizeOf.SHORT; 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short getShort(int index) { 2240c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.getShort(index); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 227eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isDirect() { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 232eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isReadOnly() { 2340c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.isReadOnly(); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2370c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes @Override void orderImpl(ByteOrder byteOrder) { 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.orderImpl(byteOrder); 2390c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.order(byteOrder); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 242eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer put(byte b) { 2440c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2450c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.put(b); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.position++; 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 2510e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public ByteBuffer put(byte[] src, int srcOffset, int byteCount) { 2520c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2530e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes wrapped.put(src, srcOffset, byteCount); 2540e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes this.position += byteCount; 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 258eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer put(int index, byte b) { 2600c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2610c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.put(index, b); 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 265eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putChar(char value) { 2670c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2680c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putChar(value); 26943a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes this.position += SizeOf.CHAR; 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putChar(int index, char value) { 2750c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2760c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putChar(index, value); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 280eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putDouble(double value) { 2820c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2830c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putDouble(value); 28443a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes this.position += SizeOf.DOUBLE; 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putDouble(int index, double value) { 2900c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2910c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putDouble(index, value); 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 295eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putFloat(float value) { 2970c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 2980c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putFloat(value); 29943a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes this.position += SizeOf.FLOAT; 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 303eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putFloat(int index, float value) { 3050c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3060c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putFloat(index, value); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 310eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putInt(int index, int value) { 3120c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3130c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putInt(index, value); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 317eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putInt(int value) { 3190c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3200c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putInt(value); 32143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes this.position += SizeOf.INT; 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 325eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putLong(int index, long value) { 3270c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3280c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putLong(index, value); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 332eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putLong(long value) { 3340c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3350c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putLong(value); 33643a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes this.position += SizeOf.LONG; 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 340eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putShort(int index, short value) { 3420c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3430c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putShort(index, value); 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 347eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer putShort(short value) { 3490c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3500c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.putShort(value); 35143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes this.position += SizeOf.SHORT; 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 355eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteBuffer slice() { 3570c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.position(this.position); 3580c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes MappedByteBufferAdapter result = new MappedByteBufferAdapter(wrapped.slice()); 3590c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.clear(); 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 363bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override byte[] protectedArray() { 3640c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.protectedArray(); 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 367bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override int protectedArrayOffset() { 3680c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.protectedArrayOffset(); 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override boolean protectedHasArray() { 3720c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes return wrapped.protectedHasArray(); 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 375c3c38fbbccaf428200acdd819b1f7799edac54d2Elliott Hughes public final void free() { 3760c53cf8b2c46deb41e91db50ddc17d598cc64a10Elliott Hughes wrapped.free(); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 379