using ANX.Framework.NonXNA.Development; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ANX.Framework.Content.Pipeline.Tasks { [Serializable] public class ConfigurationCollection : IList { private List items = new List(); public int IndexOf(Configuration item) { return items.IndexOf(item); } public int IndexOf(string name, TargetPlatform platform) { for (int i = 0; i < Count; i++) { var currentPlatform = items[i].Platform; if (items[i].Name == name && currentPlatform == platform) return i; } return -1; } public void Insert(int index, Configuration item) { if (item == null) throw new ArgumentNullException("item"); if (this.Contains(item.Name, item.Platform)) throw new ArgumentException(string.Format("Duplicate entry for name \"{0}\" and platform \"{1}\"", item.Name, item.Platform)); items.Insert(index, item); } public void RemoveAt(int index) { items.RemoveAt(index); } public Configuration this[int index] { get { return items[index]; } set { if (value == null) throw new ArgumentNullException("value"); if (this.Contains(value.Name, value.Platform)) throw new ArgumentException(string.Format("Duplicate entry for name \"{0}\" and platform \"{1}\"", value.Name, value.Platform)); items[index] = value; } } public bool TryGetConfiguration(string name, TargetPlatform platform, out Configuration configuration) { int index = this.IndexOf(name, platform); if (index == -1) { configuration = null; return false; } else { configuration = items[index]; return true; } } public void Add(Configuration item) { if (item == null) throw new ArgumentNullException("item"); if (this.Contains(item.Name, item.Platform)) throw new ArgumentException(string.Format("Duplicate entry for name \"{0}\" and platform \"{1}\"", item.Name, item.Platform)); items.Add(item); } public void Clear() { items.Clear(); } public bool Contains(Configuration item) { return items.Contains(item); } public bool Contains(string name, TargetPlatform platform) { return this.IndexOf(name, platform) != -1; } public void CopyTo(Configuration[] array, int arrayIndex) { items.CopyTo(array, arrayIndex); } public int Count { get { return items.Count; } } public bool IsReadOnly { get { return false; } } public bool Remove(Configuration item) { return items.Remove(item); } public IEnumerator GetEnumerator() { return items.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return items.GetEnumerator(); } public string[] GetUniqueNames() { HashSet result = new HashSet(); items.ForEach((x) => result.Add(x.Name)); return result.ToArray(); } public TargetPlatform[] GetUniquePlatforms() { HashSet result = new HashSet(); items.ForEach((x) => result.Add(x.Platform)); return result.ToArray(); } } }