Commit 35dd3f13 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander Trofimov

delete ASCOfficeEWSEditor

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64277 954022d7-b5bf-4e40-9824-e11837661b57
parent 1efae2fb
......@@ -37,7 +37,6 @@ ASCOfficeDocxFile2/Mac/ASCOfficeDocxFile2Lib.xcodeproj/project.xcworkspace/xcuse
ASCOfficeDocxFile2/Mac/ASCOfficeDocxFile2Lib.xcodeproj/xcuserdata svnc_tsvn_003alogminsize=5
ASCOfficeDocxFile2/Mac/ASCOfficeDocxFile2Lib.xcodeproj/xcuserdata/alexey.musinov.xcuserdatad svnc_tsvn_003alogminsize=5
ASCOfficeDocxFile2/Mac/ASCOfficeDocxFile2Lib.xcodeproj/xcuserdata/alexey.musinov.xcuserdatad/xcschemes svnc_tsvn_003alogminsize=5
ASCOfficeEWSEditor/ASCOfficeEWSEditor/Editor/Charts svnc_bugtraq_003anumber=true
ASCOfficeFB2File/ASCOfficeFB2File/Resource/DocxTemplate.docx svn_mime_002dtype=application%2Foctet-stream
ASCOfficeFB2File/ASCOfficeFB2FileTest/ASCOfficeFB2FileTest/bin/Release/AVSOfficeFB2FileTest.exe svn_mime_002dtype=application%2Foctet-stream
ASCOfficeFB2File/ASCOfficeFB2FileTest/ASCOfficeFB2FileTest/bin/Release/AVSOfficeFB2FileTest.pdb svn_mime_002dtype=application%2Foctet-stream

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASCOfficeEWSEditor", "ASCOfficeEWSEditor\ASCOfficeEWSEditor.csproj", "{D4C6EAD0-5A97-439C-AC74-E1B89E07CCBE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D4C6EAD0-5A97-439C-AC74-E1B89E07CCBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4C6EAD0-5A97-439C-AC74-E1B89E07CCBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4C6EAD0-5A97-439C-AC74-E1B89E07CCBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4C6EAD0-5A97-439C-AC74-E1B89E07CCBE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
using System;
using System.Collections.Generic;
using System.Text;
using ASCOfficeEWSEditor.Editor.Calculation.Formulas;
namespace ASCOfficeEWSEditor.Editor.Calculation
{
internal class CellItem : IObserver, ISubject
{
/// <summary>
/// Create as an Observer
/// </summary>
public CellItem(Cells.Cell cell, Worksheet parent_sheet, ValuesUpdateManager manager, CellParsedFormula formula_item)
{
this.manager = manager;
this.formula_item = formula_item; // may be null
this.parent_sheet = parent_sheet;
this.cell = cell;
valid = true;
CellOrFormulaUpdated = false;
UpdateDelayed = false;
}
/// <summary>
/// Construct non-observer, just subject
/// </summary>
public CellItem(Cells.Cell cell, Worksheet parent_sheet, ValuesUpdateManager manager)
: this(cell, parent_sheet, manager, null)
{
}
#region IObserver Members
// Do NOT call if not Observer
public void Update()
{
RecalcFormulaAndUpdateCell();
}
public bool RecalcFormulaAndUpdateCell()
{
Calculation.Formulas.DataObjects.IDataObject result = formula_item.Recalculate(); // May lead in Update of 'this'
CellOrFormulaUpdated = true;
valid = true;
if (result != null)
{
parent_sheet.CellSetValue(cell, result);
return true;
}
return false;
}
public void CellSetErrorValue(Calculation.Formulas.DataObjects.IDataObject error)
{
parent_sheet.CellSetValue(cell, error);
}
public void ChangeObserverOnRangeRemoved(Cells.CellRange removed_range, Worksheet removed_range_sheet)
{
if (formula_item.RemoveReferencesTo(removed_range, removed_range_sheet))
{
CellOrFormulaUpdated = true;
}
else
{
UpdateDelayed = true;
}
}
public void ChangeObserverOnWorksheetRemoved(Worksheet removed_sheet)
{
if (formula_item.RemoveReferencesTo(removed_sheet))
{
RecalcFormulaAndUpdateCell();
CellOrFormulaUpdated = true;
}
else // This case if the names of the sheets haven't been changed and the value shall be recalculated later (after actual sheet removing)
{
UpdateDelayed = true;
}
parent_sheet.FormulaSimpleSetValue(cell, formula_item.Assemble());
}
public void ChangeObserverOnWorksheetRenamed(Worksheet removed_sheet)
{
parent_sheet.FormulaSimpleSetValue(cell, formula_item.Assemble());
CellOrFormulaUpdated = true;
}
public void ChangeObserverOnRangeInserted(Cells.CellRange moved_range, Cells.Offset offset, Worksheet affected_sheet)
{
if (formula_item.ResizeInsertionAffected(moved_range, offset, affected_sheet))
{
CellOrFormulaUpdated = true;
}
else
{
UpdateDelayed = true;
}
}
public void ShiftReferencesTo(ISubject subject, Cells.Offset offset, Worksheet affected_sheet)
{
if (formula_item.ShiftReferencesTo(subject, offset, affected_sheet))
{
CellOrFormulaUpdated = true;
}
else
{
UpdateDelayed = true;
}
}
public bool Valid { get { return valid; } }
public void Invalidate()
{
valid = false;
manager.InvalidateUpdatedCell(this, cell, parent_sheet);
}
#endregion
#region ISubject Members
public Formulas.DataObjects.IDataObject GetValue()
{
if (HasFormula() && !valid)
{
if (formula_item.RecalcInProgress) // Cycle found!!!
{
return new Formulas.DataObjects.ObjectError(ErrorValue.bad_reference);
}
Formulas.DataObjects.IDataObject result = formula_item.Recalculate(); // May lead in Update of 'this'
valid = true;
CellOrFormulaUpdated = true;
if (result != null)
{
parent_sheet.CellSetValue(cell, result);
}
return result;
}
else
{
return parent_sheet.CellGetValue(cell);
}
}
#endregion
public override string ToString()
{
return cell.ToString();
}
public void BecomeObserver(CellParsedFormula formula_item)
{
this.formula_item = formula_item;
}
public void BecomeSubject()
{
this.formula_item = null;
}
public bool HasFormula()
{
return formula_item != null;
}
#region IComparable<ISubject> Members
public int CompareTo(ISubject other)
{
CellItem other_subj = other as CellItem;
if (other_subj == null)
{
return this.GetType().GUID.CompareTo(other.GetType().GUID);
}
int sheets_cmp = parent_sheet.Index.CompareTo(other_subj.parent_sheet.Index);
if(sheets_cmp != 0)
{
return sheets_cmp;
}
return cell.CompareTo(other_subj.cell);
}
#endregion
internal bool CellOrFormulaUpdated { get; set; } // Set if the result value is changed due to a recalculation or linked subject changed
internal bool UpdateDelayed { get; set; } // Set if the formula can't be recalculated at a moment and must be recalculated later
internal Cells.Cell Cell { get { return cell; } }
private Cells.Cell cell;
private Worksheet parent_sheet;
private ValuesUpdateManager manager;
private CellParsedFormula formula_item;
private bool valid;
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class AddCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return new DataObjects.ObjectNumber(arg_num1.Value + arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectNumber(arg_num.Value + (arg_bool.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return arg_num;
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num) // Call inversed
{
return Calc(arg_num, arg_bool);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return new DataObjects.ObjectNumber((arg_bool1.Value ? 1.0 : 0.0) + (arg_bool2.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectNumber(arg_bool.Value ? 1.0 : 0.0);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type); ;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num) // Call inversed
{
return Calc(arg_num, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool) // Call inversed
{
return Calc(arg_bool, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return Calc(arg_err, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return Calc(arg_str, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return Calc(arg_range, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectNumber(0.0);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class Arithmetic
{
public static readonly AddCalculator AddCalculator = new AddCalculator();
public static readonly SubCalculator SubCalculator = new SubCalculator();
public static readonly MulCalculator MulCalculator = new MulCalculator();
public static readonly DivCalculator DivCalculator = new DivCalculator();
public static readonly PowerCalculator PowerCalculator = new PowerCalculator();
public static readonly EqCalculator EqCalculator = new EqCalculator();
public static readonly LtCalculator LtCalculator = new LtCalculator();
public static readonly GtCalculator GtCalculator = new GtCalculator();
public static readonly ConcatCalculator ConcatCalculator = new ConcatCalculator();
public static readonly UnionCalculator UnionCalculator = new UnionCalculator();
public static readonly IsectCalculator IsectCalculator = new IsectCalculator();
public static readonly RangeCalculator RangeCalculator = new RangeCalculator();
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class ConcatCalculator : IFullBinaryOpDispatcher
{
private DataObjects.IDataObject Concat(DataObjects.IDataObject elem1, DataObjects.IDataObject elem2)
{
return new DataObjects.ObjectString(elem1.ToString() + elem2.ToString());
}
private DataObjects.IDataObject Concat(DataObjects.ObjectString str, DataObjects.IDataObject elem2)
{
return new DataObjects.ObjectString(str.Value + elem2.ToString());
}
private DataObjects.IDataObject Concat(DataObjects.IDataObject elem1, DataObjects.ObjectString str)
{
return new DataObjects.ObjectString(elem1.ToString() + str.Value);
}
private DataObjects.IDataObject Concat(DataObjects.ObjectEmpty empty, DataObjects.IDataObject elem2)
{
return new DataObjects.ObjectString(elem2.ToString());
}
private DataObjects.IDataObject Concat(DataObjects.IDataObject elem1, DataObjects.ObjectEmpty empty)
{
return new DataObjects.ObjectString(elem1.ToString());
}
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return Concat(arg_num1, arg_num2);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return Concat(arg_num, arg_bool);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return Concat(arg_num, arg_str);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return Concat(arg_num, arg_empty);
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num)
{
return Concat(arg_bool, arg_num);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return Concat(arg_bool1, arg_bool2);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return Concat(arg_bool, arg_str);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return Concat(arg_bool, arg_empty);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return Concat(arg_str, arg_num);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return Concat(arg_str, arg_bool);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectString(arg_str1.Value + arg_str2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return arg_str;
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
return Concat(arg_empty, arg_num);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
return Concat(arg_empty, arg_bool);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str)
{
return arg_str;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectString("");
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class DivCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
if (arg_num2.Value == 0.0)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
return new DataObjects.ObjectNumber(arg_num1.Value / arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
if (!arg_bool.Value)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
return arg_num;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num)
{
if (arg_num.Value == 0.0)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
return new DataObjects.ObjectNumber((arg_bool.Value ? 1.0 : 0.0) / arg_num.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
if (!arg_bool2.Value)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
return new DataObjects.ObjectNumber((arg_bool1.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type); ;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
if (arg_num.Value == 0.0)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
return new DataObjects.ObjectNumber(0.0);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
if (!arg_bool.Value)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
return new DataObjects.ObjectNumber(0.0);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return Calc(arg_err, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return Calc(arg_str, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return Calc(arg_range, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class EqCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return new DataObjects.ObjectBoolean(arg_num1.Value == arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(arg_num.Value == 0);
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num) // Call inversed
{
return Calc(arg_num, arg_bool);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return new DataObjects.ObjectBoolean(arg_bool1.Value == arg_bool2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(arg_bool.Value == false);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectBoolean(string.Compare(arg_str1.Value, arg_str2.Value, true) == 0);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(arg_str.Value.Length == 0);
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num) // Call inversed
{
return Calc(arg_num, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool) // Call inversed
{
return Calc(arg_bool, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return Calc(arg_err, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return Calc(arg_str, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return Calc(arg_range, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectBoolean(true);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class GtCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return new DataObjects.ObjectBoolean(arg_num1.Value > arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(arg_num.Value > 0);
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num) // Call inversed
{
return new DataObjects.ObjectBoolean(true);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return new DataObjects.ObjectBoolean(arg_bool1.Value && !arg_bool2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(true);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return arg_bool;
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectBoolean(true);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectBoolean(string.Compare(arg_str1.Value, arg_str2.Value, true) > 0);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(arg_str.Value.Length != 0);
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectBoolean(0 > arg_num.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectBoolean(false);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal interface IFullBinaryOpDispatcher
{
#region DataObjects.ObjectNumber
DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2);
DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool);
DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err);
DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str);
DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range);
DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty);
#endregion
#region DataObjects.ObjectBoolean
DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num);
DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2);
DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err);
DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str);
DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range);
DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty);
#endregion
#region DataObjects.ObjectError
DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num);
DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool);
DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2);
DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str);
DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range);
DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty);
#endregion
#region DataObjects.ObjectString
DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num);
DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool);
DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err);
DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2);
DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range);
DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty);
#endregion
#region ObjectReference
DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num);
DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool);
DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err);
DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str);
DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2);
DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty);
#endregion
#region ObjectEmpty
DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num);
DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool);
DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err);
DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str);
DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range);
DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2);
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class IsectCalculator : ReferenceOperatorsCalculator
{
public override DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return arg_range1.Intersect(arg_range2);
}
public override string OperatorName { get { return "intersection"; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class LtCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return new DataObjects.ObjectBoolean(arg_num1.Value < arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(true);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(true);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(arg_num.Value < 0);
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return new DataObjects.ObjectBoolean(!arg_bool1.Value && arg_bool2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool,DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(false);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectBoolean(false);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectBoolean(true);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectBoolean(string.Compare(arg_str1.Value, arg_str2.Value, true) < 0);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectBoolean(false);
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectBoolean(0 < arg_num.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
return arg_bool;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectBoolean(arg_str.Value.Length != 0);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectBoolean(false);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class MulCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return new DataObjects.ObjectNumber(arg_num1.Value * arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectNumber(arg_num.Value * (arg_bool.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectNumber(0.0);
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num) // Call inversed
{
return Calc(arg_num, arg_bool);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return new DataObjects.ObjectNumber((arg_bool1.Value ? 1.0 : 0.0) * (arg_bool2.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectNumber(0.0);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type); ;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num) // Call inversed
{
return Calc(arg_num, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool) // Call inversed
{
return Calc(arg_bool, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return Calc(arg_err, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return Calc(arg_str, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return Calc(arg_range, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectNumber(0.0);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class PowerCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
double x = arg_num1.Value;
double y = arg_num2.Value;
if(x == 0.0 && y == 0.0)
{
return new DataObjects.ObjectError(ErrorValue.not_numeric);
}
else if(x == 0.0 && y < 0.0)
{
return new DataObjects.ObjectError(ErrorValue.division_by_zero);
}
else if(x < 0 && Math.Truncate(y) != y)
{
return new DataObjects.ObjectError(ErrorValue.not_numeric);
}
return new DataObjects.ObjectNumber(Math.Pow(x, y));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return Calc(arg_num, new DataObjects.ObjectNumber(arg_bool.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return Calc(arg_num, new DataObjects.ObjectNumber(0.0));
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num)
{
return Calc(new DataObjects.ObjectNumber(arg_bool.Value ? 1.0 : 0.0), arg_num);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return Calc(new DataObjects.ObjectNumber(arg_bool1.Value ? 1.0 : 0.0), new DataObjects.ObjectNumber(arg_bool2.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return Calc(new DataObjects.ObjectNumber(arg_bool.Value ? 1.0 : 0.0), new DataObjects.ObjectNumber(0.0));
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type); ;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
return Calc(new DataObjects.ObjectNumber(0.0), arg_num);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
return Calc(new DataObjects.ObjectNumber(0.0), new DataObjects.ObjectNumber(arg_bool.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return Calc(arg_err, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return Calc(arg_str, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return Calc(arg_range, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectError(ErrorValue.not_numeric);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class RangeCalculator : ReferenceOperatorsCalculator
{
public override DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return arg_range1.Range(arg_range2);
}
public override string OperatorName { get { return "range"; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal abstract class ReferenceOperatorsCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return ThrowWrongArgumentsType();
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return ThrowWrongArgumentsType();
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
if(arg_err1.Value == ErrorValue.bad_reference && arg_err2.Value == ErrorValue.bad_reference)
{
return arg_err1;
}
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
if (arg_err.Value == ErrorValue.bad_reference)
{
return arg_err;
}
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return ThrowWrongArgumentsType();
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return ThrowWrongArgumentsType();
}
#endregion
#region DataObjects.ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
if (arg_err.Value == ErrorValue.bad_reference)
{
return arg_err;
}
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return ThrowWrongArgumentsType();
}
// The main dispatcher. Shall be overridden in successors
public abstract DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2);
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return ThrowWrongArgumentsType();
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return ThrowWrongArgumentsType();
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return ThrowWrongArgumentsType();
}
#endregion
#endregion
private DataObjects.IDataObject ThrowWrongArgumentsType()
{
throw new Events.ReportableException(new Events.FormulaFormatError("Wrong argument types of " + OperatorName + " operator"));
}
public abstract string OperatorName { get; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class SubCalculator : IFullBinaryOpDispatcher
{
#region IFullBinaryOpDispatcher Members
#region DataObjects.ObjectNumber
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num1, DataObjects.ObjectNumber arg_num2)
{
return new DataObjects.ObjectNumber(arg_num1.Value - arg_num2.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectNumber(arg_num.Value - (arg_bool.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectNumber arg_num, DataObjects.ObjectEmpty arg_empty)
{
return arg_num;
}
#endregion
#region DataObjects.ObjectBoolean
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectNumber((arg_bool.Value ? 1.0 : 0.0) - arg_num.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool1, DataObjects.ObjectBoolean arg_bool2)
{
return new DataObjects.ObjectNumber((arg_bool1.Value ? 1.0 : 0.0) - (arg_bool2.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectError arg_err)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectBoolean arg_bool, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectNumber(arg_bool.Value ? 1.0 : 0.0);
}
#endregion
#region DataObjects.ObjectError
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectNumber arg_num)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectBoolean arg_bool)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err1, DataObjects.ObjectError arg_err2)
{
return arg_err1;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectString arg_str)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectReference arg_range)
{
return arg_err;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectError arg_err, DataObjects.ObjectEmpty arg_empty)
{
return arg_err;
}
#endregion
#region DataObjects.ObjectString
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type); ;
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str1, DataObjects.ObjectString arg_str2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectReference arg_range)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectString arg_str, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectReference
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectError arg_err)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range, DataObjects.ObjectString arg_str)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectEmpty arg_empty)
{
return new DataObjects.ObjectError(ErrorValue.wrong_value_type);
}
#endregion
#region DataObjects.ObjectEmpty
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectNumber arg_num)
{
return new DataObjects.ObjectNumber(-arg_num.Value);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectBoolean arg_bool)
{
return new DataObjects.ObjectNumber(-(arg_bool.Value ? 1.0 : 0.0));
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectError arg_err) // Call inversed
{
return Calc(arg_err, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectString arg_str) // Call inversed
{
return Calc(arg_str, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty, DataObjects.ObjectReference arg_range) // Call inversed
{
return Calc(arg_range, arg_empty);
}
public DataObjects.IDataObject Calc(DataObjects.ObjectEmpty arg_empty1, DataObjects.ObjectEmpty arg_empty2)
{
return new DataObjects.ObjectNumber(0.0);
}
#endregion
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.BinOpCalc
{
internal class UnionCalculator : ReferenceOperatorsCalculator
{
public override DataObjects.IDataObject Calc(DataObjects.ObjectReference arg_range1, DataObjects.ObjectReference arg_range2)
{
return arg_range1.Union(arg_range2);
}
public override string OperatorName { get { return "union"; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using ASCOfficeEWSEditor.Editor.Calculation.Formulas.Ptgs;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas
{
internal class CellParsedFormula : ParsedFormula
{
internal CellParsedFormula(Cells.Cell cell, Worksheet parent_sheet)
: base(parent_sheet.Workbook)
{
this.parent_sheet = parent_sheet;
this.cell = cell;
cell_observer = null;
}
public override void UnregisterDependencies()
{
if (cell_observer != null)
{
cell_observer.BecomeSubject();
cell_observer = null;
}
base.UnregisterDependencies();
}
public void RegisterDependencies()
{
// Create or update an Observer
cell_observer = parent_sheet.SubjectsStorage.GetCellItemOrCreate(cell);
cell_observer.BecomeObserver(this);
base.RegisterDependencies(cell_observer);
}
public void MoveToAnotherCell(Cells.Cell another_cell)
{
UnregisterDependencies();
cell = another_cell;
RegisterDependencies();
}
internal override Worksheet ParentSheet { get { return parent_sheet; } }
public Cells.Cell Cell { get { return cell; } } // For GetUpdatedCells()
private Cells.Cell cell;
private Worksheet parent_sheet;
CellItem cell_observer;
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.DataObjects
{
internal interface IDataObject : IComparable<IDataObject>
{
IDataObject PerformBinaryOperation(IDataObject element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject PerformBinaryOperation(ObjectNumber element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject PerformBinaryOperation(ObjectBoolean element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject PerformBinaryOperation(ObjectError element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject PerformBinaryOperation(ObjectString element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject PerformBinaryOperation(ObjectReference element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject PerformBinaryOperation(ObjectEmpty element, BinOpCalc.IFullBinaryOpDispatcher visitor);
IDataObject ConvertIfPossible(PreferredResultType result_type);
object UserValue { get; }
string Type { get; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using ASCOfficeEWSEditor.XMLDataSpecific;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.DataObjects
{
internal class ObjectBoolean : IDataObject
{
public ObjectBoolean(bool value)
{
Value = value;
}
public ObjectBoolean(string value)
{
Value = XMLBoolean.ParseOrDefault(value, false);
}
#region IDataObject Members
public IDataObject PerformBinaryOperation(IDataObject element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return element.PerformBinaryOperation(this, dispatcher);
}
public IDataObject PerformBinaryOperation(ObjectNumber element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectBoolean element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectError element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectString element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectReference element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectEmpty element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
#endregion
#region ConvertIfPossible
public IDataObject ConvertIfPossible(PreferredResultType result_type)
{
switch (result_type)
{
case PreferredResultType.numeric_type:
return new ObjectNumber(Value ? 1.0 : 0.0);
case PreferredResultType.string_type:
return new ObjectString(ToString());
default:
return this;
}
}
#endregion
#region IComparable<IDataObject> Members
public int CompareTo(IDataObject other)
{
ObjectBoolean other_bool = other as ObjectBoolean;
if (other_bool != null)
{
return Value.CompareTo(other_bool.Value);
}
if (other is ObjectNumber || other is ObjectString)
{
return 1;
}
return -1; // Less than all other types
}
#endregion
public override string ToString()
{
return Value ? "TRUE" : "FALSE";
}
public bool Value { get; private set; }
public object UserValue { get { return Value; } }
public string Type { get { return "b"; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.DataObjects
{
internal class ObjectEmpty : IDataObject
{
public ObjectEmpty()
{
}
#region IDataObject Members
public IDataObject PerformBinaryOperation(IDataObject element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return element.PerformBinaryOperation(this, dispatcher);
}
public IDataObject PerformBinaryOperation(ObjectNumber element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectBoolean element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectError element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectString element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectReference element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectEmpty element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
#endregion
#region ConvertIfPossible
public IDataObject ConvertIfPossible(PreferredResultType result_type)
{
switch (result_type)
{
case PreferredResultType.boolean_type:
return new ObjectBoolean(false);
case PreferredResultType.numeric_type:
return new ObjectNumber(0.0);
case PreferredResultType.string_type:
return new ObjectString("");
case PreferredResultType.value_type:
case PreferredResultType.as_is:
return this;
}
return this;
}
#endregion
#region IComparable<IDataObject> Members
public int CompareTo(IDataObject other)
{
if (other is ObjectEmpty)
{
return 0;
}
return 1;
}
#endregion
public override string ToString()
{
return "empty cell";
}
public object UserValue { get{ return "";} }
public string Type { get { return null; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using ASCOfficeEWSEditor.XMLDataSpecific;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.DataObjects
{
internal class ObjectError : IDataObject
{
public ObjectError(ErrorValue value)
{
Value = value;
}
#region IDataObject Members
public IDataObject PerformBinaryOperation(IDataObject element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return element.PerformBinaryOperation(this, dispatcher);
}
public IDataObject PerformBinaryOperation(ObjectNumber element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectBoolean element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectError element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectString element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectReference element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectEmpty element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
#endregion
#region ConvertIfPossible
public IDataObject ConvertIfPossible(PreferredResultType result_type)
{
return this;
}
#endregion
#region IComparable<IDataObject> Members
public int CompareTo(IDataObject other)
{
ObjectError other_err = other as ObjectError;
if (other_err != null)
{
return Value.CompareTo(other_err.Value);
}
if(other is DataObjects.ObjectEmpty)
{
return -1;
}
return 1; // More than all other types
}
#endregion
public override string ToString()
{
return Value.ToString();
}
public ErrorValue Value { get; private set; }
public object UserValue { get { return Value; } }
public string Type { get { return Value != ErrorValue.unsupported_function ? "e" : "str"; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using ASCOfficeEWSEditor.XMLDataSpecific;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.DataObjects
{
internal class ObjectNumber : IDataObject
{
public ObjectNumber(double value)
{
Value = value;
}
public ObjectNumber(string value)
{
Value = XMLDouble.ParseOrDefault(value, 0);
}
#region IDataObject Members
public IDataObject PerformBinaryOperation(IDataObject element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return element.PerformBinaryOperation(this, dispatcher);
}
public IDataObject PerformBinaryOperation(ObjectNumber element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectBoolean element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectError element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectString element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectReference element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectEmpty element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
#endregion
#region ConvertIfPossible
public IDataObject ConvertIfPossible(PreferredResultType result_type)
{
switch (result_type)
{
case PreferredResultType.boolean_type:
return new ObjectBoolean(Value != 0.0);
case PreferredResultType.string_type:
return new ObjectString(Value.ToString());
}
return this;
}
#endregion
#region IComparable<IDataObject> Members
public int CompareTo(IDataObject other)
{
ObjectNumber other_num = other as ObjectNumber;
if (other_num != null)
{
return Value.CompareTo(other_num.Value);
}
return -1; // Less than all other types
}
#endregion
public override string ToString()
{
return XMLDouble.ToString(Value);
}
public double Value { get; private set; }
public object UserValue { get { return Value; } }
public string Type { get { return ""; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using ASCOfficeEWSEditor.XMLDataSpecific;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.DataObjects
{
internal class ObjectString : IDataObject
{
public ObjectString(string value)
{
Value = value;
}
#region IDataObject Members
public IDataObject PerformBinaryOperation(IDataObject element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return element.PerformBinaryOperation(this, dispatcher);
}
public IDataObject PerformBinaryOperation(ObjectNumber element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectBoolean element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectError element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectString element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectReference element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
public IDataObject PerformBinaryOperation(ObjectEmpty element, BinOpCalc.IFullBinaryOpDispatcher dispatcher)
{
return dispatcher.Calc(element, this);
}
#endregion
#region ConvertIfPossible
public IDataObject ConvertIfPossible(PreferredResultType result_type)
{
string extracted_str_value;
int start_pos = 0;
if (result_type == PreferredResultType.boolean_type && Ptgs.PtgBool.Extract(Value, ref start_pos, out extracted_str_value))
{
if(start_pos == Value.Length)
{
return new ObjectBoolean(extracted_str_value);
}
}
else if (result_type == PreferredResultType.numeric_type && Ptgs.PtgNum.Extract(Value, ref start_pos, out extracted_str_value))
{
if (start_pos == Value.Length)
{
return new ObjectNumber(extracted_str_value);
}
}
return this;
}
#endregion
#region IComparable<IDataObject> Members
public int CompareTo(IDataObject other)
{
ObjectString other_str = other as ObjectString;
if (other_str != null)
{
return Value.CompareTo(other_str.Value);
}
if (other is ObjectNumber)
{
return 1;
}
return -1; // Less than all other types
}
#endregion
public override string ToString()
{
return Value;
}
public string Value { get; private set; }
public object UserValue { get { return Value; } }
public string Type { get { return "str"; } }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas
{
/// <summary>
/// Represents an error value of calculations
/// </summary>
public class ErrorValue : IComparable<ErrorValue>
{
private ErrorValue(Values value)
{
this.value = value;
}
/// <summary>
/// "#DIV/0!" Indicates when any number (including zero) or any error code is divided by zero.
/// </summary>
public static readonly ErrorValue division_by_zero = new ErrorValue(Values.division_by_zero);
/// <summary>
/// "#N/A" Indicates when a designated value is not available.
/// </summary>
public static readonly ErrorValue not_available = new ErrorValue(Values.not_available);
/// <summary>
/// "#NAME?" Indicates when what looks like a name is used, but no such name has been defined.
/// </summary>
public static readonly ErrorValue wrong_name = new ErrorValue(Values.wrong_name);
/// <summary>
/// "#NULL!" Indicates when two areas are required to intersect, but do not.
/// </summary>
public static readonly ErrorValue null_value = new ErrorValue(Values.null_value);
/// <summary>
/// "#NUM!" Indicates when an argument to a function has a compatible type, but has a value that is outside the domain over which that function is defined.
/// </summary>
public static readonly ErrorValue not_numeric = new ErrorValue(Values.not_numeric);
/// <summary>
/// "#REF!" Indicates when a cell reference cannot be evaluated
/// </summary>
public static readonly ErrorValue bad_reference = new ErrorValue(Values.bad_reference);
/// <summary>
/// "#VALUE!" Indicates when an incompatible type argument is passed to a function, or an incompatible type operand is used with an operator.
/// </summary>
public static readonly ErrorValue wrong_value_type = new ErrorValue(Values.wrong_value_type);
/// <summary>
/// "#UNSUPPORTED_FUNCTION!" Indicates when an unsupported function is used in a formula.
/// </summary>
internal static readonly ErrorValue unsupported_function = new ErrorValue(Values.unsupported_function);
/// <summary>
/// Error value string representation
/// </summary>
/// <returns>string equivalent of the value</returns>
public override string ToString()
{
switch (value)
{
case Values.division_by_zero: return "#DIV/0!";
case Values.not_available: return "#N/A";
case Values.wrong_name: return "#NAME?";
case Values.null_value: return "#NULL!";
case Values.not_numeric: return "#NUM!";
case Values.bad_reference: return "#REF!";
case Values.wrong_value_type: return "#VALUE!";
case Values.unsupported_function: return "#UNSUPPORTED_FUNCTION!";
}
return base.ToString();
}
/// <summary>
/// Converts the string representation of an error value to its ErrorValue equivalent.
/// </summary>
/// <param name="str_value">A string containing an error value to convert.</param>
/// <returns>An ErrorValue equivalent to the error value contained in str_value or null if str_value is in wrong format</returns>
public static ErrorValue Parse(string str_value)
{
switch (str_value.ToUpper())
{
case "#DIV/0!": return division_by_zero;
case "#N/A": return not_available;
case "#NAME?": return wrong_name;
case "#NULL!": return null_value;
case "#NUM!": return not_numeric;
case "#REF!": return bad_reference;
case "#VALUE!": return wrong_value_type;
default: return not_available;
}
}
/// <summary>
/// Converts the string representation of an error value to its ErrorValue equivalent.
/// </summary>
/// <param name="str_value">A string containing an error value to convert</param>
/// <param name="def_val">Default value</param>
/// <returns>An ErrorValue equivalent to the error value contained in str_value or the passed default value if str_value is in wrong format</returns>
public static ErrorValue ParseOrDefault(string str_value, ErrorValue def_val)
{
return Parse(str_value) ?? def_val;
}
#region IComparable<ErrorValue> Members
/// <summary>
/// Compares the current object with another object of the same type.
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public int CompareTo(ErrorValue other)
{
return value.CompareTo(other.value);
}
#endregion
internal int Code
{
get
{
switch(value)
{
case Values.null_value:
return 1;
case Values.division_by_zero:
return 2;
case Values.wrong_value_type:
return 3;
case Values.bad_reference:
return 4;
case Values.wrong_name:
return 5;
case Values.not_numeric:
return 6;
case Values.not_available:
return 7;
}
return 0;
}
}
private enum Values
{
division_by_zero,
not_available,
wrong_name,
null_value,
not_numeric,
bad_reference,
wrong_value_type,
unsupported_function
}
private Values value;
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas
{
/// <summary>
/// Formula format exception
/// </summary>
public abstract class FormulaFormatException : System.ArgumentException
{
internal FormulaFormatException(string message, string formula, int start_pos)
: base(message + " in formula \"" + formula + "\" at position " + start_pos)
{
}
}
/// <summary>
/// Thrown when an unknown operator found or operator/operand sequence is broken
/// </summary>
public class UnknownOperatorException : FormulaFormatException
{
internal UnknownOperatorException(string formula, int start_pos)
: base("Unknown operator format", formula, start_pos)
{
}
}
/// <summary>
/// Thrown when an unknown operand found or operator/operand sequence is broken
/// </summary>
public class UnknownOperandException : FormulaFormatException
{
internal UnknownOperandException(string formula, int start_pos)
: base("Unknown operand format", formula, start_pos)
{
}
}
/// <summary>
/// Thrown when parenthesis sequence is wrong
/// </summary>
public class WrongParenthesisSequence : FormulaFormatException
{
internal WrongParenthesisSequence(string formula, int start_pos)
: base("Wrong parenthesis sequence", formula, start_pos)
{
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using ASCOfficeEWSEditor.Editor.Calculation.Formulas.Ptgs;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas
{
internal class NameParsedFormula : ParsedFormula
{
internal NameParsedFormula(string name, Workbook workbook)
: base(workbook)
{
// this.workbook = workbook;
// this.name = name;
// name_observer = null;
}
/*
public override void UnregisterDependencies()
{
if (name_observer != null)
{
name_observer.BecomeSubject();
name_observer = null;
}
base.UnregisterDependencies();
}
*/
internal override Worksheet ParentSheet { get { return null; } }
// private Workbook workbook;
// private string name;
// private NameItem name_observer;
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas
{
internal class Precision
{
public const int ExcelSignificantDigits = 15;
public const int ExcelMaxExponent = 308;
public const int ExcelMinExponent = -308;
public const double Epsilon = 2.2204460492503131E-16; // Taken from <float.h> in C++.
// Note: 'number' and 'significance' MUST have the same sign
public static double Ceiling(double number, double significance)
{
double quotient = number / significance;
if (quotient == 0)
{
return 0;
}
double quotientTr = Math.Truncate(quotient);
double nolpiat = 5 * Math.Sign(quotient) * Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(quotient))) - ExcelSignificantDigits);
if (Math.Abs(quotient - quotientTr) > nolpiat)
{
++quotientTr;
}
return quotientTr * significance;
}
public static double Floor(double number, double significance)
{
double quotient = number / significance;
if (quotient == 0)
{
return 0;
}
double nolpiat = 5 * Math.Sign(quotient) * Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(quotient))) - ExcelSignificantDigits);
return Math.Truncate(quotient + nolpiat) * significance;
}
public static double SignZeroPositive(double number)
{
return number < 0 ? -1 : 1;
}
public static double CorrectPrecisionAfterMultiplyDivision(double number)
{
double multiplier = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(number))) - ExcelSignificantDigits + 1);
double nolpiat = 0.5 * Math.Sign(number) * multiplier;
return Math.Truncate((number + nolpiat) / multiplier) * multiplier;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ASCOfficeEWSEditor.Editor.Calculation.Formulas.Ptgs.Functions
{
internal class PtgFuncAbs : PtgFuncMathOneArg
{
public override DataObjects.IDataObject DoMath(double num_value)
{
return new DataObjects.ObjectNumber(Math.Abs(num_value));
}
public override string ToString() { return "ABS"; }
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment