using System; using System.Collections.Generic; using System.Text; namespace AssetStudio { public static class IEnumerableYAMLExtensions { public static YAMLNode ExportYAML(this IEnumerable _this) { StringBuilder sb = new StringBuilder(); foreach (bool value in _this) { byte bvalue = unchecked((byte)(value ? 1 : 0)); sb.AppendHex(bvalue); } return new YAMLScalarNode(sb.ToString(), true); } public static YAMLNode ExportYAML(this IEnumerable _this) { StringBuilder sb = new StringBuilder(); foreach (char value in _this) { sb.AppendHex((ushort)value); } return new YAMLScalarNode(sb.ToString(), true); } public static YAMLNode ExportYAML(this IEnumerable _this) { StringBuilder sb = new StringBuilder(); foreach (byte value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } public static YAMLNode ExportYAML(this IEnumerable _this, bool isRaw) { if (isRaw) { StringBuilder sb = new StringBuilder(); foreach (ushort value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } else { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (ushort value in _this) { node.Add(value); } return node; } } public static YAMLNode ExportYAML(this IEnumerable _this, bool isRaw) { if (isRaw) { StringBuilder sb = new StringBuilder(); foreach (short value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } else { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (short value in _this) { node.Add(value); } return node; } } public static YAMLNode ExportYAML(this IEnumerable _this, bool isRaw) { if (isRaw) { StringBuilder sb = new StringBuilder(); foreach (uint value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } else { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (uint value in _this) { node.Add(value); } return node; } } public static YAMLNode ExportYAML(this IEnumerable _this, bool isRaw) { if (isRaw) { StringBuilder sb = new StringBuilder(); foreach (int value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } else { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (int value in _this) { node.Add(value); } return node; } } public static YAMLNode ExportYAML(this IEnumerable _this, bool isRaw) { if (isRaw) { StringBuilder sb = new StringBuilder(); foreach (ulong value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } else { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (ulong value in _this) { node.Add(value); } return node; } } public static YAMLNode ExportYAML(this IEnumerable _this, bool isRaw) { if (isRaw) { StringBuilder sb = new StringBuilder(); foreach (long value in _this) { sb.AppendHex(value); } return new YAMLScalarNode(sb.ToString(), true); } else { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (long value in _this) { node.Add(value); } return node; } } public static YAMLNode ExportYAML(this IEnumerable _this) { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (float value in _this) { node.Add(value); } return node; } public static YAMLNode ExportYAML(this IEnumerable _this) { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (double value in _this) { node.Add(value); } return node; } public static YAMLNode ExportYAML(this IEnumerable _this) { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (string value in _this) { node.Add(value); } return node; } public static YAMLNode ExportYAML(this IEnumerable> _this) { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (IEnumerable export in _this) { node.Add(export.ExportYAML()); } return node; } public static YAMLNode ExportYAML(this IEnumerable _this) where T : IYAMLExportable { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (T export in _this) { node.Add(export.ExportYAML()); } return node; } public static YAMLNode ExportYAML(this IEnumerable> _this) where T : IYAMLExportable { YAMLSequenceNode node = new YAMLSequenceNode(SequenceStyle.Block); foreach (IEnumerable export in _this) { node.Add(export.ExportYAML()); } return node; } public static YAMLNode ExportYAML(this IEnumerable> _this) where T : IYAMLExportable { YAMLSequenceNode node = new YAMLSequenceNode(); foreach (var kvp in _this) { YAMLMappingNode map = new YAMLMappingNode(); map.Add(kvp.Item1, kvp.Item2.ExportYAML()); node.Add(map); } return node; } public static YAMLNode ExportYAML(this IEnumerable> _this, Func converter) where T2 : IYAMLExportable { YAMLSequenceNode node = new YAMLSequenceNode(); foreach (var kvp in _this) { YAMLMappingNode map = new YAMLMappingNode(); map.Add(converter(kvp.Item1), kvp.Item2.ExportYAML()); node.Add(map); } return node; } public static YAMLNode ExportYAML(this IEnumerable> _this) where T : IYAMLExportable { YAMLSequenceNode node = new YAMLSequenceNode(); foreach (var kvp in _this) { YAMLMappingNode map = new YAMLMappingNode(); map.Add(kvp.Key, kvp.Value.ExportYAML()); node.Add(map); } return node; } } }