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;
}
}
}