| Index: third_party/jmake/src/org/pantsbuild/jmake/BinaryFileWriter.java
|
| diff --git a/third_party/jmake/src/org/pantsbuild/jmake/BinaryFileWriter.java b/third_party/jmake/src/org/pantsbuild/jmake/BinaryFileWriter.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..01de41589e1c6d247d2c5fb6fb03f75d208b8f31
|
| --- /dev/null
|
| +++ b/third_party/jmake/src/org/pantsbuild/jmake/BinaryFileWriter.java
|
| @@ -0,0 +1,99 @@
|
| +/* Copyright (c) 2002-2008 Sun Microsystems, Inc. All rights reserved
|
| + *
|
| + * This program is distributed under the terms of
|
| + * the GNU General Public License Version 2. See the LICENSE file
|
| + * at the top of the source tree.
|
| + */
|
| +package org.pantsbuild.jmake;
|
| +
|
| +/**
|
| + * Basic operations for writing to a byte array representing a binary file.
|
| + *
|
| + * @author Misha Dmitriev
|
| + * 30 January 2002
|
| + */
|
| +public class BinaryFileWriter {
|
| +
|
| + protected byte[] buf;
|
| + protected int curBufSize, bufInc, curBufPos, threshold;
|
| + private boolean bufferIncreaseAllowed = true;
|
| +
|
| + protected void initBuf(int initSize) {
|
| + buf = new byte[initSize];
|
| + curBufSize = initSize;
|
| + bufInc = initSize / 5;
|
| + curBufPos = 0;
|
| + threshold = curBufSize - bufInc;
|
| + }
|
| +
|
| + protected void increaseBuf() {
|
| + if (!bufferIncreaseAllowed) {
|
| + return;
|
| + }
|
| + byte newBuf[] = new byte[curBufSize + bufInc];
|
| + System.arraycopy(buf, 0, newBuf, 0, curBufPos);
|
| + buf = newBuf;
|
| + curBufSize = buf.length;
|
| + threshold = curBufSize - bufInc;
|
| + }
|
| +
|
| + // This should be called with false only when we are sure that we set the exact size of the buffer
|
| + // and there is no need to increase it.
|
| + protected void setBufferIncreaseMode(boolean increaseMode) {
|
| + bufferIncreaseAllowed = increaseMode;
|
| + }
|
| +
|
| + public byte[] getBuffer() {
|
| + return buf;
|
| + }
|
| +
|
| +
|
| + protected void writeByte(byte b) {
|
| + if (curBufPos > threshold) {
|
| + increaseBuf();
|
| + }
|
| + buf[curBufPos++] = b;
|
| + }
|
| +
|
| + protected void writeChar(int ch) {
|
| + buf[curBufPos++] = (byte) ((ch >> 8) & 255);
|
| + buf[curBufPos++] = (byte) (ch & 255);
|
| + if (curBufPos > threshold) {
|
| + increaseBuf();
|
| + }
|
| + }
|
| +
|
| + protected void writeInt(int i) {
|
| + buf[curBufPos++] = (byte) ((i >> 24) & 255);
|
| + buf[curBufPos++] = (byte) ((i >> 16) & 255);
|
| + buf[curBufPos++] = (byte) ((i >> 8) & 255);
|
| + buf[curBufPos++] = (byte) (i & 255);
|
| + if (curBufPos > threshold) {
|
| + increaseBuf();
|
| + }
|
| + }
|
| +
|
| + protected void writeLong(long l) {
|
| + buf[curBufPos++] = (byte) ((l >> 56) & 255);
|
| + buf[curBufPos++] = (byte) ((l >> 48) & 255);
|
| + buf[curBufPos++] = (byte) ((l >> 40) & 255);
|
| + buf[curBufPos++] = (byte) ((l >> 32) & 255);
|
| + buf[curBufPos++] = (byte) ((l >> 24) & 255);
|
| + buf[curBufPos++] = (byte) ((l >> 16) & 255);
|
| + buf[curBufPos++] = (byte) ((l >> 8) & 255);
|
| + buf[curBufPos++] = (byte) (l & 255);
|
| + if (curBufPos > threshold) {
|
| + increaseBuf();
|
| + }
|
| + }
|
| +
|
| + protected void writeFloat(float f) {
|
| + int i = Float.floatToIntBits(f);
|
| + writeInt(i);
|
| + }
|
| +
|
| + protected void writeDouble(double d) {
|
| + long l = Double.doubleToLongBits(d);
|
| + writeLong(l);
|
| + }
|
| +}
|
|
|