.append( "=" )
.append(ptg.toString() )
.append( "\n" )
- .append(ptg.toDebugString() )
+ .append(ptg.toString())
.append( "\n" );
}
}
import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianByteArrayOutputStream;
+import org.apache.poi.util.LittleEndianOutput;
/**
* The TXO record (0x01B6) is used to define the properties of a text box. It is
private int serializeTXORecord(int offset, byte[] data) {
int dataSize = getDataSize();
+ int recSize = dataSize+4;
+ LittleEndianOutput out = new LittleEndianByteArrayOutputStream(data, offset, recSize);
- LittleEndian.putUShort(data, 0 + offset, TextObjectRecord.sid);
- LittleEndian.putUShort(data, 2 + offset, dataSize);
-
+ out.writeShort(TextObjectRecord.sid);
+ out.writeShort(dataSize);
- LittleEndian.putUShort(data, 4 + offset, field_1_options);
- LittleEndian.putUShort(data, 6 + offset, field_2_textOrientation);
- LittleEndian.putUShort(data, 8 + offset, field_3_reserved4);
- LittleEndian.putUShort(data, 10 + offset, field_4_reserved5);
- LittleEndian.putUShort(data, 12 + offset, field_5_reserved6);
- LittleEndian.putUShort(data, 14 + offset, _text.length());
- LittleEndian.putUShort(data, 16 + offset, getFormattingDataLength());
- LittleEndian.putInt(data, 18 + offset, field_8_reserved7);
+ out.writeShort(field_1_options);
+ out.writeShort(field_2_textOrientation);
+ out.writeShort(field_3_reserved4);
+ out.writeShort(field_4_reserved5);
+ out.writeShort(field_5_reserved6);
+ out.writeShort(_text.length());
+ out.writeShort(getFormattingDataLength());
+ out.writeInt(field_8_reserved7);
if (_linkRefPtg != null) {
- int pos = offset+22;
int formulaSize = _linkRefPtg.getSize();
- LittleEndian.putUShort(data, pos, formulaSize);
- pos += LittleEndian.SHORT_SIZE;
- LittleEndian.putInt(data, pos, _unknownPreFormulaInt);
- pos += LittleEndian.INT_SIZE;
- _linkRefPtg.writeBytes(data, pos);
- pos += formulaSize;
+ out.writeShort(formulaSize);
+ out.writeInt(_unknownPreFormulaInt);
+ _linkRefPtg.write(out);
if (_unknownPostFormulaByte != null) {
- LittleEndian.putByte(data, pos, _unknownPostFormulaByte.byteValue());
- pos += LittleEndian.BYTE_SIZE;
+ out.writeByte(_unknownPostFormulaByte.byteValue());
}
}
-
- return 4 + dataSize;
+ return recSize;
}
private int serializeTrailingRecords(int offset, byte[] data) {
buf.append(")");
}
- public abstract void writeBytes(byte[] array, int offset);
public abstract int getSize();
package org.apache.poi.hssf.record.formula;\r
\r
import org.apache.poi.hssf.record.RecordInputStream;\r
-import org.apache.poi.util.LittleEndian;\r
+import org.apache.poi.util.LittleEndianOutput;\r
\r
/**\r
- * Common superclass of 2-D area refs \r
+ * Common superclass of 2-D area refs\r
*/\r
public abstract class Area2DPtgBase extends AreaPtgBase {\r
- private final static int SIZE = 9;\r
+ private final static int SIZE = 9;\r
\r
protected Area2DPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {\r
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);\r
}\r
+\r
protected Area2DPtgBase(RecordInputStream in) {\r
readCoordinates(in);\r
}\r
+\r
protected abstract byte getSid();\r
\r
- public final void writeBytes(byte [] array, int offset) {\r
- LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());\r
- writeCoordinates(array, offset+1); \r
+ public final void write(LittleEndianOutput out) {\r
+ out.writeByte(getSid() + getPtgClass());\r
+ writeCoordinates(out);\r
}\r
+\r
public Area2DPtgBase(String arearef) {\r
- super(arearef);\r
+ super(arearef);\r
}\r
+\r
public final int getSize() {\r
return SIZE;\r
}\r
+\r
public final String toFormulaString() {\r
- return formatReferenceAsString();\r
+ return formatReferenceAsString();\r
+ }\r
+\r
+ public final String toString() {\r
+ StringBuffer sb = new StringBuffer();\r
+ sb.append(getClass().getName());\r
+ sb.append(" [");\r
+ sb.append(formatReferenceAsString());\r
+ sb.append("]");\r
+ return sb.toString();\r
}\r
- public final String toString() {\r
- StringBuffer sb = new StringBuffer();\r
- sb.append(getClass().getName());\r
- sb.append(" [");\r
- sb.append(formatReferenceAsString());\r
- sb.append("]");\r
- return sb.toString();\r
- }\r
}\r
import org.apache.poi.ss.formula.ExternSheetReferenceToken;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
import org.apache.poi.ss.formula.WorkbookDependentFormula;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* Title: Area 3D Ptg - 3D reference (Sheet + Area)<P>
return sb.toString();
}
- public void writeBytes(byte[] array, int offset) {
- LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
- LittleEndian.putUShort(array, 1 + offset, field_1_index_extern_sheet);
- writeCoordinates(array, offset+3);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_index_extern_sheet);
+ writeCoordinates(out);
}
public int getSize() {
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* AreaErr - handles deleted cell area references.
unused2 = in.readInt();
}
- public void writeBytes(byte[] array, int offset) {
- LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
- LittleEndian.putInt(array, offset + 1, unused1);
- LittleEndian.putInt(array, offset + 5, unused2);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeInt(unused1);
+ out.writeInt(unused2);
}
public String toFormulaString() {
import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* Specifies a rectangular area of cells A1:A4 for instance.
private int field_3_first_column;
/** zero based, unsigned 8 bit */
private int field_4_last_column;
-
+
private final static BitField rowRelative = BitFieldFactory.getInstance(0x8000);
private final static BitField colRelative = BitFieldFactory.getInstance(0x4000);
private final static BitField columnMask = BitFieldFactory.getInstance(0x3FFF);
protected AreaPtgBase() {
// do nothing
}
-
+
protected AreaPtgBase(String arearef) {
AreaReference ar = new AreaReference(arearef);
CellReference firstCell = ar.getFirstCell();
setFirstColRelative(!firstCell.isColAbsolute());
setLastColRelative(!lastCell.isColAbsolute());
setFirstRowRelative(!firstCell.isRowAbsolute());
- setLastRowRelative(!lastCell.isRowAbsolute());
+ setLastRowRelative(!lastCell.isRowAbsolute());
}
-
+
protected AreaPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn,
boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
-
+
checkColumnBounds(firstColumn);
checkColumnBounds(lastColumn);
checkRowBounds(firstRow);
checkRowBounds(lastRow);
-
+
if (lastRow > firstRow) {
setFirstRow(firstRow);
setLastRow(lastRow);
setFirstRowRelative(lastRowRelative);
setLastRowRelative(firstRowRelative);
}
-
+
if (lastColumn > firstColumn) {
setFirstColumn(firstColumn);
setLastColumn(lastColumn);
setFirstColRelative(lastColRelative);
setLastColRelative(firstColRelative);
}
- }
+ }
private static void checkColumnBounds(int colIx) {
if((colIx & 0x0FF) != colIx) {
field_3_first_column = in.readUShort();
field_4_last_column = in.readUShort();
}
- protected final void writeCoordinates(byte[] array, int offset) {
- LittleEndian.putUShort(array, offset + 0, field_1_first_row);
- LittleEndian.putUShort(array, offset + 2, field_2_last_row);
- LittleEndian.putUShort(array, offset + 4, field_3_first_column);
- LittleEndian.putUShort(array, offset + 6, field_4_last_column);
+ protected final void writeCoordinates(LittleEndianOutput out) {
+ out.writeShort(field_1_first_row);
+ out.writeShort(field_2_last_row);
+ out.writeShort(field_3_first_column);
+ out.writeShort(field_4_last_column);
}
/**
}
/**
- * @param rowIx last row number in the area
+ * @param rowIx last row number in the area
*/
public final void setLastRow(int rowIx) {
checkRowBounds(rowIx);
public final boolean isFirstRowRelative() {
return rowRelative.isSet(field_3_first_column);
}
-
+
/**
* sets the first row to relative or not
* @param rel is relative or not.
public final boolean isFirstColRelative() {
return colRelative.isSet(field_3_first_column);
}
-
+
/**
- * set whether the first column is relative
+ * set whether the first column is relative
*/
public final void setFirstColRelative(boolean rel) {
field_3_first_column=colRelative.setBoolean(field_3_first_column,rel);
public final boolean isLastRowRelative() {
return rowRelative.isSet(field_4_last_column);
}
-
+
/**
* set whether the last row is relative or not
* @param rel <code>true</code> if the last row relative, else
public final boolean isLastColRelative() {
return colRelative.isSet(field_4_last_column);
}
-
+
/**
* set whether the last column should be relative or not
*/
public final void setLastColRelative(boolean rel) {
field_4_last_column=colRelative.setBoolean(field_4_last_column,rel);
}
-
+
/**
* set the last column in the area
*/
protected final String formatReferenceAsString() {
CellReference topLeft = new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative());
CellReference botRight = new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative());
-
+
if(AreaReference.isWholeColumnReference(topLeft, botRight)) {
return (new AreaReference(topLeft, botRight)).formatAsString();
}
- return topLeft.formatAsString() + ":" + botRight.formatAsString();
+ return topLeft.formatAsString() + ":" + botRight.formatAsString();
}
-
+
public String toFormulaString() {
return formatReferenceAsString();
}
import org.apache.poi.hssf.record.constant.ConstantValueParser;
import org.apache.poi.hssf.record.constant.ErrorConstant;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* ArrayPtg - handles arrays
return rowIx * token_1_columns + colIx;
}
- public void writeBytes(byte[] data, int offset) {
-
- LittleEndian.putByte(data, offset + 0, sid + getPtgClass());
- System.arraycopy(field_1_reserved, 0, data, offset+1, RESERVED_FIELD_LEN);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.write(field_1_reserved);
}
public int writeTokenValueBytes(byte[] data, int offset) {
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* "Special Attributes"
return sb.toString();
}
- public void writeBytes(byte [] array, int offset)
- {
- LittleEndian.putByte(array, offset+0, sid);
- LittleEndian.putByte(array, offset+1, field_1_options);
- LittleEndian.putShort(array,offset+2, field_2_data);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeByte(field_1_options);
+ out.writeShort(field_2_data);
int[] jt = _jumpTable;
if (jt != null) {
- int joff = offset+4;
for (int i = 0; i < jt.length; i++) {
- LittleEndian.putUShort(array, joff, jt[i]);
- joff+=2;
+ out.writeShort(jt[i]);
}
- LittleEndian.putUShort(array, joff, _chooseFuncOffset);
+ out.writeShort(_chooseFuncOffset);
}
}
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.util.LittleEndianOutput;
/**
- * Boolean (boolean)
- * Stores a (java) boolean value in a formula.
+ * Boolean (boolean) Stores a (java) boolean value in a formula.
+ *
* @author Paul Krause (pkrause at soundbite dot com)
* @author Andrew C. Oliver (acoliver at apache dot org)
* @author Jason Height (jheight at chariot dot net dot au)
*/
public final class BoolPtg extends ScalarConstantPtg {
- public final static int SIZE = 2;
- public final static byte sid = 0x1d;
- private final boolean _value;
-
- public BoolPtg(RecordInputStream in) {
- _value = (in.readByte() == 1);
- }
-
- public BoolPtg(String formulaToken) {
- _value = (formulaToken.equalsIgnoreCase("TRUE"));
- }
-
- public boolean getValue() {
- return _value;
- }
-
- public void writeBytes(byte [] array, int offset) {
- array[ offset + 0 ] = sid;
- array[ offset + 1 ] = (byte) (_value ? 1 : 0);
- }
-
- public int getSize() {
- return SIZE;
- }
-
- public String toFormulaString() {
- return _value ? "TRUE" : "FALSE";
- }
+ public final static int SIZE = 2;
+ public final static byte sid = 0x1D;
+ private final boolean _value;
+
+ public BoolPtg(RecordInputStream in) {
+ _value = (in.readByte() == 1);
+ }
+
+ public BoolPtg(String formulaToken) {
+ _value = (formulaToken.equalsIgnoreCase("TRUE"));
+ }
+
+ public boolean getValue() {
+ return _value;
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeByte(_value ? 1 : 0);
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ return _value ? "TRUE" : "FALSE";
+ }
}
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
-import org.apache.poi.ss.formula.WorkbookDependentFormula;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.ss.formula.WorkbookDependentFormula;
+import org.apache.poi.util.LittleEndianOutput;
/**
* Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
public int getSize() {
return 11;
}
- public void writeBytes(byte[] data, int offset) {
- LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
- LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
- LittleEndian.putInt(data, 3 + offset, unused1);
- LittleEndian.putInt(data, 7 + offset, unused2);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_index_extern_sheet);
+ out.writeInt(unused1);
+ out.writeInt(unused2);
}
}
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
-import org.apache.poi.ss.formula.WorkbookDependentFormula;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.ss.formula.WorkbookDependentFormula;
+import org.apache.poi.util.LittleEndianOutput;
/**
* Title: Deleted Reference 3D Ptg <P>
public int getSize() {
return 7;
}
- public void writeBytes(byte[] data, int offset) {
- LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
- LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
- LittleEndian.putInt(data, 3 + offset, unused1);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_index_extern_sheet);
+ out.writeInt(unused1);
}
}
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
+import org.apache.poi.util.LittleEndianOutput;
/**
* @author Daniel Noll (daniel at nuix dot com dot au)
return valueOf(in.readByte());
}
- public void writeBytes(byte [] array, int offset)
- {
- array[offset] = (byte) (sid + getPtgClass());
- array[offset + 1] = (byte)field_1_error_code;
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeByte(field_1_error_code);
}
public String toFormulaString() {
import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
*
field_1_first_row = in.readShort();
field_2_first_col = in.readShort();
}
-
- public void writeBytes(byte [] array, int offset)
- {
- array[offset+0]= (byte) (sid);
- LittleEndian.putShort(array,offset+1,field_1_first_row);
- LittleEndian.putShort(array,offset+3,field_2_first_col);
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_first_row);
+ out.writeShort(field_2_first_col);
}
public int getSize()
{
return SIZE;
}
-
+
public short getRow() {
return field_1_first_row;
}
public short getColumn() {
return field_2_first_col;
- }
+ }
public String toFormulaString()
{
throw new RecordFormatException("Coding Error: Expected ExpPtg to be converted from Shared to Non-Shared Formula by ValueRecordsAggregate, but it wasn't");
}
-
+
public String toString()
{
StringBuffer buffer = new StringBuffer("[Array Formula or Shared Formula]\n");
buffer.append("row = ").append(getRow()).append("\n");
buffer.append("col = ").append(getColumn()).append("\n");
return buffer.toString();
- }
+ }
}
==================================================================== */
package org.apache.poi.hssf.record.formula;
-import org.apache.poi.util.LittleEndian;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.record.formula.function.FunctionMetadata;
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
+import org.apache.poi.util.LittleEndianOutput;
/**
* @author aviks
paramClass = fm.getParameterClassCodes();
}
- public void writeBytes(byte[] array, int offset) {
- array[offset+0]= (byte) (sid + getPtgClass());
- LittleEndian.putShort(array,offset+1,field_2_fnc_index);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_2_fnc_index);
}
public int getNumberOfOperands() {
==================================================================== */
package org.apache.poi.hssf.record.formula;
-import org.apache.poi.util.LittleEndian;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.record.formula.function.FunctionMetadata;
import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry;
+import org.apache.poi.util.LittleEndianOutput;
/**
*
}
}
- public void writeBytes(byte[] array, int offset) {
- array[offset+0]=(byte) (sid + getPtgClass());
- array[offset+1]=field_1_num_args;
- LittleEndian.putShort(array,offset+2,field_2_fnc_index);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeByte(field_1_num_args);
+ out.writeShort(field_2_fnc_index);
}
public int getNumberOfOperands() {
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
- * Integer (unsigned short integer)
- * Stores an unsigned short value (java int) in a formula
- * @author Andrew C. Oliver (acoliver at apache dot org)
+ * Integer (unsigned short integer) Stores an unsigned short value (java int) in
+ * a formula
+ *
+ * @author Andrew C. Oliver (acoliver at apache dot org)
* @author Jason Height (jheight at chariot dot net dot au)
*/
public final class IntPtg extends ScalarConstantPtg {
- // 16 bit unsigned integer
- private static final int MIN_VALUE = 0x0000;
- private static final int MAX_VALUE = 0xFFFF;
-
- /**
- * Excel represents integers 0..65535 with the tInt token.
- * @return <code>true</code> if the specified value is within the range of values
- * <tt>IntPtg</tt> can represent.
- */
- public static boolean isInRange(int i) {
- return i>=MIN_VALUE && i <=MAX_VALUE;
- }
+ // 16 bit unsigned integer
+ private static final int MIN_VALUE = 0x0000;
+ private static final int MAX_VALUE = 0xFFFF;
- public final static int SIZE = 3;
- public final static byte sid = 0x1e;
- private final int field_1_value;
-
- public IntPtg(RecordInputStream in) {
- this(in.readUShort());
- }
+ /**
+ * Excel represents integers 0..65535 with the tInt token.
+ *
+ * @return <code>true</code> if the specified value is within the range of values
+ * <tt>IntPtg</tt> can represent.
+ */
+ public static boolean isInRange(int i) {
+ return i >= MIN_VALUE && i <= MAX_VALUE;
+ }
- public IntPtg(int value) {
- if(!isInRange(value)) {
- throw new IllegalArgumentException("value is out of range: " + value);
- }
- field_1_value = value;
- }
+ public final static int SIZE = 3;
+ public final static byte sid = 0x1e;
+ private final int field_1_value;
- public int getValue() {
- return field_1_value;
- }
+ public IntPtg(RecordInputStream in) {
+ this(in.readUShort());
+ }
- public void writeBytes(byte [] array, int offset) {
- array[ offset + 0 ] = sid;
- LittleEndian.putUShort(array, offset + 1, getValue());
- }
+ public IntPtg(int value) {
+ if (!isInRange(value)) {
+ throw new IllegalArgumentException("value is out of range: " + value);
+ }
+ field_1_value = value;
+ }
- public int getSize() {
- return SIZE;
- }
+ public int getValue() {
+ return field_1_value;
+ }
- public String toFormulaString() {
- return String.valueOf(getValue());
- }
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(getValue());
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ return String.valueOf(getValue());
+ }
}
package org.apache.poi.hssf.record.formula;
+import org.apache.poi.util.LittleEndianOutput;
/**
* @author Daniel Noll (daniel at nuix dot com dot au)
*/
public final class IntersectionPtg extends OperationPtg {
- public final static byte sid = 0x0f;
+ public final static byte sid = 0x0f;
- public static final OperationPtg instance = new IntersectionPtg();
+ public static final OperationPtg instance = new IntersectionPtg();
- private IntersectionPtg() {
- // enforce singleton
- }
+ private IntersectionPtg() {
+ // enforce singleton
+ }
- public final boolean isBaseToken() {
- return true;
- }
+ public final boolean isBaseToken() {
+ return true;
+ }
- public int getSize()
- {
- return 1;
- }
+ public int getSize() {
+ return 1;
+ }
- public void writeBytes( byte[] array, int offset )
- {
- array[ offset + 0 ] = sid;
- }
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ }
- /** Implementation of method from Ptg */
- public String toFormulaString()
- {
- return " ";
- }
+ public String toFormulaString() {
+ return " ";
+ }
+ public String toFormulaString(String[] operands) {
+ StringBuffer buffer = new StringBuffer();
- /** implementation of method from OperationsPtg*/
- public String toFormulaString(String[] operands)
- {
- StringBuffer buffer = new StringBuffer();
-
- buffer.append(operands[ 0 ]);
- buffer.append(" ");
- buffer.append(operands[ 1 ]);
- return buffer.toString();
- }
-
- public int getNumberOfOperands()
- {
- return 2;
- }
+ buffer.append(operands[0]);
+ buffer.append(" ");
+ buffer.append(operands[1]);
+ return buffer.toString();
+ }
+ public int getNumberOfOperands() {
+ return 2;
+ }
}
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* @author Daniel Noll (daniel at nuix dot com dot au)
*/
public class MemAreaPtg extends OperandPtg {
- public final static short sid = 0x26;
- private final static int SIZE = 7;
- private int field_1_reserved;
- private short field_2_subex_len;
-
- /** Creates new MemAreaPtg */
-
- public MemAreaPtg()
- {
- }
-
- public MemAreaPtg(RecordInputStream in)
- {
- field_1_reserved = in.readInt();
- field_2_subex_len = in.readShort();
- }
-
- public void setReserved(int res)
- {
- field_1_reserved = res;
- }
-
- public int getReserved()
- {
- return field_1_reserved;
- }
-
- public void setSubexpressionLength(short subexlen)
- {
- field_2_subex_len = subexlen;
- }
-
- public short getSubexpressionLength()
- {
- return field_2_subex_len;
- }
-
- public void writeBytes(byte [] array, int offset)
- {
- array[offset] = (byte) (sid + getPtgClass());
- LittleEndian.putInt(array, offset + 1, field_1_reserved);
- LittleEndian.putShort(array, offset + 5, field_2_subex_len);
- }
-
- public int getSize()
- {
- return SIZE;
- }
-
- public String toFormulaString()
- {
- return ""; // TODO: Not sure how to format this. -- DN
- }
-
- public byte getDefaultOperandClass() {
- return Ptg.CLASS_VALUE;
- }
+ public final static short sid = 0x26;
+ private final static int SIZE = 7;
+ private final int field_1_reserved;
+ private final int field_2_subex_len;
+
+ /** Creates new MemAreaPtg */
+
+ public MemAreaPtg(int subexLen) {
+ field_1_reserved = 0;
+ field_2_subex_len = subexLen;
+ }
+
+ public MemAreaPtg(RecordInputStream in) {
+ field_1_reserved = in.readInt();
+ field_2_subex_len = in.readShort();
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeInt(field_1_reserved);
+ out.writeShort(field_2_subex_len);
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ return ""; // TODO: Not sure how to format this. -- DN
+ }
+
+ public byte getDefaultOperandClass() {
+ return Ptg.CLASS_VALUE;
+ }
}
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.util.LittleEndianOutput;
/**
- *
- * @author andy
+ *
+ * @author andy
* @author Jason Height (jheight at chariot dot net dot au)
* @author Daniel Noll (daniel at nuix dot com dot au)
*/
-
-public final class MemErrPtg extends MemAreaPtg {
- public final static short sid = 0x27;
-
- /** Creates new MemErrPtg */
-
- public MemErrPtg()
- {
- }
-
- public MemErrPtg(RecordInputStream in) {
- super(in);
- }
-
- public void writeBytes(byte [] array, int offset) {
- super.writeBytes(array, offset);
- array[offset] = (byte) (sid + getPtgClass());
- }
-
- public String toFormulaString()
- {
- return "ERR#";
- }
+public final class MemErrPtg extends OperandPtg {
+ public final static short sid = 0x27;
+ private final static int SIZE = 7;
+ private int field_1_reserved;
+ private short field_2_subex_len;
+
+ public MemErrPtg(RecordInputStream in) {
+ field_1_reserved = in.readInt();
+ field_2_subex_len = in.readShort();
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeInt(field_1_reserved);
+ out.writeShort(field_2_subex_len);
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ return "ERR#";
+ }
+
+ public byte getDefaultOperandClass() {
+ return Ptg.CLASS_VALUE;
+ }
}
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* @author Glen Stampoultzis (glens at apache.org)
*/
public final class MemFuncPtg extends OperandPtg {
- public final static byte sid = 0x29;
- private final int field_1_len_ref_subexpression;
+ public final static byte sid = 0x29;
+ private final int field_1_len_ref_subexpression;
- /**Creates new function pointer from a byte array
- * usually called while reading an excel file.
- */
- public MemFuncPtg(RecordInputStream in) {
- this(in.readUShort());
- }
+ /**
+ * Creates new function pointer from a byte array usually called while
+ * reading an excel file.
+ */
+ public MemFuncPtg(RecordInputStream in) {
+ this(in.readUShort());
+ }
- public MemFuncPtg(int subExprLen) {
- field_1_len_ref_subexpression = subExprLen;
+ public MemFuncPtg(int subExprLen) {
+ field_1_len_ref_subexpression = subExprLen;
}
- public int getSize()
- {
- return 3;
- }
+ public int getSize() {
+ return 3;
+ }
- public void writeBytes( byte[] array, int offset )
- {
- array[offset + 0] = sid ;
- LittleEndian.putUShort( array, offset + 1, field_1_len_ref_subexpression );
- }
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_len_ref_subexpression);
+ }
- public String toFormulaString()
- {
- return "";
- }
+ public String toFormulaString() {
+ return "";
+ }
- public byte getDefaultOperandClass()
- {
- return Ptg.CLASS_REF;
- }
+ public byte getDefaultOperandClass() {
+ return Ptg.CLASS_REF;
+ }
- public int getNumberOfOperands()
- {
- return field_1_len_ref_subexpression;
- }
+ public int getNumberOfOperands() {
+ return field_1_len_ref_subexpression;
+ }
- public int getLenRefSubexpression()
- {
- return field_1_len_ref_subexpression;
- }
+ public int getLenRefSubexpression() {
+ return field_1_len_ref_subexpression;
+ }
}
\ No newline at end of file
package org.apache.poi.hssf.record.formula;
+import org.apache.poi.util.LittleEndianOutput;
+
/**
* Missing Function Arguments
- *
+ *
* Avik Sengupta <avik at apache.org>
+ *
* @author Jason Height (jheight at chariot dot net dot au)
*/
public final class MissingArgPtg extends ScalarConstantPtg {
-
- private final static int SIZE = 1;
- public final static byte sid = 0x16;
-
- public static final Ptg instance = new MissingArgPtg();
-
- private MissingArgPtg() {
- // enforce singleton
- }
-
- public void writeBytes(byte [] array, int offset) {
- array[ offset + 0 ] = sid;
- }
-
- public int getSize() {
- return SIZE;
- }
-
- public String toFormulaString() {
- return " ";
- }
+
+ private final static int SIZE = 1;
+ public final static byte sid = 0x16;
+
+ public static final Ptg instance = new MissingArgPtg();
+
+ private MissingArgPtg() {
+ // enforce singleton
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ return " ";
+ }
}
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.ss.formula.WorkbookDependentFormula;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.ss.formula.WorkbookDependentFormula;
+import org.apache.poi.util.LittleEndianOutput;
/**
- *
- * @author andy
+ *
+ * @author andy
* @author Jason Height (jheight at chariot dot net dot au)
*/
public final class NamePtg extends OperandPtg implements WorkbookDependentFormula {
- public final static short sid = 0x23;
- private final static int SIZE = 5;
- /** one-based index to defined name record */
- private int field_1_label_index;
- private short field_2_zero; // reserved must be 0
+ public final static short sid = 0x23;
+ private final static int SIZE = 5;
+ /** one-based index to defined name record */
+ private int field_1_label_index;
+ private short field_2_zero; // reserved must be 0
- /**
- * @param nameIndex zero-based index to name within workbook
- */
- public NamePtg(int nameIndex) {
- field_1_label_index = 1+nameIndex; // convert to 1-based
- }
+ /**
+ * @param nameIndex zero-based index to name within workbook
+ */
+ public NamePtg(int nameIndex) {
+ field_1_label_index = 1 + nameIndex; // convert to 1-based
+ }
- /** Creates new NamePtg */
+ /** Creates new NamePtg */
- public NamePtg(RecordInputStream in) {
- field_1_label_index = in.readShort();
- field_2_zero = in.readShort();
- }
-
- /**
- * @return zero based index to a defined name record in the LinkTable
- */
- public int getIndex() {
- return field_1_label_index-1; // convert to zero based
- }
+ public NamePtg(RecordInputStream in) {
+ field_1_label_index = in.readShort();
+ field_2_zero = in.readShort();
+ }
- public void writeBytes(byte [] array, int offset) {
- LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
- LittleEndian.putUShort(array, offset + 1, field_1_label_index);
- LittleEndian.putUShort(array, offset + 3, field_2_zero);
- }
+ /**
+ * @return zero based index to a defined name record in the LinkTable
+ */
+ public int getIndex() {
+ return field_1_label_index - 1; // convert to zero based
+ }
- public int getSize() {
- return SIZE;
- }
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_label_index);
+ out.writeShort(field_2_zero);
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString(FormulaRenderingWorkbook book) {
+ return book.getNameText(this);
+ }
- public String toFormulaString(FormulaRenderingWorkbook book)
- {
- return book.getNameText(this);
- }
public String toFormulaString() {
throw new RuntimeException("3D references need a workbook to determine formula text");
}
-
- public byte getDefaultOperandClass() {
+
+ public byte getDefaultOperandClass() {
return Ptg.CLASS_REF;
}
}
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.ss.formula.WorkbookDependentFormula;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.ss.formula.WorkbookDependentFormula;
+import org.apache.poi.util.LittleEndianOutput;
/**
*
this(in.readUShort(), in.readUShort(), in.readUShort());
}
- public void writeBytes(byte[] array, int offset) {
- LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
- LittleEndian.putUShort(array, offset + 1, _sheetRefIndex);
- LittleEndian.putUShort(array, offset + 3, _nameNumber);
- LittleEndian.putUShort(array, offset + 5, _reserved);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(_sheetRefIndex);
+ out.writeShort(_nameNumber);
+ out.writeShort(_reserved);
}
public int getSize() {
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
- * Number
- * Stores a floating point value in a formula
- * value stored in a 8 byte field using IEEE notation
- * @author Avik Sengupta
+ * Number Stores a floating point value in a formula value stored in a 8 byte
+ * field using IEEE notation
+ *
+ * @author Avik Sengupta
* @author Jason Height (jheight at chariot dot net dot au)
*/
public final class NumberPtg extends ScalarConstantPtg {
- public final static int SIZE = 9;
- public final static byte sid = 0x1f;
- private final double field_1_value;
-
- /** Create a NumberPtg from a byte array read from disk */
- public NumberPtg(RecordInputStream in) {
- this(in.readDouble());
- }
-
- /** Create a NumberPtg from a string representation of the number
- * Number format is not checked, it is expected to be validated in the parser
- * that calls this method.
- * @param value : String representation of a floating point number
- */
- public NumberPtg(String value) {
- this(Double.parseDouble(value));
- }
-
- public NumberPtg(double value) {
- field_1_value = value;
- }
-
- public double getValue() {
- return field_1_value;
- }
+ public final static int SIZE = 9;
+ public final static byte sid = 0x1f;
+ private final double field_1_value;
- public void writeBytes(byte [] array, int offset) {
- array[ offset + 0 ] = sid;
- LittleEndian.putDouble(array, offset + 1, getValue());
- }
+ public NumberPtg(RecordInputStream in) {
+ this(in.readDouble());
+ }
- public int getSize() {
- return SIZE;
- }
+ /**
+ * Create a NumberPtg from a string representation of the number Number
+ * format is not checked, it is expected to be validated in the parser that
+ * calls this method.
+ *
+ * @param value String representation of a floating point number
+ */
+ public NumberPtg(String value) {
+ this(Double.parseDouble(value));
+ }
- public String toFormulaString() {
- // TODO - java's rendering of double values is not quite same as excel's
- return String.valueOf(field_1_value);
- }
+ public NumberPtg(double value) {
+ field_1_value = value;
+ }
+
+ public double getValue() {
+ return field_1_value;
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeDouble(getValue());
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ // TODO - java's rendering of double values is not quite same as excel's
+ return String.valueOf(field_1_value);
+ }
}
limitations under the License.
==================================================================== */
-
package org.apache.poi.hssf.record.formula;
+import org.apache.poi.util.LittleEndianOutput;
/**
- * While formula tokens are stored in RPN order and thus do not need parenthesis for
- * precedence reasons, Parenthesis tokens ARE written to ensure that user entered
- * parenthesis are displayed as-is on reading back
- *
- * Avik Sengupta <lists@aviksengupta.com>
- * Andrew C. Oliver (acoliver at apache dot org)
+ * While formula tokens are stored in RPN order and thus do not need parenthesis
+ * for precedence reasons, Parenthesis tokens ARE written to ensure that user
+ * entered parenthesis are displayed as-is on reading back
+ *
+ * Avik Sengupta <lists@aviksengupta.com> Andrew C. Oliver (acoliver at
+ * apache dot org)
+ *
* @author Jason Height (jheight at chariot dot net dot au)
*/
public final class ParenthesisPtg extends ControlPtg {
-
- private final static int SIZE = 1;
- public final static byte sid = 0x15;
-
- public static final ControlPtg instance = new ParenthesisPtg();
- private ParenthesisPtg() {
- // enforce singleton
- }
-
- public void writeBytes(byte [] array, int offset)
- {
- array[ offset + 0 ] = sid;
- }
-
- public int getSize()
- {
- return SIZE;
- }
-
- public String toFormulaString()
- {
- return "()";
- }
-
-
- public String toFormulaString(String[] operands) {
- return "("+operands[0]+")";
- }
+
+ private final static int SIZE = 1;
+ public final static byte sid = 0x15;
+
+ public static final ControlPtg instance = new ParenthesisPtg();
+
+ private ParenthesisPtg() {
+ // enforce singleton
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ }
+
+ public int getSize() {
+ return SIZE;
+ }
+
+ public String toFormulaString() {
+ return "()";
+ }
+
+ public String toFormulaString(String[] operands) {
+ return "(" + operands[0] + ")";
+ }
}
import java.util.List;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.LittleEndianByteArrayOutputStream;
import org.apache.poi.util.LittleEndianOutput;
/**
private static Ptg createBasePtg(byte id, RecordInputStream in) {
switch(id) {
- case 0x00: return new UnknownPtg(); // TODO - not a real Ptg
+ case 0x00: return new UnknownPtg(id); // TODO - not a real Ptg
case ExpPtg.sid: return new ExpPtg(in); // 0x01
case TblPtg.sid: return new TblPtg(in); // 0x02
case AddPtg.sid: return AddPtg.instance; // 0x03
*/
public static int serializePtgs(Ptg[] ptgs, byte[] array, int offset) {
int pos = 0;
- int size = ptgs.length;
+ int nTokens = ptgs.length;
+
+ LittleEndianOutput out = new LittleEndianByteArrayOutputStream(array, offset);
List arrayPtgs = null;
- for (int k = 0; k < size; k++) {
+ for (int k = 0; k < nTokens; k++) {
Ptg ptg = ptgs[k];
- ptg.writeBytes(array, pos + offset);
+ ptg.write(out);
if (ptg instanceof ArrayPtg) {
if (arrayPtgs == null) {
arrayPtgs = new ArrayList(5);
*/
// public abstract int getDataSize();
- public final byte[] getBytes()
- {
- int size = getSize();
- byte[] bytes = new byte[ size ];
-
- writeBytes(bytes, 0);
- return bytes;
- }
- /** write this Ptg to a byte array*/
- public abstract void writeBytes(byte [] array, int offset);
-
- public void write(LittleEndianOutput out) {
- out.write(getBytes()); // TODO - optimise - just a hack for the moment
- }
+ public abstract void write(LittleEndianOutput out);
/**
* return a string representation of this token alone
*/
public abstract String toFormulaString();
- /**
- * dump a debug representation (hexdump) to a string
- */
- public final String toDebugString() {
- byte[] ba = new byte[getSize()];
- writeBytes(ba,0);
- try {
- return HexDump.dump(ba,0,0);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
/** Overridden toString method to ensure object hash is not printed.
* This helps get rid of gratuitous diffs when comparing two dumps
package org.apache.poi.hssf.record.formula;
+import org.apache.poi.util.LittleEndianOutput;
+
/**
* @author Daniel Noll (daniel at nuix dot com dot au)
return SIZE;
}
- public void writeBytes( byte[] array, int offset )
- {
- array[ offset + 0 ] = sid;
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
}
public String toFormulaString()
package org.apache.poi.hssf.record.formula;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* @author Josh Micich
*/
abstract class Ref2DPtgBase extends RefPtgBase {
- private final static int SIZE = 5;
+ private final static int SIZE = 5;
- /**
- * Takes in a String representation of a cell reference and fills out the
- * numeric fields.
- */
- protected Ref2DPtgBase(String cellref) {
- super(cellref);
- }
+ /**
+ * Takes in a String representation of a cell reference and fills out the
+ * numeric fields.
+ */
+ protected Ref2DPtgBase(String cellref) {
+ super(cellref);
+ }
- protected Ref2DPtgBase(int row, int column, boolean isRowRelative, boolean isColumnRelative) {
- setRow(row);
- setColumn(column);
- setRowRelative(isRowRelative);
- setColRelative(isColumnRelative);
- }
+ protected Ref2DPtgBase(int row, int column, boolean isRowRelative, boolean isColumnRelative) {
+ setRow(row);
+ setColumn(column);
+ setRowRelative(isRowRelative);
+ setColRelative(isColumnRelative);
+ }
- protected Ref2DPtgBase(RecordInputStream in) {
- readCoordinates(in);
- }
- public final void writeBytes(byte [] array, int offset) {
- LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());
- writeCoordinates(array, offset+1);
- }
- public final String toFormulaString() {
- return formatReferenceAsString();
- }
+ protected Ref2DPtgBase(RecordInputStream in) {
+ readCoordinates(in);
+ }
+
+ public void write(LittleEndianOutput out) {
+ out.writeByte(getSid() + getPtgClass());
+ writeCoordinates(out);
+ }
+
+ public final String toFormulaString() {
+ return formatReferenceAsString();
+ }
protected abstract byte getSid();
- public final int getSize() {
- return SIZE;
- }
- public final String toString() {
- StringBuffer sb = new StringBuffer();
- sb.append(getClass().getName());
- sb.append(" [");
- sb.append(formatReferenceAsString());
- sb.append("]");
- return sb.toString();
- }
+
+ public final int getSize() {
+ return SIZE;
+ }
+
+ public final String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(getClass().getName());
+ sb.append(" [");
+ sb.append(formatReferenceAsString());
+ sb.append("]");
+ return sb.toString();
+ }
}
import org.apache.poi.ss.formula.ExternSheetReferenceToken;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
import org.apache.poi.ss.formula.WorkbookDependentFormula;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* Title: Reference 3D Ptg <P>
return sb.toString();
}
- public void writeBytes(byte [] array, int offset) {
- LittleEndian.putByte(array, 0 + offset, sid + getPtgClass());
- LittleEndian.putUShort(array, 1 + offset, getExternSheetIndex());
- writeCoordinates(array, offset + 3);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(getExternSheetIndex());
+ writeCoordinates(out);
}
public int getSize() {
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* RefError - handles deleted cell reference
return getClass().getName();
}
- public void writeBytes(byte [] array, int offset) {
- LittleEndian.putByte(array, offset+0, sid + getPtgClass());
- LittleEndian.putInt(array,offset+1,field_1_reserved);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeInt(field_1_reserved);
}
public int getSize()
import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* ReferencePtgBase - handles references (such as A1, A2, IA4)
- * @author Andrew C. Oliver (acoliver@apache.org)
+ *
+ * @author Andrew C. Oliver (acoliver@apache.org)
* @author Jason Height (jheight at chariot dot net dot au)
*/
public abstract class RefPtgBase extends OperandPtg {
- private final static int MAX_ROW_NUMBER = 65536;
-
- /** The row index - zero based unsigned 16 bit value */
- private int field_1_row;
- /** Field 2
- * - lower 8 bits is the zero based unsigned byte column index
- * - bit 16 - isRowRelative
- * - bit 15 - isColumnRelative
- */
- private int field_2_col;
- private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000);
- private static final BitField colRelative = BitFieldFactory.getInstance(0x4000);
- private static final BitField column = BitFieldFactory.getInstance(0x00FF);
-
- protected RefPtgBase() {
- //Required for clone methods
- }
-
- /**
- * Takes in a String representation of a cell reference and fills out the
- * numeric fields.
- */
- protected RefPtgBase(String cellref) {
- CellReference c= new CellReference(cellref);
- setRow(c.getRow());
- setColumn(c.getCol());
- setColRelative(!c.isColAbsolute());
- setRowRelative(!c.isRowAbsolute());
- }
-
- protected RefPtgBase(int row, int column, boolean isRowRelative, boolean isColumnRelative) {
- setRow(row);
- setColumn(column);
- setRowRelative(isRowRelative);
- setColRelative(isColumnRelative);
- }
-
- protected final void readCoordinates(RecordInputStream in) {
- field_1_row = in.readUShort();
- field_2_col = in.readUShort();
- }
- protected final void writeCoordinates(byte[] array, int offset) {
- LittleEndian.putUShort(array, offset + 0, field_1_row);
- LittleEndian.putUShort(array, offset + 2, field_2_col);
- }
-
- public final void setRow(int row) {
- if(row < 0 || row >= MAX_ROW_NUMBER) {
- throw new IllegalArgumentException("The row number, when specified as an integer, must be between 0 and " + MAX_ROW_NUMBER);
- }
- field_1_row = row;
- }
-
- /**
- * @return the row number as an int, between 0 and 65535
- */
- public final int getRow(){
- return field_1_row;
- }
-
- public final boolean isRowRelative() {
- return rowRelative.isSet(field_2_col);
- }
-
- public final void setRowRelative(boolean rel) {
- field_2_col=rowRelative.setBoolean(field_2_col,rel);
- }
-
- public final boolean isColRelative() {
- return colRelative.isSet(field_2_col);
- }
-
- public final void setColRelative(boolean rel) {
- field_2_col=colRelative.setBoolean(field_2_col,rel);
- }
-
- public final void setColumn(int col) {
- if(col < 0 || col >= 0x100) {
- throw new IllegalArgumentException("Specified colIx (" + col + ") is out of range");
- }
- field_2_col = column.setValue(field_2_col, col);
- }
-
- public final int getColumn() {
- return column.getValue(field_2_col);
- }
- protected final String formatReferenceAsString() {
- // Only make cell references as needed. Memory is an issue
- CellReference cr = new CellReference(getRow(), getColumn(), !isRowRelative(), !isColRelative());
- return cr.formatAsString();
- }
-
- public final byte getDefaultOperandClass() {
- return Ptg.CLASS_REF;
- }
+ private final static int MAX_ROW_NUMBER = 65536;
+
+ /** The row index - zero based unsigned 16 bit value */
+ private int field_1_row;
+ /**
+ * Field 2 - lower 8 bits is the zero based unsigned byte column index - bit
+ * 16 - isRowRelative - bit 15 - isColumnRelative
+ */
+ private int field_2_col;
+ private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000);
+ private static final BitField colRelative = BitFieldFactory.getInstance(0x4000);
+ private static final BitField column = BitFieldFactory.getInstance(0x00FF);
+
+ protected RefPtgBase() {
+ // Required for clone methods
+ }
+
+ /**
+ * Takes in a String representation of a cell reference and fills out the
+ * numeric fields.
+ */
+ protected RefPtgBase(String cellref) {
+ CellReference c = new CellReference(cellref);
+ setRow(c.getRow());
+ setColumn(c.getCol());
+ setColRelative(!c.isColAbsolute());
+ setRowRelative(!c.isRowAbsolute());
+ }
+
+ protected RefPtgBase(int row, int column, boolean isRowRelative, boolean isColumnRelative) {
+ setRow(row);
+ setColumn(column);
+ setRowRelative(isRowRelative);
+ setColRelative(isColumnRelative);
+ }
+
+ protected final void readCoordinates(RecordInputStream in) {
+ field_1_row = in.readUShort();
+ field_2_col = in.readUShort();
+ }
+
+ protected final void writeCoordinates(LittleEndianOutput out) {
+ out.writeShort(field_1_row);
+ out.writeShort(field_2_col);
+ }
+
+ public final void setRow(int rowIndex) {
+ if (rowIndex < 0 || rowIndex >= MAX_ROW_NUMBER) {
+ throw new IllegalArgumentException("rowIndex must be between 0 and " + MAX_ROW_NUMBER);
+ }
+ field_1_row = rowIndex;
+ }
+
+ /**
+ * @return the row number as an int, between 0 and 65535
+ */
+ public final int getRow() {
+ return field_1_row;
+ }
+
+ public final boolean isRowRelative() {
+ return rowRelative.isSet(field_2_col);
+ }
+
+ public final void setRowRelative(boolean rel) {
+ field_2_col = rowRelative.setBoolean(field_2_col, rel);
+ }
+
+ public final boolean isColRelative() {
+ return colRelative.isSet(field_2_col);
+ }
+
+ public final void setColRelative(boolean rel) {
+ field_2_col = colRelative.setBoolean(field_2_col, rel);
+ }
+
+ public final void setColumn(int col) {
+ if (col < 0 || col >= 0x100) {
+ throw new IllegalArgumentException("Specified colIx (" + col + ") is out of range");
+ }
+ field_2_col = column.setValue(field_2_col, col);
+ }
+
+ public final int getColumn() {
+ return column.getValue(field_2_col);
+ }
+
+ protected final String formatReferenceAsString() {
+ // Only make cell references as needed. Memory is an issue
+ CellReference cr = new CellReference(getRow(), getColumn(), !isRowRelative(), !isColRelative());
+ return cr.formatAsString();
+ }
+
+ public final byte getDefaultOperandClass() {
+ return Ptg.CLASS_REF;
+ }
}
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
+import org.apache.poi.util.LittleEndianOutput;
import org.apache.poi.util.StringUtil;
/**
return field_3_string;
}
- public void writeBytes(byte[] array, int offset) {
- array[offset + 0] = sid;
- array[offset + 1] = (byte) field_1_length;
- array[offset + 2] = field_2_options;
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeByte(field_1_length);
+ out.writeByte(field_2_options);
if (fHighByte.isSet(field_2_options)) {
- StringUtil.putUnicodeLE(getValue(), array, offset + 3);
+ StringUtil.putUnicodeLE(getValue(), out);
} else {
- StringUtil.putCompressedUnicode(getValue(), array, offset + 3);
+ StringUtil.putCompressedUnicode(getValue(), out);
}
}
import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianOutput;
/**
* This ptg indicates a data table.
field_2_first_col = in.readUShort();
}
- public void writeBytes(byte [] array, int offset) {
- LittleEndian.putByte(array, offset+0, sid);
- LittleEndian.putUShort(array, offset+1, field_1_first_row);
- LittleEndian.putUShort(array, offset+3, field_2_first_col);
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
+ out.writeShort(field_1_first_row);
+ out.writeShort(field_2_first_col);
}
public int getSize() {
package org.apache.poi.hssf.record.formula;
+import org.apache.poi.util.LittleEndianOutput;
+
/**
* @author Glen Stampoultzis (glens at apache.org)
return 1;
}
- public void writeBytes( byte[] array, int offset )
- {
- array[ offset + 0 ] = sid;
+ public void write(LittleEndianOutput out) {
+ out.writeByte(sid + getPtgClass());
}
public String toFormulaString()
==================================================================== */
package org.apache.poi.hssf.record.formula;
-import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.util.LittleEndianOutput;
/**
*
*/
public class UnknownPtg extends Ptg {
private short size = 1;
+ private final int _sid;
- /** Creates new UnknownPtg */
-
- public UnknownPtg()
- {
- }
-
- public UnknownPtg(RecordInputStream in) {
- // doesn't need anything
+ public UnknownPtg(int sid) {
+ _sid = sid;
}
public boolean isBaseToken() {
- return true;
+ return true;
}
- public void writeBytes(byte [] array, int offset)
- {
+ public void write(LittleEndianOutput out) {
+ out.writeByte(_sid);
}
public int getSize()
public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
public Object clone() {
- return new UnknownPtg();
+ return this;
}
-
-
}
package org.apache.poi.hssf.record.formula;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.util.LittleEndianOutput;
/**
- * Common superclass of all value operators.
- * Subclasses include all unary and binary operators except for the reference operators (IntersectionPtg, RangePtg, UnionPtg)
+ * Common superclass of all value operators. Subclasses include all unary and
+ * binary operators except for the reference operators (IntersectionPtg,
+ * RangePtg, UnionPtg)
*
* @author Josh Micich
*/
public abstract class ValueOperatorPtg extends OperationPtg {
/**
- * All Operator <tt>Ptg</tt>s are base tokens (i.e. are not RVA classified)
+ * All Operator <tt>Ptg</tt>s are base tokens (i.e. are not RVA classified)
*/
public final boolean isBaseToken() {
return true;
return Ptg.CLASS_VALUE;
}
- public final void writeBytes(byte[] array, int offset) {
- array[offset + 0] = getSid();
+ public void write(LittleEndianOutput out) {
+ out.writeByte(getSid());
}
protected abstract byte getSid();
public final int getSize() {
return 1;
}
- public final String toFormulaString() {
- // TODO - prune this method out of the hierarchy
- throw new RuntimeException("toFormulaString(String[] operands) should be used for subclasses of OperationPtgs");
+
+ public final String toFormulaString() {
+ // TODO - prune this method out of the hierarchy
+ throw new RuntimeException("toFormulaString(String[] operands) should be used for subclasses of OperationPtgs");
}
}
--- /dev/null
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.util;
+
+
+/**
+ * Adapts a plain byte array to {@link LittleEndianOutput}
+ *
+ *
+ * @author Josh Micich
+ */
+public final class LittleEndianByteArrayOutputStream implements LittleEndianOutput {
+ private final byte[] _buf;
+ private final int _endIndex;
+ private int _writeIndex;
+
+ public LittleEndianByteArrayOutputStream(byte[] buf, int startOffset, int maxWriteLen) {
+ _buf = buf;
+ _writeIndex = startOffset;
+ _endIndex = startOffset + maxWriteLen;
+ }
+ public LittleEndianByteArrayOutputStream(byte[] buf, int startOffset) {
+ this(buf, startOffset, buf.length - startOffset);
+ }
+
+ private void checkPosition(int i) {
+ if (i > _endIndex - _writeIndex) {
+ throw new RuntimeException("Buffer overrun");
+ }
+ }
+
+ public void writeByte(int v) {
+ checkPosition(1);
+ _buf[_writeIndex++] = (byte)v;
+ }
+
+ public void writeDouble(double v) {
+ writeLong(Double.doubleToLongBits(v));
+ }
+
+ public void writeInt(int v) {
+ checkPosition(4);
+ int i = _writeIndex;
+ _buf[i++] = (byte)((v >>> 0) & 0xFF);
+ _buf[i++] = (byte)((v >>> 8) & 0xFF);
+ _buf[i++] = (byte)((v >>> 16) & 0xFF);
+ _buf[i++] = (byte)((v >>> 24) & 0xFF);
+ _writeIndex = i;
+ }
+
+ public void writeLong(long v) {
+ writeInt((int)(v >> 0));
+ writeInt((int)(v >> 32));
+ }
+
+ public void writeShort(int v) {
+ checkPosition(2);
+ int i = _writeIndex;
+ _buf[i++] = (byte)((v >>> 0) & 0xFF);
+ _buf[i++] = (byte)((v >>> 8) & 0xFF);
+ _writeIndex = i;
+ }
+ public void write(byte[] b) {
+ int len = b.length;
+ checkPosition(len);
+ System.arraycopy(b, 0, _buf, _writeIndex, len);
+ _writeIndex += len;
+ }
+}