File: Model\Pfa\ModelUtils.cs
Web Access
Project: src\src\Microsoft.ML.Data\Microsoft.ML.Data.csproj (Microsoft.ML.Data)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using Microsoft.ML.Runtime;
 
namespace Microsoft.ML.Model
{
    internal static class ModelUtils
    {
        private static string ArgCase(string name)
        {
            if (string.IsNullOrEmpty(name))
                return name;
            if (!char.IsUpper(name[0]))
                return name;
 
            if (name.Length == 1)
                return name.ToLowerInvariant();
            if (!char.IsUpper(name[1]))
                return name.Substring(0, 1).ToLowerInvariant() + name.Substring(1);
 
            int firstNonUpper;
            for (firstNonUpper = 0; firstNonUpper < name.Length && char.IsUpper(name[firstNonUpper]); ++firstNonUpper)
                ;
            Contracts.Assert(1 < firstNonUpper && firstNonUpper <= name.Length);
            if (firstNonUpper == name.Length)
                return name.ToLowerInvariant();
            --firstNonUpper;
            return name.Substring(0, firstNonUpper).ToLowerInvariant() + name.Substring(firstNonUpper);
        }
 
        public static string CreateNameCore(string name, Func<string, bool> contains)
        {
            Contracts.CheckNonEmpty(name, nameof(name));
            Contracts.CheckValue(contains, nameof(contains));
 
            name = ArgCase(name);
            if (!contains(name))
                return name;
            int append = 0;
            while (contains(name + append))
                append++;
            return name + append;
        }
    }
}