117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta/* 217a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * Copyright (C) 2014 The Android Open Source Project 317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * 417a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * you may not use this file except in compliance with the License. 617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * You may obtain a copy of the License at 717a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * 817a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * http://www.apache.org/licenses/LICENSE-2.0 917a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * 1017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * Unless required by applicable law or agreed to in writing, software 1117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS, 1217a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * See the License for the specific language governing permissions and 1417a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta * limitations under the License. 1517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta */ 1617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 1717a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Guptapackage com.android.layoutlib.bridge.libcore.io; 1817a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 195ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Guptaimport java.nio.ByteBuffer; 2017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 2117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Guptaimport libcore.io.BufferIterator; 2217a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 2317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta/** 245ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta * Provides an implementation of {@link BufferIterator} over a {@link ByteBuffer}. 2517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta */ 2617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Guptapublic class BridgeBufferIterator extends BufferIterator { 2717a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 2817a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta private final long mSize; 295ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta private final ByteBuffer mByteBuffer; 3017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 315ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta public BridgeBufferIterator(long size, ByteBuffer buffer) { 3217a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta mSize = size; 335ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta mByteBuffer = buffer; 3417a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 3517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 3617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 3717a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public void seek(int offset) { 385ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta assert offset <= mSize; 395ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta mByteBuffer.position(offset); 4017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 4117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 4217a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 4317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public void skip(int byteCount) { 445ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta int newPosition = mByteBuffer.position() + byteCount; 455ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta assert newPosition <= mSize; 465ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta mByteBuffer.position(newPosition); 4717a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 4817a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 4917a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 5017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public void readByteArray(byte[] dst, int dstOffset, int byteCount) { 5117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta assert dst.length >= dstOffset + byteCount; 525ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta mByteBuffer.get(dst, dstOffset, byteCount); 5317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 5417a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 5517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 5617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public byte readByte() { 575ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta return mByteBuffer.get(); 5817a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 5917a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 6017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 6117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public int readInt() { 625ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta return mByteBuffer.getInt(); 6317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 6417a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 6517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 6617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public void readIntArray(int[] dst, int dstOffset, int intCount) { 6717a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta while (--intCount >= 0) { 685ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta dst[dstOffset++] = mByteBuffer.getInt(); 6917a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 7017a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 7117a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta 7217a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta @Override 7317a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta public short readShort() { 745ceb7f6431f447aa9d4e949578ce5d4b90b8297cDeepanshu Gupta return mByteBuffer.getShort(); 7517a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta } 7617a6170c62e6f74f2881623a9c16f0b6fea54721Deepanshu Gupta} 77