示例#1
0
        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>();
            }
        }
示例#2
0
 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);
 }