if (current [1] == VolumeSeparatorChar)
path = current.Substring (0, 2) + path;
else
- path = current.Substring (0, current.IndexOf ('\\', current.IndexOf ("\\\\") + 1));
+ path = current.Substring (0, current.IndexOf ('\\', current.IndexOfOrdinalUnchecked ("\\\\") + 1));
}
}
private static bool filter_by_type_name (Type m, object filterCriteria) {
string s = (string)filterCriteria;
if (s.Length > 0 && s [s.Length - 1] == '*')
- return m.Name.StartsWith (s.Substring (0, s.Length - 1), StringComparison.Ordinal);
+ return m.Name.StartsWithOrdinalUnchecked (s.Substring (0, s.Length - 1));
return m.Name == s;
}
private static bool filter_by_type_name_ignore_case (Type m, object filterCriteria) {
string s = (string)filterCriteria;
if (s.Length > 0 && s [s.Length - 1] == '*')
- return m.Name.StartsWith (s.Substring (0, s.Length - 1), StringComparison.OrdinalIgnoreCase);
+ return m.Name.StartsWithOrdinalCaseInsensitiveUnchecked (s.Substring (0, s.Length - 1));
- return String.Equals (m.Name, s, StringComparison.OrdinalIgnoreCase);
+ return string.CompareOrdinalCaseInsensitiveUnchecked (m.Name, s) == 0;
}
[MethodImplAttribute (MethodImplOptions.InternalCall)]
value = value.Trim ();
- if (string.CompareOrdinalCaseInsensitive (value, TrueString) == 0)
+ if (string.CompareOrdinalCaseInsensitiveUnchecked (value, TrueString) == 0)
return true;
- if (string.CompareOrdinalCaseInsensitive (value, FalseString) == 0)
+ if (string.CompareOrdinalCaseInsensitiveUnchecked (value, FalseString) == 0)
return false;
throw new FormatException (Locale.GetText (
value = value.Trim ();
- if (string.CompareOrdinalCaseInsensitive (value, TrueString) == 0) {
+ if (string.CompareOrdinalCaseInsensitiveUnchecked (value, TrueString) == 0) {
result = true;
return true;
}
- if (string.CompareOrdinalCaseInsensitive (value, FalseString) == 0) {
+ if (string.CompareOrdinalCaseInsensitiveUnchecked (value, FalseString) == 0) {
// result = false; // already set at false by default
return true;
}
bool hasCurrency = false;
if ((style & NumberStyles.AllowCurrencySymbol) != 0)
{
- int index = s.IndexOf (nfi.CurrencySymbol);
+ int index = s.IndexOfOrdinalUnchecked (nfi.CurrencySymbol);
if (index >= 0)
{
s = s.Remove (index, nfi.CurrencySymbol.Length);
else if (allowedLeadingSign && !string.IsNullOrEmpty (negativeSign) && ch == negativeSign[0] && !hasSign)
{
int slen = negativeSign.Length;
- if (slen == 1 || s.IndexOf (negativeSign, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked (negativeSign, pos, slen) == pos)
{
hasSign = true;
isNegative = true;
else if (allowedLeadingSign && !string.IsNullOrEmpty (positiveSign) && ch == positiveSign[0] && !hasSign)
{
int slen = positiveSign.Length;
- if (slen == 1 || s.IndexOf (positiveSign, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked (positiveSign, pos, slen) == pos)
{
hasSign = true;
pos += slen;
else if (allowedDecimalPoint && ch == decimalSep[0])
{
int slen = decimalSep.Length;
- if (slen != 1 && s.IndexOf (decimalSep, pos, slen) != pos)
+ if (slen != 1 && s.IndexOfOrdinalUnchecked (decimalSep, pos, slen) != pos)
{
if (throwex)
ThrowAtPos (pos);
else if (allowedThousands && ch == groupSep[0] && ch != decimalSep [0])
{
int slen = groupSep.Length;
- if (slen != 1 && s.IndexOf(groupSep, pos, slen) != pos)
+ if (slen != 1 && s.IndexOfOrdinalUnchecked(groupSep, pos, slen) != pos)
{
if (throwex)
ThrowAtPos (pos);
else if (allowedDecimalPoint && ch == decimalSep[0] && !hasDecimalPoint)
{
int slen = decimalSep.Length;
- if (slen == 1 || s.IndexOf(decimalSep, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked(decimalSep, pos, slen) == pos)
{
decPos = sb.Length;
hasDecimalPoint = true;
if (!string.IsNullOrEmpty (positiveSign) && ch == positiveSign[0])
{
int slen = positiveSign.Length;
- if (slen == 1 || s.IndexOf (positiveSign, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked (positiveSign, pos, slen) == pos)
{
pos += slen;
if (pos >= len) {
else if (!string.IsNullOrEmpty (negativeSign) && ch == negativeSign[0])
{
int slen = negativeSign.Length;
- if (slen == 1 || s.IndexOf (negativeSign, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked (negativeSign, pos, slen) == pos)
{
pos += slen;
if (pos >= len) {
else if (allowedTrailingSign && !string.IsNullOrWhiteSpace (negativeSign) && ch == negativeSign[0] && !hasSign)
{
int slen = negativeSign.Length;
- if (slen == 1 || s.IndexOf(negativeSign, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked(negativeSign, pos, slen) == pos)
{
hasSign = true;
isNegative = true;
else if (allowedTrailingSign && !string.IsNullOrWhiteSpace (positiveSign) && ch == positiveSign[0] && !hasSign)
{
int slen = positiveSign.Length;
- if (slen == 1 || s.IndexOf (positiveSign, pos, slen) == pos)
+ if (slen == 1 || s.IndexOfOrdinalUnchecked (positiveSign, pos, slen) == pos)
{
hasSign = true;
pos += slen;
ref bool foundSign, ref bool negative)
{
if ((pos + nfi.NegativeSign.Length) <= s.Length &&
- s.IndexOf (nfi.NegativeSign, pos, nfi.NegativeSign.Length) == pos) {
+ s.IndexOfOrdinalUnchecked (nfi.NegativeSign, pos, nfi.NegativeSign.Length) == pos) {
negative = true;
foundSign = true;
pos += nfi.NegativeSign.Length;
} else if ((pos + nfi.PositiveSign.Length) <= s.Length &&
- s.IndexOf (nfi.PositiveSign, pos, nfi.PositiveSign.Length) == pos) {
+ s.IndexOfOrdinalUnchecked (nfi.PositiveSign, pos, nfi.PositiveSign.Length) == pos) {
negative = false;
pos += nfi.PositiveSign.Length;
foundSign = true;
//
// Fastest method for internal case insensitive comparison
//
- internal static int CompareOrdinalCaseInsensitive (string strA, string strB)
+ internal static int CompareOrdinalCaseInsensitiveUnchecked (string strA, string strB)
{
return CompareOrdinalCaseInsensitiveUnchecked (strA, 0, int.MaxValue, strB, 0, int.MaxValue);
}
return IndexOfOrdinalIgnoreCaseUnchecked (value, startIndex, count);
}
+ internal unsafe int IndexOfOrdinalUnchecked (string value)
+ {
+ return IndexOfOrdinalUnchecked (value, 0, length);
+ }
+
internal unsafe int IndexOfOrdinalUnchecked (string value, int startIndex, int count)
{
int valueLen = value.Length;
case StringComparison.InvariantCultureIgnoreCase:
return CultureInfo.InvariantCulture.CompareInfo.IsPrefix (this, value, CompareOptions.IgnoreCase);
case StringComparison.Ordinal:
- return CultureInfo.CurrentCulture.CompareInfo.IsPrefix (this, value, CompareOptions.Ordinal);
+ return StartsWithOrdinalUnchecked (value);
case StringComparison.OrdinalIgnoreCase:
- return CultureInfo.CurrentCulture.CompareInfo.IsPrefix (this, value, CompareOptions.OrdinalIgnoreCase);
+ return StartsWithOrdinalCaseInsensitiveUnchecked (value);
default:
string msg = Locale.GetText ("Invalid value '{0}' for StringComparison", comparisonType);
throw new ArgumentException (msg, "comparisonType");
}
}
+ internal bool StartsWithOrdinalUnchecked (string value)
+ {
+ return length >= value.length && CompareOrdinalUnchecked (this, 0, value.length, value, 0, value.length) == 0;
+ }
+
+ internal bool StartsWithOrdinalCaseInsensitiveUnchecked (string value)
+ {
+ return length >= value.Length && CompareOrdinalCaseInsensitiveUnchecked (this, 0, value.length, value, 0, value.length) == 0;
+ }
+
[ComVisible (false)]
public bool EndsWith (string value, StringComparison comparisonType)
{
return false; // because m.Name cannot be null or empty
if (name [name.Length - 1] == '*')
- return m.Name.StartsWith (name.Substring (0, name.Length - 1), StringComparison.Ordinal);
+ return m.Name.StartsWithOrdinalUnchecked (name.Substring (0, name.Length - 1));
return m.Name == name;
}
return false; // because m.Name cannot be null or empty
if (name [name.Length - 1] == '*')
- return m.Name.StartsWith (name.Substring (0, name.Length - 1), StringComparison.OrdinalIgnoreCase);
+ return m.Name.StartsWithOrdinalCaseInsensitiveUnchecked (name.Substring (0, name.Length - 1));
- return string.Equals (m.Name, name, StringComparison.OrdinalIgnoreCase);
+ return string.CompareOrdinalCaseInsensitiveUnchecked (m.Name, name) == 0;
}
static bool FilterAttribute_impl (MemberInfo m, object filterCriteria)