private void calculateCDef(CDef cDef) throws RrdException { RpnCalculator calc = new RpnCalculator(cDef.getRpnExpression(), cDef.getName(), this); cDef.setValues(calc.calculateValues()); }
RpnCalculator(String rpnExpression, String sourceName, DataProcessor dataProcessor) throws RrdException { this.rpnExpression = rpnExpression; this.sourceName = sourceName; this.dataProcessor = dataProcessor; this.timestamps = dataProcessor.getTimestamps(); this.timeStep = this.timestamps[1] - this.timestamps[0]; this.calculatedValues = new double[this.timestamps.length]; StringTokenizer st = new StringTokenizer(rpnExpression, ", "); tokens = new Token[st.countTokens()]; for (int i = 0; st.hasMoreTokens(); i++) { tokens[i] = createToken(st.nextToken()); } }
double[] calculateValues() throws RrdException { TimeZone tz = TimeZone.getDefault(); for (int slot = 0; slot < timestamps.length; slot++) { resetStack(); int token_rpi = -1; for (int rpi = 0; rpi < tokens.length; rpi++) { switch (token.id) { case TKN_NUM: push(token.number); break; case TKN_VAR: push(token.values[slot]); token_rpi = rpi; break; case TKN_COUNT: push(slot+1); break; case TKN_PLUS: push(pop() + pop()); break; case TKN_MINUS: x2 = pop(); x1 = pop(); push(x1 - x2); break; case TKN_MULT: push(pop() * pop()); break; case TKN_DIV:
double[] calculateValues() throws RrdException { for (int slot = 0; slot < timestamps.length; slot++) { resetStack(); for (Token token : tokens) { double x1, x2, x3; switch (token.id) { case TKN_NUM: push(token.number); break; case TKN_VAR: push(token.values[slot]); break; case TKN_PLUS: push(pop() + pop()); break; case TKN_MINUS: x2 = pop(); x1 = pop(); push(x1 - x2); break; case TKN_MULT: push(pop() * pop()); break; case TKN_DIV: x2 = pop(); x1 = pop(); push(x1 / x2); break; case TKN_MOD: x2 = pop();
private void calculateCDef(CDef cDef) throws RrdException { RpnCalculator calc = new RpnCalculator(cDef.getRpnExpression(), cDef.getName(), this); cDef.setValues(calc.calculateValues()); }
RpnCalculator(String rpnExpression, String sourceName, DataProcessor dataProcessor) throws RrdException { this.rpnExpression = rpnExpression; this.sourceName = sourceName; this.dataProcessor = dataProcessor; this.timestamps = dataProcessor.getTimestamps(); this.timeStep = this.timestamps[1] - this.timestamps[0]; this.calculatedValues = new double[this.timestamps.length]; StringTokenizer st = new StringTokenizer(rpnExpression, ", "); tokens = new Token[st.countTokens()]; for (int i = 0; st.hasMoreTokens(); i++) { tokens[i] = createToken(st.nextToken()); } }