#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
}
}