public Object clone() {
   CalculatorMeta retval = (CalculatorMeta) super.clone();
   if (calculation != null) {
     retval.allocate(calculation.length);
     for (int i = 0; i < calculation.length; i++) {
       retval.getCalculation()[i] = (CalculatorMetaFunction) calculation[i].clone();
     }
   } else {
     retval.allocate(0);
   }
   return retval;
 }
 public void loadXML(Node stepnode, List<DatabaseMeta> databases, Map<String, Counter> counters)
     throws KettleXMLException {
   int nrCalcs = XMLHandler.countNodes(stepnode, CalculatorMetaFunction.XML_TAG);
   allocate(nrCalcs);
   for (int i = 0; i < nrCalcs; i++) {
     Node calcnode = XMLHandler.getSubNodeByNr(stepnode, CalculatorMetaFunction.XML_TAG, i);
     calculation[i] = new CalculatorMetaFunction(calcnode);
   }
 }
 public void readRep(
     Repository rep, long id_step, List<DatabaseMeta> databases, Map<String, Counter> counters)
     throws KettleException {
   int nrCalcs = rep.countNrStepAttributes(id_step, "field_name");
   allocate(nrCalcs);
   for (int i = 0; i < nrCalcs; i++) {
     calculation[i] = new CalculatorMetaFunction(rep, id_step, i);
   }
 }