public int CompareTo(IDoubleApi other)
        {
            if (ReferenceEquals(this, other))
            {
                return(0);
            }
            if (ReferenceEquals(null, other))
            {
                return(1);
            }
            var nameComparison = string.Compare(Name, other.Name, StringComparison.Ordinal);

            return(nameComparison != 0 ? nameComparison : string.Compare(Description, other.Description, StringComparison.Ordinal));
        }
コード例 #2
0
 public static bool ShouldDefine(this IDoubleApi api, string[] array)
 {
     foreach (var element0 in array)
     {
         foreach (var element1 in array)
         {
             if (!api.TryGetEnabled(element0, element1, out var apiEnabled) || !apiEnabled)
             {
                 continue;
             }
             return(true);
         }
     }
     return(false);
 }
コード例 #3
0
        public static void HelpWithGenerate(this IDoubleApi Api, IEnumerableCollectionProcessor processor, ModuleDefinition mainModule, ModuleDefinition systemModule, Action <string, bool, string, bool, TypeDefinition, ModuleDefinition, ModuleDefinition> GenerateEachPair)
        {
            if (!processor.TryGetEnabled(Api.Name, out var enabled) || !enabled)
            {
                return;
            }
            var array = processor.EnabledNameCollection.Intersect(Api.NameCollection).ToArray();

            if (!Api.ShouldDefine(array))
            {
                return;
            }
            TypeDefinition @static;

            mainModule.Types.Add(@static = mainModule.DefineStatic(Api.Name + Api.Description + "Helper"));
            var count = Api.Count;

            for (var row = 0; row < count; row++)
            {
                var rowName = Api.NameCollection[row];
                if (!processor.IsSpecialType(rowName, out var isRowSpecial))
                {
                    throw new KeyNotFoundException();
                }

                for (var column = 0; column < count; column++)
                {
                    var columnName = Api.NameCollection[column];
                    if (!processor.IsSpecialType(columnName, out var isColumnSpecial))
                    {
                        throw new KeyNotFoundException();
                    }

                    if (!Api.TryGetEnabled(rowName, columnName, out var apiEnabled) || !apiEnabled)
                    {
                        continue;
                    }

                    GenerateEachPair(rowName, isRowSpecial, columnName, isColumnSpecial, @static, mainModule, systemModule);
                }
            }
        }
コード例 #4
0
 public UnionOperator(IDoubleApi api) => Api = api;
コード例 #5
0
        private static void RegisterEachDoubleApi(IDoubleApi api, List <IApiExtensionMethodGenerator> list)
        {
            switch (api.Name)
            {
            case "Concat":
                list.Add(new Concat(api));
                break;

            case "Join":
                switch (api.Description)
                {
                case "Operator":
                    list.Add(new JoinOperator(api));
                    break;

                case "Func":
                    list.Add(new JoinFunc(api));
                    break;

                case "RefFunc":
                    list.Add(new JoinRefFunc(api));
                    break;
                }
                break;

            case "GroupJoin":
                switch (api.Description)
                {
                case "Operator":
                    list.Add(new GroupJoinOperator(api));
                    break;

                case "Func":
                    list.Add(new GroupJoinFunc(api));
                    break;

                case "RefFunc":
                    list.Add(new GroupJoinRefFunc(api));
                    break;
                }
                break;

            case "AdjustedZip":
            case "ExceptionalZip":
                switch (api.Description)
                {
                case "None":
                    list.Add(new ZipNone(api));
                    break;

                case "Operator":
                    list.Add(new ZipOperator(api));
                    break;

                case "Func":
                    list.Add(new ZipFunc(api));
                    break;

                case "RefFunc":
                    list.Add(new ZipRefFunc(api));
                    break;
                }
                break;

            case "Except":
            case "Intersect":
                switch (api.Description)
                {
                case "None":
                    list.Add(new ExceptNone(api));
                    break;

                case "Operator":
                    list.Add(new ExceptOperator(api));
                    break;

                case "Func":
                    list.Add(new ExceptFunc(api));
                    break;

                case "RefFunc":
                    list.Add(new ExceptRefFunc(api));
                    break;
                }
                break;

            case "Union":
                switch (api.Description)
                {
                case "None":
                    list.Add(new UnionNone(api));
                    break;

                case "Operator":
                    list.Add(new UnionOperator(api));
                    break;

                case "Func":
                    list.Add(new UnionFunc(api));
                    break;

                case "RefFunc":
                    list.Add(new UnionRefFunc(api));
                    break;
                }
                break;
            }
        }
コード例 #6
0
 public ExceptOperator(IDoubleApi api) => Api = api;
コード例 #7
0
 public JoinOperator(IDoubleApi api) => Api = api;
コード例 #8
0
 public ZipNone(IDoubleApi api) => Api = api;
コード例 #9
0
 public GroupJoinRefFunc(IDoubleApi api) => Api = api;
コード例 #10
0
 public Concat(IDoubleApi api)
 {
     Api = api;
 }
コード例 #11
0
 public ExceptFunc(IDoubleApi api) => Api = api;
コード例 #12
0
 public ExceptNone(IDoubleApi api) => Api = api;
コード例 #13
0
 public JoinRefFunc(IDoubleApi api) => Api = api;
コード例 #14
0
 public ZipRefFunc(IDoubleApi api) => Api = api;
コード例 #15
0
 public ZipOperator(IDoubleApi api) => Api = api;
コード例 #16
0
 public UnionRefFunc(IDoubleApi api) => Api = api;
コード例 #17
0
 public UnionNone(IDoubleApi api) => Api = api;