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; 226944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * HeapByteBuffer, ReadWriteHeapByteBuffer and ReadOnlyHeapByteBuffer compose 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the implementation of array based byte buffers. 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * HeapByteBuffer implements all the shared readonly methods and is extended by 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the other two classes. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * All methods are marked final for runtime performance. 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectabstract class HeapByteBuffer extends BaseByteBuffer { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 374af0d8c99d68bcacff182699527d983a1d34fdbeElliott Hughes /** 380568a63ba1086a78ffb4cff68dd2eac4f9908e13Elliott Hughes * These fields are non-private for NioUtils.unsafeArray. 394af0d8c99d68bcacff182699527d983a1d34fdbeElliott Hughes */ 404af0d8c99d68bcacff182699527d983a1d34fdbeElliott Hughes final byte[] backingArray; 414af0d8c99d68bcacff182699527d983a1d34fdbeElliott Hughes final int offset; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HeapByteBuffer(byte[] backingArray) { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(backingArray, backingArray.length, 0); 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HeapByteBuffer(int capacity) { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(new byte[capacity], capacity, 0); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HeapByteBuffer(byte[] backingArray, int capacity, int offset) { 52934767b07d94041390785d8fe66c86b2379730bcElliott Hughes super(capacity, null); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.backingArray = backingArray; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.offset = offset; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (offset + capacity > backingArray.length) { 56a1603838fe9e865575c87982e32c6343740e464cElliott Hughes throw new IndexOutOfBoundsException("backingArray.length=" + backingArray.length + 57a1603838fe9e865575c87982e32c6343740e464cElliott Hughes ", capacity=" + capacity + ", offset=" + offset); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 620e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public final ByteBuffer get(byte[] dst, int dstOffset, int byteCount) { 638fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes checkGetBounds(1, dst.length, dstOffset, byteCount); 640e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes System.arraycopy(backingArray, offset + position, dst, dstOffset, byteCount); 650e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes position += byteCount; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson 696944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes final void get(char[] dst, int dstOffset, int charCount) { 7043a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkGetBounds(SizeOf.CHAR, dst.length, dstOffset, charCount); 71f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkGet(dst, dstOffset, byteCount, backingArray, offset + position, SizeOf.CHAR, order.needsSwap); 726944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes position += byteCount; 736944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes } 746944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 758fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void get(double[] dst, int dstOffset, int doubleCount) { 7643a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkGetBounds(SizeOf.DOUBLE, dst.length, dstOffset, doubleCount); 77f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkGet(dst, dstOffset, byteCount, backingArray, offset + position, SizeOf.DOUBLE, order.needsSwap); 786944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes position += byteCount; 796944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes } 806944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 818fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void get(float[] dst, int dstOffset, int floatCount) { 8243a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkGetBounds(SizeOf.FLOAT, dst.length, dstOffset, floatCount); 83f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkGet(dst, dstOffset, byteCount, backingArray, offset + position, SizeOf.FLOAT, order.needsSwap); 846944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes position += byteCount; 856944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes } 866944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 878fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void get(int[] dst, int dstOffset, int intCount) { 8843a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkGetBounds(SizeOf.INT, dst.length, dstOffset, intCount); 89f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkGet(dst, dstOffset, byteCount, backingArray, offset + position, SizeOf.INT, order.needsSwap); 906944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes position += byteCount; 916944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes } 926944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 938fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void get(long[] dst, int dstOffset, int longCount) { 9443a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkGetBounds(SizeOf.LONG, dst.length, dstOffset, longCount); 95f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkGet(dst, dstOffset, byteCount, backingArray, offset + position, SizeOf.LONG, order.needsSwap); 966944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes position += byteCount; 976944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes } 986944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 998fbc397fc09158bee0bc0cb231c609c4c6e9fc15Elliott Hughes final void get(short[] dst, int dstOffset, int shortCount) { 10043a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int byteCount = checkGetBounds(SizeOf.SHORT, dst.length, dstOffset, shortCount); 101f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes Memory.unsafeBulkGet(dst, dstOffset, byteCount, backingArray, offset + position, SizeOf.SHORT, order.needsSwap); 1026944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes position += byteCount; 1036944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes } 1046944bea4a129dc2d4be687c72f2a9f228ec532bcElliott Hughes 105eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final byte get() { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (position == limit) { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingArray[offset + position++]; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final byte get(int index) { 115a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingArray[offset + index]; 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 119eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 1200bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes public final char getChar() { 12143a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.CHAR; 1220bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes if (newPosition > limit) { 1230bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes throw new BufferUnderflowException(); 1240bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 125f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes char result = (char) Memory.peekShort(backingArray, offset + position, order); 1260bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes position = newPosition; 1270bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes return result; 1280bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1290bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes 1300bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes @Override 1310bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes public final char getChar(int index) { 132a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.CHAR); 133f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes return (char) Memory.peekShort(backingArray, offset + index, order); 1340bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes } 1350bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes 1360bc30ae8420b5b1abc1b2eefbdf8846309b5447dElliott Hughes @Override 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final double getDouble() { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Double.longBitsToDouble(getLong()); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 141eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final double getDouble(int index) { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Double.longBitsToDouble(getLong(index)); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final float getFloat() { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Float.intBitsToFloat(getInt()); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 151eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final float getFloat(int index) { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Float.intBitsToFloat(getInt(index)); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 156eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final int getInt() { 15843a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.INT; 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes int result = Memory.peekInt(backingArray, offset + position, order); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final int getInt(int index) { 169a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.INT); 170f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes return Memory.peekInt(backingArray, offset + index, order); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final long getLong() { 17543a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.LONG; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes long result = Memory.peekLong(backingArray, offset + position, order); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final long getLong(int index) { 186a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.LONG); 187f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes return Memory.peekLong(backingArray, offset + index, order); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final short getShort() { 19243a9f774d075e0e441d8b996e3f6c81ea483ec89Elliott Hughes int newPosition = position + SizeOf.SHORT; 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newPosition > limit) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes short result = Memory.peekShort(backingArray, offset + position, order); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final short getShort(int index) { 203a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index, SizeOf.SHORT); 204f934c3d2c8dd9e6bc5299cef41adace2a671637dElliott Hughes return Memory.peekShort(backingArray, offset + index, order); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final boolean isDirect() { 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 212