/* 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())); }
/* 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)); }