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