public int Compare()

in src/NuGet.Core/NuGet.Protocol/ProviderComparer.cs [24:91]


        public int Compare(INuGetResourceProvider providerA, INuGetResourceProvider providerB)
        {
            if (StringComparer.Ordinal.Equals(providerA.Name, providerB.Name))
            {
                return 0;
            }

            // empty names go last
            if (String.IsNullOrEmpty(providerA.Name))
            {
                return 1;
            }

            if (String.IsNullOrEmpty(providerB.Name))
            {
                return -1;
            }

            // check x 
            if (providerA.Before.Contains(providerB.Name, StringComparer.Ordinal))
            {
                return -1;
            }

            if (providerA.After.Contains(providerB.Name, StringComparer.Ordinal))
            {
                return 1;
            }

            // check y
            if (providerB.Before.Contains(providerA.Name, StringComparer.Ordinal))
            {
                return 1;
            }

            if (providerB.After.Contains(providerA.Name, StringComparer.Ordinal))
            {
                return -1;
            }

            // compare with the known names
            if ((providerA.Before.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal) || (providerA.After.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal)))
                && !(providerB.Before.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal) || (providerB.After.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal))))
            {
                return 1;
            }

            if ((providerB.Before.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal) || (providerB.After.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal)))
                && !(providerA.Before.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal) || (providerA.After.Contains(NuGetResourceProviderPositions.Last, StringComparer.Ordinal))))
            {
                return -1;
            }

            if ((providerA.Before.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal) || (providerA.After.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal)))
                && !(providerB.Before.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal) || (providerB.After.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal))))
            {
                return -1;
            }

            if ((providerB.Before.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal) || (providerB.After.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal)))
                && !(providerA.Before.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal) || (providerA.After.Contains(NuGetResourceProviderPositions.First, StringComparer.Ordinal))))
            {
                return 1;
            }

            // give up and sort based on the name
            return StringComparer.Ordinal.Compare(providerA.Name, providerB.Name);
        }