/**
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
*/
package org.diirt.datasource.formula.array;
import java.util.Arrays;
import java.util.List;
import org.diirt.datasource.formula.FormulaFunction;
import org.diirt.datasource.util.NullUtils;
import org.diirt.vtype.ArrayDimensionDisplay;
import org.diirt.vtype.VNumberArray;
import org.diirt.vtype.ValueFactory;
/**
*
* @author carcassi
*/
class NdArrayFormulaFunction implements FormulaFunction {
@Override
public boolean isPure() {
return true;
}
@Override
public boolean isVarArgs() {
return true;
}
@Override
public String getName() {
return "ndArray";
}
@Override
public String getDescription() {
return "Creates an nd array with the given data and dimension display information";
}
@Override
public List<Class<?>> getArgumentTypes() {
return Arrays.<Class<?>>asList(VNumberArray.class, ArrayDimensionDisplay.class);
}
@Override
public List<String> getArgumentNames() {
return Arrays.asList("data", "dimDisplay");
}
@Override
public Class<?> getReturnType() {
return VNumberArray.class;
}
@Override
public Object calculate(final List<Object> args) {
if (NullUtils.containsNull(args)) {
return null;
}
VNumberArray data = (VNumberArray) args.get(0);
ArrayDimensionDisplay[] displays = new ArrayDimensionDisplay[args.size() - 1];
for (int i = 0; i < displays.length; i++) {
displays[i] = (ArrayDimensionDisplay) args.get(i + 1);
}
return ValueFactory.ndArray(data, displays);
}
}