Beispiel #1
0
        private static IntPtr CompileSet(string[] patterns, RureFlags flags, IntPtr options)
        {
            var patBytes   = patterns.Select(Encoding.UTF8.GetBytes).ToArray();
            var patLengths = patBytes
                             .Select(byts => new UIntPtr((uint)byts.Length)).ToArray();
            var patByteHandles = patBytes
                                 .Select(a => GCHandle.Alloc(a, GCHandleType.Pinned)).ToArray();
            var patBytePinnedPointers = patByteHandles
                                        .Select(h => h.AddrOfPinnedObject()).ToArray();

            using (var err = new Error())
            {
                var compiled = RureFfi.rure_compile_set(patBytePinnedPointers,
                                                        patLengths,
                                                        new UIntPtr((uint)patLengths.Length),
                                                        (uint)flags,
                                                        options,
                                                        err.Raw);

                foreach (var handle in patByteHandles)
                {
                    handle.Free();
                }

                if (compiled != IntPtr.Zero)
                {
                    return(compiled);
                }

                throw new RegexCompilationException(err.Message);
            }
        }
Beispiel #2
0
 /// <summary>
 ///   Create a new regex instance from the given pattern, with the given
 ///   options applied and with the given flags enabled.
 /// </summary>
 public Regex(string pattern, Options opts, RureFlags flags)
     : this(pattern, opts.Raw, (uint)flags)
 {
 }
Beispiel #3
0
 /// <summary>
 ///   Create a new regex instance from the given pattern and flags.
 /// </summary>
 public Regex(string pattern, RureFlags flags)
     : this(pattern, IntPtr.Zero, (uint)flags)
 {
 }
Beispiel #4
0
 public RegexSet(RureFlags flags, Options options, params string[] patterns)
     : base(CompileSet(patterns, flags, options.Raw))
 {
     _arity = patterns.Length;
 }
Beispiel #5
0
 public RegexSet(RureFlags flags, params string[] patterns)
     : base(CompileSet(patterns, flags, IntPtr.Zero))
 {
     _arity = patterns.Length;
 }