76 lines
2.3 KiB
Java
76 lines
2.3 KiB
Java
package org.apache.poi.hssf.record.formula;
|
|
import org.apache.poi.util.LittleEndian;
|
|
|
|
/**
|
|
*
|
|
* @author Jason Height (jheight at chariot dot net dot au)
|
|
*/
|
|
public class FuncVarPtg extends AbstractFunctionPtg{
|
|
|
|
public final static byte sid = 0x22;
|
|
private final static int SIZE = 4;
|
|
|
|
private FuncVarPtg() {
|
|
//Required for clone methods
|
|
}
|
|
|
|
/**Creates new function pointer from a byte array
|
|
* usually called while reading an excel file.
|
|
*/
|
|
public FuncVarPtg(byte[] data, int offset) {
|
|
offset++;
|
|
field_1_num_args = data[ offset + 0 ];
|
|
field_2_fnc_index = LittleEndian.getShort(data,offset + 1 );
|
|
}
|
|
|
|
/**
|
|
* Create a function ptg from a string tokenised by the parser
|
|
*/
|
|
public FuncVarPtg(String pName, byte pNumOperands) {
|
|
field_1_num_args = pNumOperands;
|
|
field_2_fnc_index = lookupIndex(pName);
|
|
try{
|
|
returnClass = ( (Byte) functionData[field_2_fnc_index][0]).byteValue();
|
|
paramClass = (byte[]) functionData[field_2_fnc_index][1];
|
|
} catch (NullPointerException npe ) {
|
|
returnClass = Ptg.CLASS_VALUE;
|
|
paramClass = new byte[] {Ptg.CLASS_VALUE};
|
|
}
|
|
}
|
|
|
|
public void writeBytes(byte[] array, int offset) {
|
|
array[offset+0]=(byte) (sid + ptgClass);
|
|
array[offset+1]=field_1_num_args;
|
|
LittleEndian.putShort(array,offset+2,field_2_fnc_index);
|
|
}
|
|
|
|
public int getNumberOfOperands() {
|
|
return field_1_num_args;
|
|
}
|
|
|
|
public Object clone() {
|
|
FuncVarPtg ptg = new FuncVarPtg();
|
|
ptg.field_1_num_args = field_1_num_args;
|
|
ptg.field_2_fnc_index = field_2_fnc_index;
|
|
ptg.setClass(ptgClass);
|
|
return ptg;
|
|
}
|
|
|
|
public int getSize() {
|
|
return SIZE;
|
|
}
|
|
|
|
public String toString() {
|
|
StringBuffer buffer = new StringBuffer();
|
|
buffer
|
|
.append("<FunctionVarPtg>").append("\n")
|
|
.append(" field_1_num_args=").append(field_1_num_args).append("\n")
|
|
.append(" name =").append(lookupName(field_2_fnc_index)).append("\n")
|
|
.append(" field_2_fnc_index=").append(field_2_fnc_index).append("\n")
|
|
.append("</FunctionPtg>");
|
|
return buffer.toString();
|
|
}
|
|
|
|
|
|
}
|