public BraceCounter(IEnumerable <T> braces) { T[] array = braces.ToArray(); if ((array.Length & 1) > 0 || array.Length == 0) { throw new ArgumentException("Brace count must be even and greater than zero"); } int pairCount = array.Length / 2; _bracesStacks = new Stack <T> [pairCount]; _bracePairs = new List <BracePair>(); for (int i = 0; i < array.Length; i += 2) { var pair = new BracePair(array[i], array[i + 1]); _bracePairs.Add(pair); _bracesStacks[i / 2] = new Stack <T>(); } }
public bool CountBrace(T brace) { for (int i = 0; i < _bracePairs.Count; i++) { BracePair pair = _bracePairs[i]; if (0 == pair.OpenBrace.CompareTo(brace)) { _bracesStacks[i].Push(brace); return(true); } else if (0 == pair.CloseBrace.CompareTo(brace)) { if (_bracesStacks[i].Count > 0) { _bracesStacks[i].Pop(); } return(true); } } return(false); }