#region Copyright & License Information /* * Copyright 2007-2010 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see LICENSE. */ #endregion using System; using System.Collections; using System.Collections.Generic; 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; } } } }