private static void Map(char c, ref RegExNfaEvaluationNode current, ref RegExNfaEvaluationNode spare)
        {
            current.MapTo(c, spare);
            var tmp = current;

            current = spare;
            spare   = tmp;
            spare.Reset();
        }
 public void MapTo(char c, RegExNfaEvaluationNode target)
 {
     for (var i = 0; i < _numMembers; i++)
     {
         var nfa    = _states[_members[i]];
         var nfaMap = nfa.Map;
         var cnt    = nfaMap.Count;
         for (var j = 0; j < cnt; j++)
         {
             var range = nfaMap[j];
             if (range.Key.Min <= c && c <= range.Key.Max)
             {
                 target.Apply(range.Value); // c is contained in  [Key.Min;Key.Max]
             }
         }
     }
 }