Exemplo n.º 1
0
        public static bool TryParse(string version, out UnityVersion?result, bool strict = false)
        {
            int cursor = 0;

            int major    = 0;
            int minor    = 0;
            int revision = 0;

            // missing release type identifier means 'f' - public release, so that is the default as well
            UnityVersion.UnityReleaseType releaseType = UnityVersion.UnityReleaseType.kPublicRelease;
            int    incrementalVersion = 0;
            string suffix             = "";
            bool   isValid            = true;

            // Doing this instead because RegEx is impressively slow
            try
            {
                isValid = cursor < version.Length && TryReadVersionNumber(version, ref cursor, ref major);
                isValid = isValid && (cursor == version.Length || TrySkipVersionSeparator(version, ref cursor));
                isValid = isValid && (cursor == version.Length || TryReadVersionNumber(version, ref cursor, ref minor));
                isValid = isValid && (cursor == version.Length || TrySkipVersionSeparator(version, ref cursor));
                isValid = isValid && (cursor == version.Length || TryReadVersionNumber(version, ref cursor, ref revision));
                isValid = isValid && (cursor == version.Length || TryReadVersionReleaseType(version, ref cursor, ref releaseType));
                isValid = isValid && (cursor == version.Length ||
                                      // experimental 'x' releases can have any characters following the 'x', so we don't read incrementalVersion but save the rest into the suffix
                                      releaseType == UnityVersion.UnityReleaseType.kExperimentalRelease ||
                                      TryReadVersionNumber(version, ref cursor, ref incrementalVersion));
                // if there's anything left, read the rest as suffix if experimental release or allowSuffix parse request
                if (isValid && cursor < version.Length)
                {
                    if (releaseType == UnityVersion.UnityReleaseType.kExperimentalRelease || !strict)
                    {
                        suffix = version.Substring(cursor);
                    }
                    else
                    {
                        isValid = false;
                    }
                }
            }
            catch (Exception)
            {
                result = null;
                return(false);
            }
            if (!isValid)
            {
                result = null;
                return(false);
            }

            result = new UnityVersion(major, minor, revision, releaseType, incrementalVersion, suffix);
            return(true);
        }
Exemplo n.º 2
0
 public static bool TryParseUnityReleaseType(char releaseType, out UnityVersion.UnityReleaseType result)
 {
     for (int i = (int)UnityVersion.UnityReleaseType.kAlphaRelease; i < (int)UnityVersion.UnityReleaseType.kNumUnityReleaseTypes; ++i)
     {
         if (releaseType == k_ValidReleaseTypeSymbols[i])
         {
             result = (UnityVersion.UnityReleaseType)i;
             return(true);
         }
     }
     result = UnityVersion.UnityReleaseType.kNumUnityReleaseTypes;
     return(false);
 }
Exemplo n.º 3
0
 private static bool TryReadVersionReleaseType(string version, ref int cursor, ref UnityVersion.UnityReleaseType releaseType)
 {
     if (cursor < version.Length && UnityVersionTypeTraits.IsAllowedUnityReleaseTypeIdentifier(version[cursor]))
     {
         if (UnityVersionTypeTraits.TryParseUnityReleaseType(version[cursor], out releaseType))
         {
             cursor++;
             return(true);
         }
     }
     return(false);
 }