internal static CalcNode CreateTempNode(ICalcSource source, CalcIdentity id) { return(new CalcNode(source, id) { _isTempNode = true }); }
internal static void Id2Range(ICalcSource source, CalcIdentity Id, out int row, out int col, out int rowCount, out int colCount, out bool searchRange) { int num; int num2; colCount = num = 1; rowCount = num2 = num; row = col = num2; searchRange = false; CalcCellIdentity objA = Id as CalcCellIdentity; CalcRangeIdentity identity2 = Id as CalcRangeIdentity; if (!object.ReferenceEquals(objA, null)) { row = objA.RowIndex; col = objA.ColumnIndex; rowCount = colCount = 1; searchRange = true; } else if (!object.ReferenceEquals(identity2, null)) { if (identity2.IsFullColumn || identity2.IsFullRow) { CalcReference reference = source.GetReference(identity2) as CalcReference; row = reference.GetRow(0); col = reference.GetColumn(0); rowCount = reference.GetRowCount(0); colCount = reference.GetColumnCount(0); } if (identity2.IsFullRow) { row = identity2.RowIndex; rowCount = identity2.RowCount; } else if (identity2.IsFullColumn) { col = identity2.ColumnIndex; colCount = identity2.ColumnCount; } else { row = identity2.RowIndex; rowCount = identity2.RowCount; col = identity2.ColumnIndex; colCount = identity2.ColumnCount; } searchRange = true; } else { int num5; int num6; colCount = num5 = 0; rowCount = num6 = num5; row = col = num6; } }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcCellIdentity objA = other as CalcCellIdentity; if (object.ReferenceEquals(objA, null)) { return false; } return ((this._rowIndex == objA._rowIndex) && (this._columnIndex == objA._columnIndex)); }
/// <summary> /// Gets the value at specified position which indicated by <paramref name="id" />. /// </summary> /// <param name="id">A <see cref="T:Dt.CalcEngine.CalcIdentity" /> indicates the identity of a address.</param> /// <returns> /// An <see cref="T:System.Object" /> indicates the value. /// If the <paramref name="id" /> is not recognized, return <see cref="F:Dt.CalcEngine.CalcErrors.Reference" />. /// </returns> public virtual object GetValue(CalcIdentity id) { if (id is CalcExternalIdentity) { CalcExternalIdentity identity = id as CalcExternalIdentity; ICalcSource source = identity.Source; if (source != null) { CalcLocalIdentity identity3; CalcLocalIdentity identity2 = identity.ConvertToLocal(); if ((this.ArrayFormulaMode || (this.RowCount > 1)) || (this.ColumnCount > 1)) { identity3 = new CalcRangeIdentity(this.Row, this.Column, this.RowCount, this.ColumnCount); } else { identity3 = new CalcCellIdentity(this.Row, this.Column); } return(source.GetEvaluatorContext(identity3).GetValue(identity2)); } } else if ((this.Source != null) && (id is CalcLocalIdentity)) { CalcRangeIdentity objA = id as CalcRangeIdentity; if (object.ReferenceEquals(objA, null)) { return(this.Source.GetValue(id as CalcLocalIdentity)); } if (objA._isFullColumn && objA._isFullRow) { return(this.Source.GetValue(new CalcCellIdentity(this.Row, this.Column))); } if (objA._isFullColumn) { return(this.Source.GetValue(new CalcCellIdentity(this.Row, objA._columnIndex))); } if (objA._isFullRow) { return(this.Source.GetValue(new CalcCellIdentity(objA._rowIndex, this.Column))); } if (((objA._rowCount == 1) && (objA._columnIndex <= this.Column)) && (this.Column < (objA._columnIndex + objA._columnCount))) { return(this.Source.GetValue(new CalcCellIdentity(objA._rowIndex, this.Column))); } if (((objA._columnCount == 1) && (objA._rowIndex <= this.Row)) && (this.Row < (objA._rowIndex + objA._rowCount))) { return(this.Source.GetValue(new CalcCellIdentity(this.Row, objA._columnIndex))); } if ((objA._rowCount == 1) && (objA._columnCount == 1)) { return(this.Source.GetValue(new CalcCellIdentity(objA._rowIndex, objA._columnIndex))); } return(CalcErrors.Value); } return(CalcErrors.Reference); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcRangeIdentity objA = other as CalcRangeIdentity; if (object.ReferenceEquals(objA, null)) { return(false); } return(((((this._isFullRow == objA._isFullRow) && (this._isFullColumn == objA._isFullColumn)) && ((this._rowIndex == objA._rowIndex) && (this._columnIndex == objA._columnIndex))) && (this._rowCount == objA._rowCount)) && (this._columnCount == objA._columnCount)); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcExternalNameIdentity objA = other as CalcExternalNameIdentity; if (object.ReferenceEquals(objA, null)) { return(false); } return(object.ReferenceEquals(base.Source, objA.Source) && (this.Name == objA.Name)); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcSheetRangeIdentity objA = other as CalcSheetRangeIdentity; if (object.ReferenceEquals(objA, null)) { return(false); } return(((((this.StartSource == objA.StartSource) && (this.EndSource == objA.EndSource)) && ((this.IsFullRow == objA.IsFullRow) && (this.IsFullColumn == objA.IsFullColumn))) && (((this.RowIndex == objA.RowIndex) && (this.ColumnIndex == objA.ColumnIndex)) && (this.RowCount == objA.RowCount))) && (this.ColumnCount == objA.ColumnCount)); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcExternalCellIdentity objA = other as CalcExternalCellIdentity; if (object.ReferenceEquals(objA, null)) { return(false); } return(((base._source == objA._source) && (this._rowIndex == objA._rowIndex)) && (this._columnIndex == objA._columnIndex)); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcIdentity" /> is intersected with another one. /// </summary> /// <param name="srcId">The source identity, intersected this with another one.</param> /// <param name="destId">The destination identity,</param> /// <returns> /// <see langword="true" /> if the specified calc identity is intersected; otherwise, <see langword="false" />. /// By default, compare two by <see cref="M:System.Object.ReferenceEquals(System.Object,System.Object)" />. /// </returns> public virtual bool IsIntersected(CalcIdentity srcId, CalcIdentity destId) { if (srcId == destId) { return(true); } if (srcId is CalcCellIdentity) { if (destId is CalcRangeIdentity) { return(IsIntersected(srcId as CalcCellIdentity, destId as CalcRangeIdentity)); } } else if (srcId is CalcRangeIdentity) { if (destId is CalcCellIdentity) { return(IsIntersected(destId as CalcCellIdentity, srcId as CalcRangeIdentity)); } if (destId is CalcRangeIdentity) { CalcRangeIdentity identity = srcId as CalcRangeIdentity; CalcRangeIdentity identity2 = destId as CalcRangeIdentity; if ((identity._isFullColumn && identity._isFullRow) || (identity2._isFullColumn && identity2._isFullRow)) { return(true); } if (identity._isFullColumn || identity2._isFullColumn) { if (!InRange(identity._columnIndex, identity2._columnIndex, identity2._columnIndex + identity2._columnCount)) { return(InRange(identity2._columnIndex, identity._columnIndex, identity._columnIndex + identity._columnCount)); } return(true); } if (identity._isFullRow || identity2._isFullRow) { if (!InRange(identity._rowIndex, identity2._rowIndex, identity2._rowIndex + identity2._rowCount)) { return(InRange(identity2._rowIndex, identity._rowIndex, identity._rowIndex + identity._rowCount)); } return(true); } return((InRange(identity._rowIndex, identity2._rowIndex, identity2._rowIndex + identity2._rowCount) && InRange(identity._columnIndex, identity2._columnIndex, identity2._columnIndex + identity2._columnCount)) || (InRange(identity2._rowIndex, identity._rowIndex, identity._rowIndex + identity._rowCount) && InRange(identity2._columnIndex, identity._columnIndex, identity._columnIndex + identity._columnCount))); } } else if ((srcId is CalcExternalIdentity) && (destId is CalcExternalIdentity)) { return(this.IsIntersected((srcId as CalcExternalIdentity).ConvertToLocal(), (destId as CalcExternalIdentity).ConvertToLocal())); } return(false); }
private object EvaluateReference(CalcReferenceExpression expr, CalcEvaluatorContext context, bool acceptsReference) { if (object.ReferenceEquals(context, null)) { return(CalcErrors.Value); } CalcIdentity id = expr.GetId(context.Row, context.Column); if (!acceptsReference && !context.ArrayFormulaMode) { return(context.GetValue(id)); } return(context.GetReference(id)); }
/// <summary> /// Gets the reference at specified position which indicated by <paramref name="id" />. /// </summary> /// <param name="id">A <see cref="T:Dt.CalcEngine.CalcIdentity" /> indicates the identity of a address.</param> /// <returns> /// An <see cref="T:System.Object" /> indicates the reference. /// If the <paramref name="id" /> is not recognized, return <see cref="F:Dt.CalcEngine.CalcErrors.Reference" />. /// </returns> public virtual object GetReference(CalcIdentity id) { if (id is CalcExternalIdentity) { CalcExternalIdentity identity = id as CalcExternalIdentity; ICalcSource source = identity.Source; if (source != null) { return(source.GetReference(identity.ConvertToLocal())); } } else { if (id is CalcSheetRangeIdentity) { IMultiSourceProvider provider = this.Source as IMultiSourceProvider; if (provider == null) { return(CalcErrors.Reference); } try { CalcSheetRangeIdentity identity2 = id as CalcSheetRangeIdentity; CalcLocalIdentity identity3 = identity2.ConvertToLocal(); List <CalcReference> references = new List <CalcReference>(); foreach (ICalcSource source2 in provider.GetCalcSources(identity2.StartSource, identity2.EndSource)) { CalcReference item = source2.GetReference(identity3) as CalcReference; if (item != null) { references.Add(item); } } return(new SheetRangeReference(references)); } catch { return(CalcErrors.Reference); } } if ((this.Source != null) && (id is CalcLocalIdentity)) { return(this.Source.GetReference(id as CalcLocalIdentity)); } } return(CalcErrors.Reference); }
/// <summary> /// Returns a <see cref="T:System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="T:System.String" /> that represents this instance. /// </returns> public override string ToString() { return(string.Format("'{0}'!{1}", new object[] { (base.Source != null) ? base.Source.GetParserContext(null).GetExternalSourceToken(base.Source) : CalcErrors.Reference.ToString(), CalcIdentity.GetCoord(this.RowIndex, this.ColumnIndex) })); }
/// <summary> /// Initializes a new instance of the <see cref="T:Dt.CalcEngine.CalcNode" /> class. /// </summary> /// <param name="source">The source.</param> /// <param name="id">The id.</param> public CalcNode(ICalcSource source, CalcIdentity id) { this.Source = source; this.Id = id; }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcNameIdentity objA = other as CalcNameIdentity; return(!object.ReferenceEquals(objA, null) && (this.Name == objA.Name)); }
bool IEqualityComparer <CalcLocalIdentity> .Equals(CalcLocalIdentity x, CalcLocalIdentity y) { return(CalcIdentity.Compare(x, y)); }
/// <summary> /// Returns a <see cref="T:System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="T:System.String" /> that represents this instance. /// </returns> public override string ToString() { return(string.Format("'{0}:{1}'!{2}", new object[] { (this.StartSource != null) ? this.StartSource.GetParserContext(null).GetExternalSourceToken(this.StartSource) : CalcErrors.Reference.ToString(), (this.StartSource != null) ? this.StartSource.GetParserContext(null).GetExternalSourceToken(this.EndSource) : CalcErrors.Reference.ToString(), CalcIdentity.GetCoord(this.RowIndex, this.ColumnIndex, this.RowCount, this.ColumnCount, this.RangeType) })); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcStructReferenceIndentity objA = other as CalcStructReferenceIndentity; return(!object.ReferenceEquals(objA, null) && (this._structReference == objA._structReference)); }
/// <summary> /// Returns a <see cref="T:System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="T:System.String" /> that represents this instance. /// </returns> public override string ToString() { return CalcIdentity.GetCoord(this.RowIndex, this.ColumnIndex); }
/// <summary> /// Determines whether the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </summary> /// <param name="other"> /// The <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> to compare with the /// current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />. /// </param> /// <returns> /// <see langword="true" /> if the specified <see cref="T:Dt.CalcEngine.CalcCellIdentity" /> /// is equal to the current <see cref="T:Dt.CalcEngine.CalcCellIdentity" />; /// otherwise, <see langword="false" />. /// </returns> protected override bool CompareTo(CalcIdentity other) { CalcFunctionIdentity objA = other as CalcFunctionIdentity; return(!object.ReferenceEquals(objA, null) && (string.Compare(this.FunctionName, objA.FunctionName, StringComparison.CurrentCultureIgnoreCase) == 0)); }
/// <summary> /// Returns a <see cref="T:System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="T:System.String" /> that represents this instance. /// </returns> public override string ToString() { return(CalcIdentity.GetCoord(this.RowIndex, this.ColumnIndex, this.RowCount, this.ColumnCount, this.RangeType)); }