Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }