package jscl.text;
import jscl.math.Generic;
import jscl.math.JsclVector;
import jscl.math.Matrix;
import jscl.util.ArrayUtils;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
public class MatrixParser implements Parser<Matrix> {
public static final Parser<Matrix> parser = new MatrixParser();
private MatrixParser() {
}
public Matrix parse(@Nonnull Parameters p, Generic previousSumElement) throws ParseException {
int pos0 = p.position.intValue();
final List<Generic> vectors = new ArrayList<Generic>();
ParserUtils.tryToParse(p, pos0, '[');
try {
vectors.add(VectorParser.parser.parse(p, previousSumElement));
} catch (ParseException e) {
p.position.setValue(pos0);
throw e;
}
while (true) {
try {
vectors.add(CommaAndVector.parser.parse(p, previousSumElement));
} catch (ParseException e) {
p.exceptionsPool.release(e);
break;
}
}
ParserUtils.tryToParse(p, pos0, ']');
return Matrix.frame((JsclVector[]) ArrayUtils.toArray(vectors, new JsclVector[vectors.size()])).transpose();
}
}