예제 #1
0
        void AddCreatorDocs(CodeTypeDeclaration type, CodeMemberMethod method, int w, int n)
        {
            var tp   = Types.GetTypeParameter(n, w);
            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")
                );
        }
예제 #2
0
        CodeTypeDeclaration CreateTupleType(int n)
        {
            var tuple = new CodeTypeDeclaration("Tuple")
            {
                TypeAttributes = TypeAttributes.Public,
                IsPartial      = true,
            };

            AddConditionalCompilationDirective(tuple, "!NET_4_0");
            for (int i = 0; i < n; ++i)
            {
                tuple.TypeParameters.Add(Types.GetTypeParameter(n, i));
                tuple.Members.Add(new CodeMemberField(Types.GetTypeParameter(n, i), Tuple.item(n, i)));
                var p = new CodeMemberProperty()
                {
                    Attributes = MemberAttributes.Public | MemberAttributes.Final,
                    Name       = Tuple.Item(n, i),
                    HasGet     = true,
                    HasSet     = false,
                    Type       = new CodeTypeReference(Types.GetTypeParameter(n, i)),
                };
                p.GetStatements.Add(
                    new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), Tuple.item(n, i))));
                p.Comments.AddDocs(
                    XmlDocs.Summary(string.Format("The {0} tuple value.", XmlDocs.GetIndex(i))),
                    XmlDocs.Value("A <typeparamref name=\"" + Types.GetTypeParameter(n, i) + "\" /> which is the " +
                                  XmlDocs.GetIndex(i) + " tuple value."),
                    XmlDocs.Remarks(string.Format("The {0} tuple value.", XmlDocs.GetIndex(i))));
                tuple.Members.Add(p);
            }
            var c = new CodeConstructor()
            {
                Attributes = MemberAttributes.Public,
            };

            for (int i = 0; i < n; ++i)
            {
                c.Parameters.Add(new CodeParameterDeclarationExpression(Types.GetTypeParameter(n, i), Tuple.item(n, i)));
                c.Statements.Add(new CodeAssignStatement(
                                     new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), Tuple.item(n, i)),
                                     new CodeVariableReferenceExpression(Tuple.item(n, i))));
            }
            tuple.Members.Add(c);
            c.Comments.AddDocs(
                XmlDocs.Summary("Constructs and initializes a new " + XmlDocs.See(DefaultNamespace, tuple) + " instance."),
                Enumerable.Range(0, n).Select(p => XmlDocs.Param(Tuple.item(n, p),
                                                                 "A <typeparamref name=\"" + Types.GetTypeParameter(n, p) + "\"/> which is used to initialize the " +
                                                                 XmlDocs.See(DefaultNamespace, tuple, tuple.Members.OfType <CodeMemberProperty>().First(v => v.Name == Tuple.Item(n, p))) +
                                                                 " property.")),
                XmlDocs.Remarks(
                    "<para>",
                    "  Constructs and initializes a new " + XmlDocs.See(DefaultNamespace, tuple) + " instance.",
                    "</para>"));
            tuple.Members.Add(CreateTupleEqualsMethod(n, tuple));
            tuple.Members.Add(CreateTupleGetHashCodeMethod(n));
            tuple.Members.Add(CreateTupleToStringMethod(n, tuple));
            tuple.Comments.AddDocs(
                XmlDocs.TypeParams(tuple.TypeParameters),
                XmlDocs.Summary("A strongly-typed sequence of " + n + " variously typed values."),
                XmlDocs.Remarks(
                    "<para>",
                    " A <c>Tuple</c> is an immutable, strongly typed sequence of variously",
                    " typed values with each value lacking an otherwise meaningful name aside",
                    " from its position.",
                    "</para>"));
            return(tuple);
        }
예제 #3
0
        CodeMemberMethod CreateCreateMethod(int n)
        {
            var retType = new CodeTypeReference("Cadenza.Tuple", Types.GetTypeParameterReferences(n, false).ToArray());
            var m       = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Static,
                Name       = "Create",
                ReturnType = retType,
            };

            for (int i = 0; i < n; ++i)
            {
                m.TypeParameters.Add(Types.GetTypeParameter(n, i));
            }
            for (int i = 0; i < n; ++i)
            {
                m.Parameters.Add(
                    new CodeParameterDeclarationExpression(
                        new CodeTypeReference(Types.GetTypeParameter(n, i)), Tuple.item(n, i)));
            }
            m.Statements.Add(
                new CodeMethodReturnStatement(
                    new CodeObjectCreateExpression(
                        new CodeTypeReference("Cadenza.Tuple", Types.GetTypeParameterReferences(n, false).ToArray()),
                        Enumerable.Range(0, n).Select(p => new CodeVariableReferenceExpression(Tuple.item(n, p))).ToArray())));
            var tcref = "Cadenza.Tuple{" + Types.GetTypeParameterList(n) + "}";

            m.Comments.AddDocs(
                Enumerable.Range(0, n).Select(p => XmlDocs.TypeParam(Types.GetTypeParameter(n, p),
                                                                     string.Format("The {0} <see cref=\"T:{1}\" /> value type.", XmlDocs.GetIndex(p), tcref))),
                XmlDocs.Summary("Creates a <see cref=\"" + tcref + "\" />."),
                Enumerable.Range(0, n).Select(p => XmlDocs.Param(Tuple.item(n, p),
                                                                 string.Format("The {0} <see cref=\"T:{1}\" /> value.", XmlDocs.GetIndex(p), tcref))),
                XmlDocs.Returns(
                    "A <see cref=\"T:" + tcref + "\" /> initialized with the parameter values."),
                "<seealso cref=\"C:" + tcref + "(" +
                string.Join(",", Enumerable.Range(0, n)
                            .Select(p => "`" + p.ToString()).ToArray()) + ")\" />");
            return(m);
        }
예제 #4
0
파일: Delegates.cs 프로젝트: rikkus/cadenza
 static IEnumerable GetTimingsParameters(int n)
 {
     return(Enumerable.Range(0, n).Select(p =>
                                          XmlDocs.Param(Value(n, p), "The " + XmlDocs.GetIndex(Value(n, p)) + " <paramref name=\"self\"/> parameter value.")));
 }