GetTypeParameter() public static method

public static GetTypeParameter ( int index, int total ) : string
index int
total int
return string
Exemplo n.º 1
0
        void AddCreatorDocs(CodeTypeDeclaration type, CodeMemberMethod method, int w, int n)
        {
            var tp   = Types.GetTypeParameter(w, n);
            var idx  = XmlDocs.GetIndex(tp);
            var fold = type.GetMethods("Fold").First();

            method.Comments.AddDocs(
                XmlDocs.Param("value",
                              "  A <typeparamref name=\"" + tp + "\" /> containing the value",
                              "  to provide to the " + idx,
                              "  " + XmlDocs.See(DefaultNamespace, type, fold),
                              "  delegate."
                              ),
                XmlDocs.Summary(
                    "  Creates a " + XmlDocs.See(DefaultNamespace, type) + " instance which",
                    "  holds a <typeparamref name=\"" + tp + "\" /> value."
                    ),
                XmlDocs.Returns(
                    "  A " + XmlDocs.See(DefaultNamespace, type) + " instance which holds a ",
                    "  holds a <typeparamref name=\"" + tp + "\" /> value."
                    ),
                XmlDocs.Remarks(
                    "  <para>",
                    "   When",
                    "   " + XmlDocs.See(DefaultNamespace, type, fold),
                    "   is invoked,",
                    "   the returned " + XmlDocs.See(DefaultNamespace, type) + " instance",
                    "   will invoke the " + idx + " delegate",
                    "   for conversions.",
                    "  </para>"
                    ),
                XmlDocs.ArgumentNullException("value")
                );
        }
Exemplo n.º 2
0
        CodeMemberMethod CreateCreator(CodeTypeDeclaration type, int w, int n)
        {
            var m = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Static,
                Name       = ((char)('A' + w)).ToString(),
                ReturnType = GetEitherType(n),
            };

            m.Parameters.Add(new CodeParameterDeclarationExpression(Types.GetTypeParameter(w, n), "value"));
            m.Statements.ThrowWhenArgumentIsNull("value");
            m.Statements.Add(
                new CodeMethodReturnStatement(
                    new CodeObjectCreateExpression(A(w) + "Handler",
                                                   new CodeVariableReferenceExpression("value"))));
            return(m);
        }
Exemplo n.º 3
0
        IEnumerable <string> GetFoldParametersDocs(CodeTypeDeclaration type, int n)
        {
            for (int i = 0; i < n; ++i)
            {
                var tp = Types.GetTypeParameter(i, n);
                yield return("<param name=\"" + a(i) + "\">");

                yield return("  A <see cref=\"T:System.Func{" + tp + ",TResult}\" /> ");

                yield return("  used if the " + XmlDocs.See(DefaultNamespace, type) + " stores a ");

                yield return("  <typeparamref name=\"" + tp + "\" /> value into a ");

                yield return("  <typeparamref name=\"TResult\" /> value.");

                yield return("</param>");
            }
        }
Exemplo n.º 4
0
        static CodeTypeDeclaration CreateHandler(int w, int n)
        {
            var h = new CodeTypeDeclaration(A(w) + "Handler")
            {
                TypeAttributes = TypeAttributes.NestedPrivate,
            };

            h.BaseTypes.Add(GetEitherType(n));
            h.Members.Add(new CodeMemberField(Types.GetTypeParameter(w, n), "_value")
            {
                Attributes = MemberAttributes.Final | MemberAttributes.Private,
            });
            var c = new CodeConstructor()
            {
                Attributes = MemberAttributes.Public,
            };

            c.Parameters.Add(new CodeParameterDeclarationExpression(Types.GetTypeParameter(w, n), "value"));
            c.Statements.Add(
                new CodeAssignStatement(
                    new CodeVariableReferenceExpression("_value"),
                    new CodeVariableReferenceExpression("value")));
            h.Members.Add(c);

            // public override int GetHashCode ();
            var m = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Override,
                Name       = "GetHashCode",
                ReturnType = new CodeTypeReference(typeof(int)),
            };

            m.Statements.Add(
                new CodeMethodReturnStatement(
                    new CodeMethodInvokeExpression(
                        new CodeVariableReferenceExpression("_value"),
                        "GetHashCode")));
            h.Members.Add(m);

            // public override bool Equals (object obj);
            m = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Override,
                Name       = "Equals",
                ReturnType = new CodeTypeReference(typeof(bool)),
            };
            m.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(object)), "obj"));
            m.Statements.Add(new CodeSnippetStatement(string.Format("                {0} o = obj as {0};", A(w) + "Handler")));
            m.Statements.Add(new CodeConditionStatement(
                                 new CodeBinaryOperatorExpression(
                                     new CodeVariableReferenceExpression("o"),
                                     CodeBinaryOperatorType.ValueEquality,
                                     new CodePrimitiveExpression(null)),
                                 new CodeMethodReturnStatement(new CodePrimitiveExpression(false))));
            m.Statements.Add(new CodeMethodReturnStatement(
                                 new CodeMethodInvokeExpression(
                                     new CodeMethodReferenceExpression(
                                         new CodeThisReferenceExpression(),
                                         "Equals"),
                                     new CodeVariableReferenceExpression("o"))));
            h.Members.Add(m);

            // public override bool Equals (Either<...> obj);
            m = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Override,
                Name       = "Equals",
                ReturnType = new CodeTypeReference(typeof(bool)),
            };
            m.Parameters.Add(new CodeParameterDeclarationExpression(GetEitherType(n), "obj"));
            m.Statements.Add(new CodeSnippetStatement(string.Format("                {0} o = obj as {0};", A(w) + "Handler")));
            m.Statements.Add(new CodeConditionStatement(
                                 new CodeBinaryOperatorExpression(
                                     new CodeVariableReferenceExpression("o"),
                                     CodeBinaryOperatorType.ValueEquality,
                                     new CodePrimitiveExpression(null)),
                                 new CodeMethodReturnStatement(new CodePrimitiveExpression(false))));
            m.Statements.Add(
                new CodeMethodReturnStatement(
                    new CodeMethodInvokeExpression(
                        new CodePropertyReferenceExpression(
                            new CodeTypeReferenceExpression(
                                new CodeTypeReference("System.Collections.Generic.EqualityComparer",
                                                      new CodeTypeReference(new CodeTypeParameter(Types.GetTypeParameter(w, n))))),
                            "Default"),
                        "Equals",
                        new CodeVariableReferenceExpression("this._value"), new CodeVariableReferenceExpression("o._value"))));
            h.Members.Add(m);

            // public override TResult Fold<TResult>(...);
            m = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Override,
                Name       = "Fold",
                ReturnType = new CodeTypeReference(new CodeTypeParameter("TResult")),
            };
            m.TypeParameters.Add(new CodeTypeParameter("TResult"));
            for (int i = 0; i < n; ++i)
            {
                m.Parameters.Add(
                    new CodeParameterDeclarationExpression(GetFoldParameterType(i, n), a(i)));
            }
            m.Statements.Add(
                new CodeMethodInvokeExpression(
                    new CodeMethodReferenceExpression(null, "CheckFolders"),
                    Enumerable.Range(0, n).Select(i => new CodeVariableReferenceExpression(a(i))).ToArray()));
            m.Statements.Add(
                new CodeMethodReturnStatement(
                    new CodeDelegateInvokeExpression(
                        new CodeVariableReferenceExpression(a(w)),
                        new CodeVariableReferenceExpression("_value"))));
            h.Members.Add(m);

            return(h);
        }
Exemplo n.º 5
0
 static CodeTypeReference GetFoldParameterType(int i, int n)
 {
     return(new CodeTypeReference("System.Func",
                                  new CodeTypeReference(Types.GetTypeParameter(i, n)),
                                  new CodeTypeReference(new CodeTypeParameter("TResult"))));
 }