1579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/* 2579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Copyright (C) 2007 The Android Open Source Project 3579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 4579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * you may not use this file except in compliance with the License. 6579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * You may obtain a copy of the License at 7579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 8579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 10579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Unless required by applicable law or agreed to in writing, software 11579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * See the License for the specific language governing permissions and 14579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * limitations under the License. 15579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 16579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 17579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpackage com.android.dx.util; 18579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 19579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/** 20579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Interface for a sink for binary output. This is similar to 21579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * {@code java.util.DataOutput}, but no {@code IOExceptions} 22579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * are declared, and multibyte output is defined to be little-endian. 23579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 24579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpublic interface Output extends ByteOutput { 25579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 26579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Gets the current cursor position. This is the same as the number of 27579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * bytes written to this instance. 28579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 29579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return {@code >= 0;} the cursor position 30579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 31579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public int getCursor(); 32579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 33579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 34579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Asserts that the cursor is the given value. 35579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 36579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param expectedCursor the expected cursor value 37579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @throws RuntimeException thrown if {@code getCursor() != 38579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * expectedCursor} 39579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 40579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void assertCursor(int expectedCursor); 41579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 42579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 43579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a {@code byte} to this instance. 44579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 45579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param value the value to write; all but the low 8 bits are ignored 46579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 47579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void writeByte(int value); 48579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 49579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 50579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a {@code short} to this instance. 51579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 52579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param value the value to write; all but the low 16 bits are ignored 53579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 54579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void writeShort(int value); 55579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 56579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 57579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes an {@code int} to this instance. 58579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 59579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param value the value to write 60579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 61579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void writeInt(int value); 62579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 63579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 64579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a {@code long} to this instance. 65579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 66579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param value the value to write 67579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 68579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void writeLong(long value); 69579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 70579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 71579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a DWARFv3-style unsigned LEB128 integer. For details, 72579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * see the "Dalvik Executable Format" document or DWARF v3 section 73579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 7.6. 74579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 75579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param value value to write, treated as an unsigned value 76579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return {@code 1..5;} the number of bytes actually written 77579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 78579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public int writeUleb128(int value); 79579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 80579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 81579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a DWARFv3-style unsigned LEB128 integer. For details, 82579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * see the "Dalvik Executable Format" document or DWARF v3 section 83579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 7.6. 84579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 85579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param value value to write 86579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return {@code 1..5;} the number of bytes actually written 87579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 88579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public int writeSleb128(int value); 89579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 90579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 91579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a {@link ByteArray} to this instance. 92579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 93579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param bytes {@code non-null;} the array to write 94579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 95579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void write(ByteArray bytes); 96579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 97579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 98579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a portion of a {@code byte[]} to this instance. 99579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 100579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param bytes {@code non-null;} the array to write 101579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param offset {@code >= 0;} offset into {@code bytes} for the first 102579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * byte to write 103579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param length {@code >= 0;} number of bytes to write 104579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 105579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void write(byte[] bytes, int offset, int length); 106579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 107579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 108579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes a {@code byte[]} to this instance. This is just 109579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * a convenient shorthand for {@code write(bytes, 0, bytes.length)}. 110579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 111579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param bytes {@code non-null;} the array to write 112579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 113579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void write(byte[] bytes); 114579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 115579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 116579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Writes the given number of {@code 0} bytes. 117579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 118579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param count {@code >= 0;} the number of zeroes to write 119579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 120579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void writeZeroes(int count); 121579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 122579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 123579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Adds extra bytes if necessary (with value {@code 0}) to 124579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * force alignment of the output cursor as given. 125579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 126579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param alignment {@code > 0;} the alignment; must be a power of two 127579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 128579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public void alignTo(int alignment); 129579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} 130