| // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package com.android.tools.r8; | |
| import com.android.tools.r8.keepanno.annotations.KeepForApi; | |
| import java.util.Arrays; | |
| /** Byte data view of a buffer that is possibly larger than the data content. */ | |
| @KeepForApi | |
| public final class ByteDataView { | |
| private byte[] buffer; | |
| private final int offset; | |
| private final int length; | |
| /** Create a view spanning an entire byte array. */ | |
| public static ByteDataView of(byte[] data) { | |
| return new ByteDataView(data, 0, data.length); | |
| } | |
| /** | |
| * Create a view of a byte array. | |
| * | |
| * <p>The view starts at {@param offset} and runs {@param length} bytes. | |
| */ | |
| public ByteDataView(byte[] buffer, int offset, int length) { | |
| assert offset >= 0; | |
| assert length >= 0; | |
| assert offset + length <= buffer.length; | |
| this.buffer = buffer; | |
| this.offset = offset; | |
| this.length = length; | |
| } | |
| /** Get the full backing buffer of the byte data view. */ | |
| public byte[] getBuffer() { | |
| assert buffer != null; | |
| return buffer; | |
| } | |
| /** Get the offset at which the view starts. */ | |
| public int getOffset() { | |
| assert buffer != null; | |
| return offset; | |
| } | |
| /** | |
| * Get the length of the data content. | |
| * | |
| * <p>Note that this does not include the offset. | |
| */ | |
| public int getLength() { | |
| assert buffer != null; | |
| return length; | |
| } | |
| /** Get a copy of the data truncated to the actual data view. */ | |
| public byte[] copyByteData() { | |
| return Arrays.copyOfRange(buffer, offset, offset + length); | |
| } | |
| public void invalidate() { | |
| buffer = null; | |
| } | |
| } |