[MethodImpl(MethodImplOptions.NoInlining)] // the caller should be inlined, not this method private static UnicodeRange CreateRange(ref UnicodeRange range, char first, char last) { // If the range hasn't been created, create it now. // It's ok if two threads race and one overwrites the other's 'range' value. range = UnicodeRange.Create(first, last); return range; }
[MethodImpl(MethodImplOptions.NoInlining)] // the caller should be inlined, not this method private static UnicodeRange CreateEmptyRange(ref UnicodeRange range) { // If the range hasn't been created, create it now. // It's ok if two threads race and one overwrites the other's 'range' value. range = new UnicodeRange(0, 0); return range; }
[MethodImpl(MethodImplOptions.NoInlining)] // the caller should be inlined, not this method private static UnicodeRange CreateRange(ref UnicodeRange range, char first, char last) { // If the range hasn't been created, create it now. // It's ok if two threads race and one overwrites the other's 'range' value. Debug.Assert(last > first, "Code points were specified out of order."); var newRange = UnicodeRange.Create(first, last); Volatile.Write(ref range, newRange); return newRange; }
[MethodImpl(MethodImplOptions.NoInlining)] // the caller should be inlined, not this method private static UnicodeRange CreateEmptyRange(ref UnicodeRange range) { // If the range hasn't been created, create it now. // It's ok if two threads race and one overwrites the other's 'range' value. var newRange = new UnicodeRange(0, 0); Volatile.Write(ref range, newRange); return(newRange); }
[MethodImpl(MethodImplOptions.NoInlining)] // the caller should be inlined, not this method private static UnicodeRange CreateRange(ref UnicodeRange range, char first, char last) { // If the range hasn't been created, create it now. // It's ok if two threads race and one overwrites the other's 'range' value. Debug.Assert(last > first, "Code points were specified out of order."); var newRange = UnicodeRange.Create(first, last); Volatile.Write(ref range, newRange); return(newRange); }
/// <summary> /// Allows all characters specified by <paramref name="range"/> through the filter. /// </summary> public virtual void AllowRange(UnicodeRange range) { if (range == null) { throw new ArgumentNullException(nameof(range)); } int firstCodePoint = range.FirstCodePoint; int rangeSize = range.Length; for (int i = 0; i < rangeSize; i++) { _allowedCharactersBitmap.AllowCharacter((char)(firstCodePoint + i)); } }
[MethodImpl(MethodImplOptions.NoInlining)] // the caller should be inlined, not this method private static UnicodeRange CreateRange([NotNull] ref UnicodeRange?range, char first, char last) { // It's ok if two threads race and one overwrites the other's 'range' value. Volatile.Write(ref range, UnicodeRange.Create(first, last)); return(range); }
/// <summary> /// Disallows all characters specified by <paramref name="range"/> through the filter. /// </summary> /// <returns> /// The 'this' instance. /// </returns> public CodePointFilter ForbidRange(UnicodeRange range) { if (range == null) { throw new ArgumentNullException("range"); } int firstCodePoint = range.FirstCodePoint; int rangeSize = range.Length; for (int i = 0; i < rangeSize; i++) { _allowedCharactersBitmap.ForbidCharacter((char)(firstCodePoint + i)); } return this; }