using System; using Cobilas.Collections; namespace Cobilas.IO.Atlf.Text { /// Represents a collection of ATLF encoding and decoding. public static class EncodingsCollection { private static readonly ATLFEncoding[] encodings = Array.Empty(); private static readonly ATLFDecoding[] decodings = Array.Empty(); static EncodingsCollection() { foreach(Type item in TypeUtilitarian.GetTypes()) { if (item == typeof(NullATLFDecoding) || item == typeof(NullATLFEncoding)) continue; if (item.IsSubclassOf(typeof(ATLFEncoding)) && item != typeof(ATLFEncoding)) ArrayManipulation.Add((ATLFEncoding)item.Activator(), ref encodings); else if (item.IsSubclassOf(typeof(ATLFDecoding)) && item != typeof(ATLFDecoding)) ArrayManipulation.Add((ATLFDecoding)item.Activator(), ref decodings); } } /// Checks whether a given version of the ATLF encoder exists. public static bool ContainsEncoding(string version) { foreach (var item in encodings) if (item.Version == version) return true; return false; } /// Checks whether a certain version of the ATLF decoder exists. public static bool ContainsDecoding(string version) { foreach (var item in decodings) if (item.Version == version) return true; return false; } /// Gets a list of ATLF encoder versions. public static string[] GetEncodingVersionList() { string[] stg = new string[ArrayManipulation.ArrayLength(encodings)]; for (int I = 0; I < stg.Length; I++) stg[I] = encodings[I].Version; return stg; } /// Gets a list of ATLF decoder versions. public static string[] GetDecodingVersionList() { string[] stg = new string[ArrayManipulation.ArrayLength(decodings)]; for (int I = 0; I < stg.Length; I++) stg[I] = decodings[I].Version; return stg; } /// Gets a specific version of the ATLF encoder. public static ATLFEncoding GetEncoding(string version) { foreach (var item in encodings) if (item.Version == version) return item; return ATLFEncoding.Null; } /// Gets a specific version of the ATLF decoder. public static ATLFDecoding GetDecoding(string version) { foreach (var item in decodings) if (item.Version == version) return item; return ATLFDecoding.Null; } } }