Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
 public void WriteEnum(EnumWriter node, List <string> lines)
 {
     node.WriteToFile(lines);
 }
Exemplo n.º 6
0
        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());
        }