1c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta/* 2c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * Copyright (C) 2014 The Android Open Source Project 3c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * 4c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 5c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * you may not use this file except in compliance with the License. 6c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * You may obtain a copy of the License at 7c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * 8c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * http://www.apache.org/licenses/LICENSE-2.0 9c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * 10c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * Unless required by applicable law or agreed to in writing, software 11c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS, 12c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * See the License for the specific language governing permissions and 14c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta * limitations under the License. 15c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta */ 16c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 17c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Guptapackage com.android.layoutlib.bridge.libcore.io; 18c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 19e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Guptaimport java.nio.ByteBuffer; 20c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 21c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Guptaimport libcore.io.BufferIterator; 22c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 23c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta/** 24e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta * Provides an implementation of {@link BufferIterator} over a {@link ByteBuffer}. 25c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta */ 26c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Guptapublic class BridgeBufferIterator extends BufferIterator { 27c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 28c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta private final long mSize; 29e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta private final ByteBuffer mByteBuffer; 30c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 31e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta public BridgeBufferIterator(long size, ByteBuffer buffer) { 32c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta mSize = size; 33e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta mByteBuffer = buffer; 34c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 35c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 36c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 37c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public void seek(int offset) { 38e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta assert offset <= mSize; 39e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta mByteBuffer.position(offset); 40c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 41c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 42c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 43990ce87570a5e2755c5da18390b12a6ee10f916dNeil Fuller public int pos() { 44990ce87570a5e2755c5da18390b12a6ee10f916dNeil Fuller return mByteBuffer.position(); 45990ce87570a5e2755c5da18390b12a6ee10f916dNeil Fuller } 46990ce87570a5e2755c5da18390b12a6ee10f916dNeil Fuller 47990ce87570a5e2755c5da18390b12a6ee10f916dNeil Fuller @Override 48c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public void skip(int byteCount) { 49e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta int newPosition = mByteBuffer.position() + byteCount; 50e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta assert newPosition <= mSize; 51e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta mByteBuffer.position(newPosition); 52c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 53c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 54c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 55c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public void readByteArray(byte[] dst, int dstOffset, int byteCount) { 56c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta assert dst.length >= dstOffset + byteCount; 57e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta mByteBuffer.get(dst, dstOffset, byteCount); 58c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 59c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 60c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 61c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public byte readByte() { 62e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta return mByteBuffer.get(); 63c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 64c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 65c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 66c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public int readInt() { 67e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta return mByteBuffer.getInt(); 68c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 69c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 70c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 71c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public void readIntArray(int[] dst, int dstOffset, int intCount) { 72c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta while (--intCount >= 0) { 73e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta dst[dstOffset++] = mByteBuffer.getInt(); 74c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 75c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 76c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta 77c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta @Override 78c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta public short readShort() { 79e127e7cc361ccf82a8b78cbabed38d8f694b88d8Deepanshu Gupta return mByteBuffer.getShort(); 80c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta } 81c6fa65b9f29ae26ed3a2f4623cfa0286a1853a8bDeepanshu Gupta} 82