private int MeasureDepth(EaxOpenClose.EngagedXmlDoc tree) { int max = 0; int dep = 0; foreach (var tag in tree.tags) { switch (tag) { case EaxOpenClose.TagOpen _: dep++; if (dep > max) { max++; } break; case EaxOpenClose.TagClose _: dep--; break; } } return(max); }
private int CountTagsOpenClose(EaxOpenClose.EngagedXmlDoc tree) { Set <string> tags = new Set <string>(); foreach (var tag in tree.tags) { switch (tag) { case EaxOpenClose.TagOpen open: tags.Add(open.n.value); break; case EaxOpenClose.TagClose close: tags.Add(close.n.value); break; } } return(tags.Count); }
private bool ValidateBalance(EaxOpenClose.EngagedXmlDoc tree) { Stack <string> trace = new Stack <string>(); foreach (var tag in tree.tags) { switch (tag) { case EaxOpenClose.TagOpen open: trace.Push(open.n.value); break; case EaxOpenClose.TagClose close: var name = trace.Pop(); if (name != close.n.value) { return(false); } break; } } return(trace.Count == 0); }