/// <summary> /// Attempts to parse a method call with format MethodId(Args) /// </summary> static public bool TryParse(StringSlice inData, out MethodCall outMethodCall) { int openParenIdx = inData.IndexOf('('); int closeParenIdx = inData.LastIndexOf(')'); if (openParenIdx <= 0 || closeParenIdx <= 0 || closeParenIdx <= openParenIdx) { outMethodCall = default(MethodCall); return(false); } StringSlice methodSlice = inData.Substring(0, openParenIdx).Trim(); if (!VariantUtils.IsValidIdentifier(methodSlice)) { outMethodCall = default(MethodCall); return(false); } StringSlice afterMethod = inData.Substring(closeParenIdx + 1); if (!afterMethod.IsWhitespace) { outMethodCall = default(MethodCall); return(false); } int argsLength = closeParenIdx - 1 - openParenIdx; outMethodCall.Id = methodSlice.Hash32(); outMethodCall.Args = inData.Substring(openParenIdx + 1, argsLength).Trim(); return(true); }
static public bool TryParse(StringSlice inSlice, out StringHash32 outHash) { if (inSlice.StartsWith(StringHashing.CustomHashPrefix)) { ulong hexVal; if (StringParser.TryParseHex(inSlice.Substring(1), 8, out hexVal)) { outHash = new StringHash32((uint)hexVal); return(true); } } else if (inSlice.StartsWith("0x")) { ulong hexVal; if (StringParser.TryParseHex(inSlice.Substring(2), 8, out hexVal)) { outHash = new StringHash32((uint)hexVal); return(true); } outHash = default(StringHash32); return(false); } else if (inSlice.StartsWith(StringHashing.StringPrefix)) { outHash = inSlice.Substring(1).Hash32(); return(true); } else if (inSlice.StartsWith('"') && inSlice.EndsWith('"')) { outHash = inSlice.Substring(1, inSlice.Length - 2).Hash32(); return(true); } outHash = inSlice.Hash32(); return(true); }