in src/Shared/Modifiers.cs [85:252]
internal static bool IsItemSpecModifier(string name)
{
if (name == null)
{
return false;
}
/*
* What follows requires some explanation.
*
* This function is called many times and slowness here will be amplified
* in critical performance scenarios.
*
* The following switch statement attempts to identify item spec modifiers that
* have the exact case that our constants in ItemSpecModifiers have. This is the
* 99% case.
*
* Further, the switch statement can identify certain cases in which there is
* definitely no chance that 'name' is an item spec modifier. For example, a
* 7 letter 'name' that doesn't start with 'r' or 'R' can't be RootDir and
* therefore is not an item spec modifier.
*
*/
switch (name.Length)
{
case 7: // RootDir
switch (name[0])
{
default:
return false;
case 'R': // RootDir
if (name == FileUtilities.ItemSpecModifiers.RootDir)
{
return true;
}
break;
case 'r':
break;
}
break;
case 8: // FullPath, Filename, Identity
switch (name[0])
{
default:
return false;
case 'F': // Filename, FullPath
if (name == FileUtilities.ItemSpecModifiers.FullPath)
{
return true;
}
if (name == FileUtilities.ItemSpecModifiers.Filename)
{
return true;
}
break;
case 'f':
break;
case 'I': // Identity
if (name == FileUtilities.ItemSpecModifiers.Identity)
{
return true;
}
break;
case 'i':
break;
}
break;
case 9: // Extension, Directory
switch (name[0])
{
default:
return false;
case 'D': // Directory
if (name == FileUtilities.ItemSpecModifiers.Directory)
{
return true;
}
break;
case 'd':
break;
case 'E': // Extension
if (name == FileUtilities.ItemSpecModifiers.Extension)
{
return true;
}
break;
case 'e':
break;
}
break;
case 11: // RelativeDir, CreatedTime
switch (name[0])
{
default:
return false;
case 'C': // CreatedTime
if (name == FileUtilities.ItemSpecModifiers.CreatedTime)
{
return true;
}
break;
case 'c':
break;
case 'R': // RelativeDir
if (name == FileUtilities.ItemSpecModifiers.RelativeDir)
{
return true;
}
break;
case 'r':
break;
}
break;
case 12: // RecursiveDir, ModifiedTime, AccessedTime
switch (name[0])
{
default:
return false;
case 'A': // AccessedTime
if (name == FileUtilities.ItemSpecModifiers.AccessedTime)
{
return true;
}
break;
case 'a':
break;
case 'M': // ModifiedTime
if (name == FileUtilities.ItemSpecModifiers.ModifiedTime)
{
return true;
}
break;
case 'm':
break;
case 'R': // RecursiveDir
if (name == FileUtilities.ItemSpecModifiers.RecursiveDir)
{
return true;
}
break;
case 'r':
break;
}
break;
case 19:
case 23:
case 24:
return IsDefiningProjectModifier(name);
default:
// Not the right length for a match.
return false;
}
// Could still be a case-insensitive match.
bool result = s_tableOfItemSpecModifiers.Contains(name);
#if DEBUG
if (result && s_traceModifierCasing)
{
Console.WriteLine("'{0}' is a non-standard casing. Replace the use with the standard casing like 'RecursiveDir' or 'FullPath' for a small performance improvement.", name);
}
#endif
return result;
}