Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- namespace CodeGenerator.Vapor.Core
- {
- sealed class LambdaPin : ICodeGenerator
- {
- public string OutputPath
- {
- get { return "Core/Lambda-Pin.cs"; }
- }
- public void WriteTo(TextWriter file)
- {
- file.WriteLine("// Generated by \"CodeGenerator/Vapor.Core/Lambda-Pin.cs\"");
- file.WriteLine("// DO NOT MAKE CHANGES TO THIS FILE, AS THEY WILL BE DISCARDED!");
- file.WriteLine("using System;");
- file.WriteLine();
- file.WriteLine("namespace Vapor");
- file.WriteLine("{");
- file.WriteLine("\tpublic static partial class Lambda");
- file.WriteLine("\t{");
- for (int i = 1; i <= 16; ++i)
- {
- if (i == 5)
- file.WriteLine("\t\t#if !COMPACT_FRAMEWORK");
- file.WriteLine(MakePinAction(i));
- file.WriteLine(MakePinFunc(i));
- }
- file.WriteLine("\t\t#endif//!COMPACT_FRAMEWORK");
- file.WriteLine("\t}");
- file.WriteLine("}");
- }
- private static string MakePinAction(int args)
- {
- var builder = new StringBuilder();
- builder.Append("\t\tpublic static Action Pin<");
- for (int i = 0; i < args; ++i)
- builder.AppendFormat("T{0}, ", i);
- builder.Remove(builder.Length - 2, 2);
- builder.AppendLine(">");
- builder.AppendLine("\t\t\t(");
- builder.Append("\t\t\t\tthis Action<");
- for (int i = 0; i < args; ++i)
- builder.AppendFormat("T{0}, ", i);
- builder.Remove(builder.Length - 2, 2);
- builder.AppendLine("> action,");
- for (int i = 0; i < args - 1; ++i)
- builder.AppendFormat("\t\t\t\tT{0} arg{0},\r\n", i);
- builder.AppendFormat("\t\t\t\tT{0} arg{0}\r\n", args - 1);
- builder.AppendLine("\t\t\t)");
- builder.AppendLine("\t\t{");
- builder.AppendFormat("\t\t\treturn () => action(");
- for (int i = 0; i < args; ++i)
- builder.AppendFormat("arg{0}, ", i);
- builder.Remove(builder.Length - 2, 2);
- builder.AppendLine(");");
- builder.AppendLine("\t\t}");
- return builder.ToString();
- }
- private static string MakePinFunc(int args)
- {
- Func<string, string, string> genString = (format, seperator) =>
- {
- return Generate.SeperateString(
- Generate.Sequence(args),
- format,
- seperator);
- };
- var builder = new StringBuilder();
- builder.Append("\t\tpublic static Func<TResult> Pin<");
- builder.Append(genString("T{0}", ", "));
- builder.AppendLine(", TResult>");
- builder.AppendLine("\t\t\t(");
- builder.Append("\t\t\t\tthis Func<");
- builder.Append(genString("T{0}", ", "));
- builder.AppendLine(", TResult> func,");
- builder.AppendLine(genString("\t\t\t\tT{0} arg{0}", ",\r\n"));
- builder.AppendLine("\t\t\t)");
- builder.AppendLine("\t\t{");
- builder.AppendFormat("\t\t\treturn () => func(");
- builder.Append(genString("arg{0}", ", "));
- builder.AppendLine(");");
- builder.AppendLine("\t\t}");
- return builder.ToString();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement