Esempio n. 1
0
 public RegexInterpreterCode(RegexFindOptimizations findOptimizations, RegexOptions options, int[] codes, string[] strings, int trackcount)
 {
     FindOptimizations  = findOptimizations;
     Options            = options;
     Codes              = codes;
     Strings            = strings;
     StringsAsciiLookup = new uint[strings.Length][];
     TrackCount         = trackcount;
 }
Esempio n. 2
0
 public RegexCode(RegexTree tree, CultureInfo culture, int[] codes, string[] strings, int trackcount, Hashtable?caps, int capsize)
 {
     Tree               = tree;
     Codes              = codes;
     Strings            = strings;
     StringsAsciiLookup = new uint[strings.Length][];
     TrackCount         = trackcount;
     Caps               = caps;
     CapSize            = capsize;
     RightToLeft        = (tree.Options & RegexOptions.RightToLeft) != 0;
     FindOptimizations  = new RegexFindOptimizations(tree, culture);
 }
Esempio n. 3
0
        internal RegexTree(RegexNode root, int captureCount, string[]?captureNames, Hashtable?captureNameToNumberMapping, Hashtable?captureNumberSparseMapping, RegexOptions options, CultureInfo?culture)
        {
#if DEBUG
            // Asserts to both demonstrate and validate the relationships between the various capture data structures.
            Debug.Assert(captureNumberSparseMapping is null || captureNames is not null);
            Debug.Assert((captureNames is null) == (captureNameToNumberMapping is null));
            Debug.Assert(captureNames is null || captureCount == captureNames.Length);
            Debug.Assert(captureNumberSparseMapping is null || captureCount == captureNumberSparseMapping.Count);
            Debug.Assert(captureNameToNumberMapping is null || captureCount == captureNameToNumberMapping.Count);
            if (captureNames is not null)
            {
                Debug.Assert(captureNameToNumberMapping is not null);
                for (int i = 0; i < captureNames.Length; i++)
                {
                    string captureName = captureNames[i];

                    int?captureNumber = captureNameToNumberMapping[captureName] as int?;
                    Debug.Assert(captureNumber is not null);

                    if (captureNumberSparseMapping is not null)
                    {
                        captureNumber = captureNumberSparseMapping[captureNumber] as int?;
                        Debug.Assert(captureNumber is not null);
                    }

                    Debug.Assert(captureNumber == i);
                }
            }
#endif

            Root    = root;
            Culture = culture;
            CaptureNumberSparseMapping = captureNumberSparseMapping;
            CaptureCount = captureCount;
            CaptureNameToNumberMapping = captureNameToNumberMapping;
            CaptureNames      = captureNames;
            Options           = options;
            FindOptimizations = new RegexFindOptimizations(root, options);
        }