poi/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.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();
}
}