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