#region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2016 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ /* Derived from code by the Mono.Xna Team (Copyright 2006). * Released under the MIT License. See monoxna.LICENSE for details. */ #endregion #region Using Statements using System; using System.Collections; using System.Collections.Generic; #endregion namespace Microsoft.Xna.Framework { /// /// The collection of the elements and a part of the class. /// public class CurveKeyCollection : ICollection, IEnumerable, IEnumerable { #region Public Properties /// /// Returns the count of keys in this collection. /// public int Count { get { return innerlist.Count; } } /// /// Returns false because it is not a read-only collection. /// public bool IsReadOnly { get { return this.isReadOnly; } } /// /// Indexer. /// /// The index of key in this collection. /// at position. public CurveKey this[int index] { get { return innerlist[index]; } set { if (value == null) { throw new ArgumentNullException("value"); } if (index >= innerlist.Count) { throw new IndexOutOfRangeException(); } if (MathHelper.WithinEpsilon(innerlist[index].Position, value.Position)) { innerlist[index] = value; } else { innerlist.RemoveAt(index); innerlist.Add(value); } } } #endregion #region Private Fields private bool isReadOnly = false; private List innerlist; #endregion #region Public Constructors /// /// Creates a new instance of class. /// public CurveKeyCollection() { innerlist = new List(); } #endregion #region Public Methods /// /// Adds a key to this collection. /// /// New key for the collection. /// Throws if is null. /// The new key would be added respectively to a position of that key and the position of other keys. public void Add(CurveKey item) { if (item == null) { throw new ArgumentNullException("item"); } if (innerlist.Count == 0) { this.innerlist.Add(item); return; } for (int i = 0; i < this.innerlist.Count; i += 1) { if (item.Position < this.innerlist[i].Position) { this.innerlist.Insert(i, item); return; } } this.innerlist.Add(item); } /// /// Removes all keys from this collection. /// public void Clear() { innerlist.Clear(); } /// /// Creates a copy of this collection. /// /// A copy of this collection. public CurveKeyCollection Clone() { CurveKeyCollection ckc = new CurveKeyCollection(); foreach (CurveKey key in this.innerlist) { ckc.Add(key); } return ckc; } /// /// Determines whether this collection contains a specific key. /// /// The key to locate in this collection. /// true if the key is found; false otherwise. public bool Contains(CurveKey item) { return innerlist.Contains(item); } /// /// Copies the keys of this collection to an array, starting at the array index provided. /// /// Destination array where elements will be copied. /// The zero-based index in the array to start copying from. public void CopyTo(CurveKey[] array, int arrayIndex) { innerlist.CopyTo(array, arrayIndex); } /// /// Returns an enumerator that iterates through the collection. /// /// An enumerator for the . public IEnumerator GetEnumerator() { return innerlist.GetEnumerator(); } /// /// Finds element in the collection and returns its index. /// /// Element for the search. /// Index of the element; or -1 if item is not found. public int IndexOf(CurveKey item) { return innerlist.IndexOf(item); } /// /// Removes specific element. /// /// The element /// true if item is successfully removed; false otherwise. This method also returns false if item was not found. public bool Remove(CurveKey item) { return innerlist.Remove(item); } /// /// Removes element at the specified index. /// /// The index which element will be removed. public void RemoveAt(int index) { innerlist.RemoveAt(index); } IEnumerator IEnumerable.GetEnumerator() { return innerlist.GetEnumerator(); } #endregion } }