/*
* Redberry: symbolic tensor computations.
*
* Copyright (c) 2010-2012:
* Stanislav Poslavsky <stvlpos@mail.ru>
* Bolotin Dmitriy <bolotin.dmitriy@gmail.com>
*
* This file is part of Redberry.
*
* Redberry is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Redberry is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Redberry. If not, see <http://www.gnu.org/licenses/>.
*/
package cc.redberry.core.parser;
import cc.redberry.core.tensor.Pow;
import cc.redberry.core.tensor.Tensor;
import cc.redberry.core.tensor.TensorNumber;
/**
*
* @author Dmitry Bolotin
* @author Stanislav Poslavsky
*/
public class ParserPower implements TensorParser {
public static final ParserPower INSTANCE = new ParserPower();
private ParserPower() {
}
private static final int parserID = 9986;
@Override
public int getPriority() {
return parserID;
}
@Override
//TODO rewrite code
public Tensor parse(String expression, Parser parser) {
if (expression.length() <= 5)
return null;
//FIXME situation Sin[x]+Cos[y] not good for this condition!
if (!"Pow[".equals(expression.substring(0, 4)) || expression.charAt(expression.length() - 1) != ']')
return null;
String[] parts = expression.substring(4, expression.length() - 1).split(",");
if (parts.length == 1)
return null;
Tensor arg = parser.parse(parts[0]);
Tensor power = parser.parse(parts[1]);
if (!(power instanceof TensorNumber))
return null;
return new Pow(arg, (TensorNumber) power);
}
}