7 internal sealed class FeatureSet
12 private enum FeatureSetType
22 private FeatureSetType type;
23 private FeatureSet parent;
28 internal int FormulaCount {
get;
private set; }
33 internal int DefinedNameCount {
get;
private set; }
38 internal int DefinedNameFormulaCount {
get;
private set; }
44 internal int DefinedNameReferenceFormulaCount {
get;
private set; }
49 internal int WorksheetFormulaCount
53 return FormulaCount - DefinedNameFormulaCount;
60 internal int ExternalLinkCount {
get;
private set; }
65 internal bool ContainsFormulas => FormulaCount > 0;
69 internal bool ContainsDefinedNames => DefinedNameCount > 0;
73 internal bool ContainsDefinedNameFormulas => DefinedNameFormulaCount > 0;
77 internal bool ContainsDefinedNameReferences => DefinedNameReferenceFormulaCount > 0;
81 internal bool ContainsWorksheetFormulas => WorksheetFormulaCount > 0;
85 internal bool ContainsExternalLinks => ExternalLinkCount > 0;
91 internal static FeatureSet CreateFormula()
93 return new FeatureSet(FeatureSetType.Formula);
100 internal static FeatureSet CreateDefinedName()
102 return new FeatureSet(FeatureSetType.DefinedName);
107 internal FeatureSet()
109 type = FeatureSetType.Aggregate;
116 private FeatureSet(FeatureSetType type)
119 if (type == FeatureSetType.Formula)
123 else if (type == FeatureSetType.DefinedName)
125 DefinedNameCount = 1;
133 internal void Add(FeatureSet parent)
138 DefinedNameFormulaCount,
139 DefinedNameReferenceFormulaCount,
142 this.parent = parent;
150 internal void Remove(FeatureSet parent)
155 -DefinedNameFormulaCount,
156 -DefinedNameReferenceFormulaCount,
167 internal void SetFormulaFeatures(
bool containsDefinedName,
bool containsExternalLink)
169 int newDefinedNameReferenceFormulaCount = containsDefinedName ? 1 : 0;
170 int newExternalLinkCount = containsExternalLink ? 1 : 0;
172 int definedNameReferenceFormulaDelta =
173 newDefinedNameReferenceFormulaCount - DefinedNameReferenceFormulaCount;
175 int externalLinkDelta =
176 newExternalLinkCount - ExternalLinkCount;
178 if (definedNameReferenceFormulaDelta == 0 && externalLinkDelta == 0)
189 definedNameReferenceFormulaDelta,
193 DefinedNameReferenceFormulaCount = newDefinedNameReferenceFormulaCount;
194 ExternalLinkCount = newExternalLinkCount;
202 internal void SetDefinedNameFeatures(
bool isFormula,
bool containsExternalLink)
204 int newFormulaCount = isFormula ? 1 : 0;
205 int formulaDelta = newFormulaCount - FormulaCount;
207 int newDefinedNameFormulaCount = isFormula ? 1 : 0;
208 int definedNameFormulaDelta = newDefinedNameFormulaCount - DefinedNameFormulaCount;
210 int newExternalLinkCount = containsExternalLink ? 1 : 0;
211 int externalLinkDelta = newExternalLinkCount - ExternalLinkCount;
213 if (externalLinkDelta == 0 && formulaDelta == 0 && definedNameFormulaDelta == 0)
220 parent.ApplyDelta(formulaDelta, 0, definedNameFormulaDelta, 0, externalLinkDelta);
223 FormulaCount = newFormulaCount;
224 DefinedNameFormulaCount = newDefinedNameFormulaCount;
225 ExternalLinkCount = newExternalLinkCount;
236 private void ApplyDelta(
238 int definedNameDelta,
239 int definedNameFormulaDelta,
240 int definedNameReferenceFormulaDelta,
241 int externalLinkDelta)
243 FormulaCount += formulaDelta;
244 DefinedNameCount += definedNameDelta;
245 DefinedNameFormulaCount += definedNameFormulaDelta;
246 DefinedNameReferenceFormulaCount += definedNameReferenceFormulaDelta;
247 ExternalLinkCount += externalLinkDelta;
254 definedNameFormulaDelta,
255 definedNameReferenceFormulaDelta,
265 internal FeatureSet Copy()
267 FeatureSet copy =
new FeatureSet(type)
269 FormulaCount = FormulaCount,
270 DefinedNameCount = DefinedNameCount,
271 DefinedNameFormulaCount = DefinedNameFormulaCount,
272 DefinedNameReferenceFormulaCount = DefinedNameReferenceFormulaCount,
273 ExternalLinkCount = ExternalLinkCount