package jmathlib.toolbox.general; import jmathlib.core.tokens.numbertokens.DoubleNumberToken; import jmathlib.core.tokens.Token; import jmathlib.core.tokens.OperandToken; import jmathlib.core.tokens.DataToken; import jmathlib.core.tokens.CharToken; import jmathlib.core.functions.ExternalFunction; import jmathlib.core.interpreter.GlobalValues; /**An external function for getting the size of matrices*/ public class length extends ExternalFunction { public OperandToken evaluate(Token[] operands, GlobalValues globals) { // at least one operand if (getNArgIn(operands) != 1) throwMathLibException("length: number of arguments != 1"); int length = 0; // first operand must be a number if(operands[0] instanceof DataToken) { // get size or argument int y = (int)((DataToken)operands[0]).getSizeY(); int x = (int)((DataToken)operands[0]).getSizeX(); length = Math.max(y,x); } else if(operands[0] instanceof CharToken) { length = ((CharToken)operands[0]).toString().length(); } return new DoubleNumberToken(length); } } /* @GROUP general @SYNTAX answer = length(string) answer = length(matrix) answer = number(matrix) @DOC Returns the length of a matrix or a string. @EXAMPLES <programlisting> length("test") = 4 length([1, 2, 3]) = 3 </programlisting> @NOTES @SEE size */