using System.Collections; using System.Collections.Generic; namespace OpenVIII { public sealed class StringFile : IReadOnlyDictionary> { #region Fields public Dictionary> SPositions { get; } public List SubPositions { get; } #endregion Fields #region Constructors public StringFile(int count = 0) { SPositions = new Dictionary>(count); SubPositions = new List(count); } public FF8StringReference this[int i, int j] { get { if (SPositions != null && SPositions.TryGetValue(i, out var listOfStrings) && listOfStrings.Count > j) return SPositions[i][j]; return null; } } public bool ContainsKey(int key) { return SPositions.ContainsKey(key); } public bool TryGetValue(int key, out List value) { return SPositions.TryGetValue(key, out value); } List IReadOnlyDictionary>.this[int key] => SPositions[key]; public IEnumerable Keys => ((IReadOnlyDictionary>) SPositions).Keys; public IEnumerable> Values => ((IReadOnlyDictionary>) SPositions).Values; public Loc this[int i] => SubPositions[i]; #endregion Constructors public IEnumerator>> GetEnumerator() { return SPositions.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable) SPositions).GetEnumerator(); } public int Count => SPositions.Count; } }