using System; using System.Collections.Generic; using System.Collections; namespace OpenRa.FileFormats { public class Cache : IEnumerable> { Dictionary hax = new Dictionary(); Func loader; public Cache(Func loader) { if (loader == null) throw new ArgumentNullException(); this.loader = loader; } public U this[T key] { get { U result; if (!hax.TryGetValue(key, out result)) hax.Add(key, result = loader(key)); return result; } } public IEnumerator> GetEnumerator() { return hax.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public IEnumerable Keys { get { return hax.Keys; } } public IEnumerable Values { get { return hax.Values; } } } }