/// <summary> /// Returns an array of summary objects. /// </summary> /// <param name="emptySummaries">The empty summaries.</param> /// <returns></returns> public ITreeTableSummary[] GetSummaries(ITreeTableEmptySummaryArraySource emptySummaries) { if (summaries == null) { summaries = OnGetSummaries(emptySummaries) ?? emptySummaryArray; } return(summaries); }
/// <summary> /// Returns an array of summary objects. /// </summary> public ITreeTableSummary[] GetSummaries(ITreeTableEmptySummaryArraySource emptySummaries) { if (this.Root == null) { return(emptySummaries.GetEmptySummaries()); } return(((ITreeTableSummaryNode)this.Root).GetSummaries(emptySummaries)); }
/// <summary> /// Called from <see cref="GetSummaries"/> when called the first time after summaries were invalidated. /// </summary> /// <param name="emptySummaries">The empty summaries.</param> /// <returns></returns> public virtual ITreeTableSummary[] OnGetSummaries(ITreeTableEmptySummaryArraySource emptySummaries) { ITreeTableSummary[] summaries = null; ITreeTableSummaryArraySource summaryArraySource = GetSummaryArraySource(); if (summaryArraySource != null) { bool summaryChanged; summaries = summaryArraySource.GetSummaries(emptySummaries, out summaryChanged); } return(summaries); }
/// <summary> /// Returns an array of summary objects. /// </summary> /// <param name="emptySummaries">The empty summaries.</param> /// <returns></returns> public ITreeTableSummary[] GetSummaries(ITreeTableEmptySummaryArraySource emptySummaries) { if (Tree.IsInitializing) { return(null); } else if (_summaries == null) { ITreeTableSummary[] left = GetLeftC().GetSummaries(emptySummaries); ITreeTableSummary[] right = GetRightC().GetSummaries(emptySummaries); if (left != null && right != null) { int reuseLeft = 0; int reuseRight = 0; _summaries = new ITreeTableSummary[left.Length]; for (int i = 0; i < _summaries.Length; i++) { _summaries[i] = left[i].Combine(right[i]); // preserve memory optimization if (reuseLeft == i || reuseRight == i) { if (Object.ReferenceEquals(_summaries[i], left[i])) { reuseLeft++; } else if (Object.ReferenceEquals(_summaries[i], right[i])) { reuseRight++; } } } // preserve memory optimization if (reuseLeft == _summaries.Length) { _summaries = left; } else if (reuseRight == _summaries.Length) { _summaries = right; } } } return(_summaries); }
/// <summary> /// Returns an array of summary objects. /// </summary> public ITreeTableSummary[] GetSummaries(ITreeTableEmptySummaryArraySource emptySummaries) { return(thisTree.GetSummaries(emptySummaries)); }