Stringfile.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. namespace OpenVIII
  4. {
  5. public sealed class StringFile : IReadOnlyDictionary<int, List<FF8StringReference>>
  6. {
  7. #region Fields
  8. public Dictionary<int, List<FF8StringReference>> SPositions { get; }
  9. public List<Loc> SubPositions { get; }
  10. #endregion Fields
  11. #region Constructors
  12. public StringFile(int count = 0)
  13. {
  14. SPositions = new Dictionary<int, List<FF8StringReference>>(count);
  15. SubPositions = new List<Loc>(count);
  16. }
  17. public FF8StringReference this[int i, int j]
  18. {
  19. get
  20. {
  21. if (SPositions != null && SPositions.TryGetValue(i, out var listOfStrings) && listOfStrings.Count > j)
  22. return SPositions[i][j];
  23. return null;
  24. }
  25. }
  26. public bool ContainsKey(int key)
  27. {
  28. return SPositions.ContainsKey(key);
  29. }
  30. public bool TryGetValue(int key, out List<FF8StringReference> value)
  31. {
  32. return SPositions.TryGetValue(key, out value);
  33. }
  34. List<FF8StringReference> IReadOnlyDictionary<int, List<FF8StringReference>>.this[int key] => SPositions[key];
  35. public IEnumerable<int> Keys => ((IReadOnlyDictionary<int, List<FF8StringReference>>) SPositions).Keys;
  36. public IEnumerable<List<FF8StringReference>> Values => ((IReadOnlyDictionary<int, List<FF8StringReference>>) SPositions).Values;
  37. public Loc this[int i] => SubPositions[i];
  38. #endregion Constructors
  39. public IEnumerator<KeyValuePair<int, List<FF8StringReference>>> GetEnumerator()
  40. {
  41. return SPositions.GetEnumerator();
  42. }
  43. IEnumerator IEnumerable.GetEnumerator()
  44. {
  45. return ((IEnumerable) SPositions).GetEnumerator();
  46. }
  47. public int Count => SPositions.Count;
  48. }
  49. }