internal static bool IsItemSpecModifier()

in src/Deprecated/Engine/Shared/FileUtilities.cs [93:249]


        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 == 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 == ItemSpecModifiers.FullPath)
                            {
                                return true;
                            }
                            if (name == ItemSpecModifiers.Filename)
                            {
                                return true;
                            }
                            break;
                        case 'f':
                            break;
                        case 'I': // Identity
                            if (name == ItemSpecModifiers.Identity)
                            {
                                return true;
                            }
                            break;
                        case 'i':        
                            break;
                    }
                    break;
                case 9: // Extension, Directory
                    switch (name[0])
                    {
                        default:
                            return false;
                        case 'D': // Directory
                            if (name == ItemSpecModifiers.Directory)
                            {
                                return true;
                            }
                            break;
                        case 'd':        
                            break;
                        case 'E': // Extension
                            if (name == ItemSpecModifiers.Extension)
                            {
                                return true;
                            }
                            break;
                        case 'e':        
                            break;
                    }             
                    break;
                case 11: // RelativeDir, CreatedTime
                    switch (name[0])
                    {
                        default:
                            return false;
                        case 'C': // CreatedTime
                            if (name == ItemSpecModifiers.CreatedTime)
                            {
                                return true;
                            }
                            break;
                        case 'c':
                            break;
                        case 'R': // RelativeDir
                            if (name == 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 == ItemSpecModifiers.AccessedTime)
                            {
                                return true;
                            }
                            break;
                        case 'a':        
                            break;
                        case 'M': // ModifiedTime
                            if (name == ItemSpecModifiers.ModifiedTime)
                            {
                                return true;
                            }
                            break;
                        case 'm':        
                            break;
                        case 'R': // RecursiveDir
                            if (name == ItemSpecModifiers.RecursiveDir)
                            {
                                return true;
                            }
                            break;
                        case 'r':        
                            break;
                    }
                    break;
                default:
                    // Not the right length for a match.
                    return false;
            }
                   

            // Could still be a case-insensitive match.
            bool result = ItemSpecModifiers.TableOfItemSpecModifiers.ContainsKey(name);
            return result;
        }