/// <summary> /// Converts a string to an object identity. /// </summary> /// <param name="s">The string to convert.</param> /// <returns>The converted object identity.</returns> public static Identity stringToIdentity(string s) { Identity ident = new Identity(); // // Find unescaped separator; note that the string may contain an escaped // backslash before the separator. // int slash = -1, pos = 0; while((pos = s.IndexOf((System.Char) '/', pos)) != -1) { int escapes = 0; while(pos - escapes > 0 && s[pos - escapes - 1] == '\\') { escapes++; } // // We ignore escaped escapes // if(escapes % 2 == 0) { if(slash == -1) { slash = pos; } else { // // Extra unescaped slash found. // IdentityParseException ex = new IdentityParseException(); ex.str = "unescaped backslash in identity `" + s + "'"; throw ex; } } pos++; } if(slash == -1) { ident.category = ""; try { ident.name = IceUtilInternal.StringUtil.unescapeString(s, 0, s.Length); } catch(System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid identity name `" + s + "': " + e.Message; throw ex; } } else { try { ident.category = IceUtilInternal.StringUtil.unescapeString(s, 0, slash); } catch(System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid category in identity `" + s + "': " + e.Message; throw ex; } if(slash + 1 < s.Length) { try { ident.name = IceUtilInternal.StringUtil.unescapeString(s, slash + 1, s.Length); } catch(System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid name in identity `" + s + "': " + e.Message; throw ex; } } else { ident.name = ""; } } return ident; }
/// <summary> /// Converts a string to an object identity. /// </summary> /// <param name="s">The string to convert.</param> /// <returns>The converted object identity.</returns> public static Identity stringToIdentity(string s) { Identity ident = new Identity(); // // Find unescaped separator; note that the string may contain an escaped // backslash before the separator. // int slash = -1, pos = 0; while ((pos = s.IndexOf((System.Char) '/', pos)) != -1) { int escapes = 0; while (pos - escapes > 0 && s[pos - escapes - 1] == '\\') { escapes++; } // // We ignore escaped escapes // if (escapes % 2 == 0) { if (slash == -1) { slash = pos; } else { // // Extra unescaped slash found. // IdentityParseException ex = new IdentityParseException(); ex.str = "unescaped backslash in identity `" + s + "'"; throw ex; } } pos++; } if (slash == -1) { ident.category = ""; try { ident.name = IceUtilInternal.StringUtil.unescapeString(s, 0, s.Length, "/"); } catch (System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid identity name `" + s + "': " + e.Message; throw ex; } } else { try { ident.category = IceUtilInternal.StringUtil.unescapeString(s, 0, slash, "/"); } catch (System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid category in identity `" + s + "': " + e.Message; throw ex; } if (slash + 1 < s.Length) { try { ident.name = IceUtilInternal.StringUtil.unescapeString(s, slash + 1, s.Length, "/"); } catch (System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid name in identity `" + s + "': " + e.Message; throw ex; } } else { ident.name = ""; } } return(ident); }
/// <summary> /// Converts a string to an object identity. /// </summary> /// <param name="s">The string to convert.</param> /// <returns>The converted object identity.</returns> public static Identity stringToIdentity(string s) { Identity ident = new Identity(); // // Find unescaped separator. // int slash = -1, pos = 0; while ((pos = s.IndexOf((System.Char) '/', pos)) != -1) { if (pos == 0 || s[pos - 1] != '\\') { if (slash == -1) { slash = pos; } else { // // Extra unescaped slash found. // IdentityParseException ex = new IdentityParseException(); ex.str = "unescaped backslash in identity `" + s + "'"; throw ex; } } pos++; } if (slash == -1) { ident.category = ""; try { ident.name = IceUtilInternal.StringUtil.unescapeString(s, 0, s.Length); } catch (System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid identity name `" + s + "': " + e.Message; throw ex; } } else { try { ident.category = IceUtilInternal.StringUtil.unescapeString(s, 0, slash); } catch (System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid category in identity `" + s + "': " + e.Message; throw ex; } if (slash + 1 < s.Length) { try { ident.name = IceUtilInternal.StringUtil.unescapeString(s, slash + 1, s.Length); } catch (System.ArgumentException e) { IdentityParseException ex = new IdentityParseException(); ex.str = "invalid name in identity `" + s + "': " + e.Message; throw ex; } } else { ident.name = ""; } } return(ident); }