public FunctionOutput <string>[] FastReplace(Excel.Range com, DAG dag, InputSample original, InputSample sample, AST.Address[] outputs, bool replace_original) { FunctionOutput <string>[] fo_arr; if (!_d.TryGetValue(sample, out fo_arr)) { // replace the COM value ReplaceExcelRange(com, sample); // initialize array fo_arr = new FunctionOutput <string> [outputs.Length]; // grab all outputs for (var k = 0; k < outputs.Length; k++) { // save the output fo_arr[k] = new FunctionOutput <string>(dag.readCOMValueAtAddress(outputs[k]), sample.GetExcludes()); } // Add function values to cache // Don't care about return value _d.Add(sample, fo_arr); // restore the COM value if (replace_original) { ReplaceExcelRange(com, original); } } return(fo_arr); }
public FunctionOutput<string>[] FastReplace(Excel.Range com, DAG dag, InputSample original, InputSample sample, AST.Address[] outputs, bool replace_original) { FunctionOutput<string>[] fo_arr; if (!_d.TryGetValue(sample, out fo_arr)) { // replace the COM value ReplaceExcelRange(com, sample); // initialize array fo_arr = new FunctionOutput<string>[outputs.Length]; // grab all outputs for (var k = 0; k < outputs.Length; k++) { // save the output fo_arr[k] = new FunctionOutput<string>(dag.readCOMValueAtAddress(outputs[k]), sample.GetExcludes()); } // Add function values to cache // Don't care about return value _d.Add(sample, fo_arr); // restore the COM value if (replace_original) { ReplaceExcelRange(com, original); } } return fo_arr; }
// save spreadsheet outputs to a CellDict public static CellDict SaveOutputs(AST.Address[] formula_nodes, DAG dag) { var cd = new CellDict(); foreach (AST.Address formula_addr in formula_nodes) { // throw an exception in debug mode, because this should never happen #if DEBUG if (!(bool)(dag.getCOMRefForAddress(formula_addr).Range.HasFormula)) { String fstring = dag.getFormulaAtAddress(formula_addr); throw new Exception("Formula address is not a formula."); } #endif // save value if (cd.ContainsKey(formula_addr)) { throw new Exception(String.Format("Failed in SaveOutputs.")); } else { cd.Add(formula_addr, dag.readCOMValueAtAddress(formula_addr)); } } return cd; }
// save all of the values of the spreadsheet that // participate in any computation public static CellDict SaveInputs(DAG dag) { try { var cd = new CellDict(); foreach (var addr in dag.allComputationCells()) { cd.Add(addr, dag.readCOMValueAtAddress(addr)); } return cd; } catch (Exception e) { throw new Exception(String.Format("Failed in SaveInputs: {0}", e.Message)); } }