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; }
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); }
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); }