public static IColumnWriter TryGetColumnWriter(IStreamProvider streamProvider, Type columnType, string columnPath) { IColumnWriter writer = null; // Build a direct writer for the column type, if available ITypeProvider columnTypeProvider = TryGet(columnType); if (columnTypeProvider != null) { writer = columnTypeProvider.BinaryWriter(streamProvider, columnPath); } // If the column type doesn't have a provider or writer, convert to String8 and write that if (writer == null) { Func <XArray, XArray> converter = TypeConverterFactory.GetConverter(columnType, typeof(String8)); if (converter == null) { return(null); } writer = TypeProviderFactory.TryGet(typeof(String8)).BinaryWriter(streamProvider, columnPath); writer = new ConvertingWriter(writer, converter); } // Wrap with a NullableWriter to handle null persistence writer = new NullableWriter(streamProvider, columnPath, writer); // Wrap with an EnumWriter to write as an EnumColumn while possible. // Try for *all types* [even bool, byte, ushort] because Enum columns can roll nulls into the column itself and accelerate groupBy writer = new EnumWriter(streamProvider, columnPath, columnType, writer); return(writer); }
public void EnumWriter() { EnumTemplate template = new EnumTemplate((NamespaceTemplate)null, "test"); template.Values.Add(new EnumValueTemplate("value", Code.Number(0))); EnumWriter writer = new EnumWriter(); writer.Write(template, this.output); Assert.AreEqual("public enum test\r\n{\r\n value = 0\r\n}", this.output.ToString()); }
public void GetOrAddEnum(DataNode node) { var className = node.Name; EnumWriter result; if (EnumWriters.TryGetValue(className, out result)) { return; } result = new EnumWriter(node); EnumWriters[className] = result; return; }
public string Generate() { var b = new CodeWriter(); // 自動生成されたと宣言する b.WriteLine("// <auto-generated/>"); // Nullableを有効化する b.WriteLine("#nullable enable"); b.WriteLine(); // namespaceの宣言を行う。 { b.WriteLine($"namespace {_rootDefinition.CSharpNamespace}"); b.WriteLine("{"); using (b.Indent()) { var accessLevel = this.GetAccessLevel(); var enumWriter = new EnumWriter(); foreach (var enumDefinition in _rootDefinition.Enums) { enumWriter.Write(b, enumDefinition, accessLevel); } var objectWriter = new ObjectWriter(_rootDefinition, _externalDefinitions); foreach (var objectDefinition in _rootDefinition.Objects) { objectWriter.Write(b, objectDefinition, accessLevel); } var serviceWriter = new ServiceWriter(_rootDefinition, _externalDefinitions); foreach (var serviceDefinition in _rootDefinition.Services) { serviceWriter.Write(b, serviceDefinition, accessLevel); } } b.WriteLine("}"); } return(b.ToString()); }
public void WriteEnum(EnumWriter node, List <string> lines) { node.WriteToFile(lines); }
public static string Generate(RocketPackDefinition definition, IEnumerable <RocketPackDefinition> externalDefinitions) { var w = new CodeWriter(); // usingの宣言を行う。 { var hashSet = new HashSet <string>(); // ロードされた*.rpfファイルの名前空間をusingする hashSet.UnionWith(externalDefinitions.SelectMany(n => n.Options.Where(m => m.Name == "csharp_namespace").Select(m => m.Value.Trim()))); var sortedList = hashSet.ToList(); sortedList.Sort(); foreach (var name in sortedList) { w.WriteLine($"using {name};"); } } w.WriteLine(); w.WriteLine("#nullable enable"); w.WriteLine(); // namespaceの宣言を行う。 { var option = definition.Options.First(n => n.Name == "csharp_namespace"); w.WriteLine($"namespace {option.Value}"); } w.WriteLine("{"); w.PushIndent(); var enumWriter = new EnumWriter(definition); var classWriter = new ClassWriter(definition, externalDefinitions); var structWriter = new StructWriter(definition, externalDefinitions); foreach (var enumInfo in definition.Enums) { // Enum enumWriter.Write(w, enumInfo); w.WriteLine(); } foreach (var messageInfo in definition.Messages) { if (messageInfo.FormatType == MessageFormatType.Medium) { // Class classWriter.Write(w, messageInfo); } else if (messageInfo.FormatType == MessageFormatType.Small) { // Struct structWriter.Write(w, messageInfo); } w.WriteLine(); } w.PopIndent(); w.WriteLine("}"); return(w.ToString()); }