Example #1
0
        /* Function: FromParameters
         * Creates a UsingString from the passed parameters.
         */
        static public UsingString FromParameters(UsingType type, SymbolString prefixToAdd, SymbolString prefixToRemove = default(SymbolString))
        {
            StringBuilder stringBuilder = new System.Text.StringBuilder(prefixToAdd.ToString().Length + 1);

            if (type == UsingType.AddPrefix)
            {
                stringBuilder.Append('A');

                if (prefixToAdd == null)
                {
                    throw new InvalidOperationException();
                }

                stringBuilder.Append(prefixToAdd.ToString());
            }

            else if (type == UsingType.ReplacePrefix)
            {
                stringBuilder.Append('R');

                if (prefixToAdd == null || prefixToRemove == null)
                {
                    throw new InvalidOperationException();
                }

                stringBuilder.Append(prefixToRemove);
                stringBuilder.Append(SeparatorChar);
                stringBuilder.Append(prefixToAdd);
            }

            else
            {
                throw new InvalidOperationException();
            }

            return(new UsingString(stringBuilder.ToString()));
        }
Example #2
0
        /* Function: FromParameters
         * Creates a ClassString from the passed parameters.
         */
        static public ClassString FromParameters(HierarchyType hierarchy, int languageID, bool caseSensitive, SymbolString symbol)
        {
            if (symbol == null)
            {
                throw new NullReferenceException();
            }

            // SymbolString plus hierarchy, language ID, and separator.  It's almost definitely only going to use one char for the
            // language ID, but getting room for a second one just to be certain isn't a big deal when we're already paying for the
            // allocation.
            StringBuilder stringBuilder = new System.Text.StringBuilder(symbol.ToString().Length + 4);

            if (hierarchy == HierarchyType.Class)
            {
                if (caseSensitive)
                {
                    stringBuilder.Append('C');
                }
                else
                {
                    stringBuilder.Append('c');
                }
            }
            else             // (hierarchy == HierarchyType.Database)
            {
                if (caseSensitive)
                {
                    stringBuilder.Append('D');
                }
                else
                {
                    stringBuilder.Append('d');
                }
            }

            do
            {
                int value = languageID & 0x0000003F;

                if (value < 10)
                {
                    stringBuilder.Append((char)('0' + value));
                }
                else if (value < 36)
                {
                    stringBuilder.Append((char)('A' + (value - 10)));
                }
                else if (value < 62)
                {
                    stringBuilder.Append((char)('a' + (value - 36)));
                }
                else if (value == 62)
                {
                    stringBuilder.Append('!');
                }
                else                 // (value == 63)
                {
                    stringBuilder.Append('@');
                }

                languageID >>= 6;
            }while (languageID > 0);

            stringBuilder.Append(SeparatorChar);

            string symbolString = symbol.ToString();

            stringBuilder.Append(symbolString);

            string classString = stringBuilder.ToString();
            string lookupKey;

            if (caseSensitive)
            {
                lookupKey = classString;
            }
            else
            {
                stringBuilder.Remove(stringBuilder.Length - symbolString.Length, symbolString.Length);
                stringBuilder.Append(symbolString.ToLower());
                lookupKey = stringBuilder.ToString();
            }

            return(new ClassString(classString, lookupKey));
        }