/** * 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 static org.diirt.vtype.ValueFactory.displayNone; import static org.diirt.vtype.ValueFactory.newVNumberArray; import java.util.Arrays; import java.util.List; import org.diirt.datasource.formula.FormulaFunction; import org.diirt.datasource.util.NullUtils; import org.diirt.util.array.ListMath; import org.diirt.vtype.VNumber; import org.diirt.vtype.VNumberArray; import org.diirt.vtype.ValueUtil; /** * @author shroffk * */ class SubArrayFormulaFunction implements FormulaFunction { /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#isPure() */ @Override public boolean isPure() { return true; } /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#isVarArgs() */ @Override public boolean isVarArgs() { return false; } /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#getName() */ @Override public String getName() { return "subArray"; } /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#getDescription() */ @Override public String getDescription() { return "Result[] = [ array[fromIndex], ..., array[toIndex-1] ]"; } /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#getArgumentTypes() */ @Override public List<Class<?>> getArgumentTypes() { return Arrays.<Class<?>> asList(VNumberArray.class, VNumber.class, VNumber.class); } /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#getArgumentNames() */ @Override public List<String> getArgumentNames() { return Arrays.asList("array", "fromIndex", "toIndex"); } /* * (non-Javadoc) * * @see org.epics.pvmanager.formula.FormulaFunction#getReturnType() */ @Override public Class<?> getReturnType() { return VNumberArray.class; } /* * (non-Javadoc) * * @see * org.epics.pvmanager.formula.FormulaFunction#calculate(java.util.List) */ @Override public Object calculate(List<Object> args) { if (NullUtils.containsNull(args)) { return null; } VNumberArray numberArray = (VNumberArray) args.get(0); int fromIndex = ((VNumber) args.get(1)).getValue().intValue(); int toIndex = ((VNumber) args.get(2)).getValue().intValue(); return newVNumberArray( ListMath.limit(numberArray.getData(), fromIndex, toIndex), ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args), displayNone()); } }