fna-workbench

fna-workbench Git Source Tree


Root/src/CurveKeyCollection.cs

#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
{
    /// <summary>
    /// The collection of the <see cref="CurveKey"/> elements and a part of the <see cref="Curve"/> class.
    /// </summary>
    public class CurveKeyCollection : ICollection<CurveKey>, IEnumerable<CurveKey>, IEnumerable
    {
        #region Public Properties
 
        /// <summary>
        /// Returns the count of keys in this collection.
        /// </summary>
        public int Count
        {
            get
            {
                return innerlist.Count;
            }
        }
 
        /// <summary>
        /// Returns false because it is not a read-only collection.
        /// </summary>
        public bool IsReadOnly
        {
            get
            {
                return this.isReadOnly;
            }
        }
 
        /// <summary>
        /// Indexer.
        /// </summary>
        /// <param name="index">The index of key in this collection.</param>
        /// <returns><see cref="CurveKey"/> at <paramref name="index"/> position.</returns>
        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<CurveKey> innerlist;
 
        #endregion
 
        #region Public Constructors
 
        /// <summary>
        /// Creates a new instance of <see cref="CurveKeyCollection"/> class.
        /// </summary>
        public CurveKeyCollection()
        {
            innerlist = new List<CurveKey>();
        }
 
        #endregion
 
        #region Public Methods
 
        /// <summary>
        /// Adds a key to this collection.
        /// </summary>
        /// <param name="item">New key for the collection.</param>
        /// <exception cref="ArgumentNullException">Throws if <paramref name="item"/> is null.</exception>
        /// <remarks>The new key would be added respectively to a position of that key and the position of other keys.</remarks>
        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);
        }
 
        /// <summary>
        /// Removes all keys from this collection.
        /// </summary>
        public void Clear()
        {
            innerlist.Clear();
        }
 
        /// <summary>
        /// Creates a copy of this collection.
        /// </summary>
        /// <returns>A copy of this collection.</returns>
        public CurveKeyCollection Clone()
        {
            CurveKeyCollection ckc = new CurveKeyCollection();
            foreach (CurveKey key in this.innerlist)
            {
                ckc.Add(key);
            }
            return ckc;
        }
 
        /// <summary>
        /// Determines whether this collection contains a specific key.
        /// </summary>
        /// <param name="item">The key to locate in this collection.</param>
        /// <returns><c>true</c> if the key is found; <c>false</c> otherwise.</returns>
        public bool Contains(CurveKey item)
        {
            return innerlist.Contains(item);
        }
 
        /// <summary>
        /// Copies the keys of this collection to an array, starting at the array index provided.
        /// </summary>
        /// <param name="array">Destination array where elements will be copied.</param>
        /// <param name="arrayIndex">The zero-based index in the array to start copying from.</param>
        public void CopyTo(CurveKey[] array, int arrayIndex)
        {
            innerlist.CopyTo(array, arrayIndex);
        }
 
        /// <summary>
        /// Returns an enumerator that iterates through the collection.
        /// </summary>
        /// <returns>An enumerator for the <see cref="CurveKeyCollection"/>.</returns>
        public IEnumerator<CurveKey> GetEnumerator()
        {
            return innerlist.GetEnumerator();
        }
 
        /// <summary>
        /// Finds element in the collection and returns its index.
        /// </summary>
        /// <param name="item">Element for the search.</param>
        /// <returns>Index of the element; or -1 if item is not found.</returns>
        public int IndexOf(CurveKey item)
        {
            return innerlist.IndexOf(item);
        }
 
        /// <summary>
        /// Removes specific element.
        /// </summary>
        /// <param name="item">The element</param>
        /// <returns><c>true</c> if item is successfully removed; <c>false</c> otherwise. This method also returns <c>false</c> if item was not found.</returns>
        public bool Remove(CurveKey item)
        {
            return innerlist.Remove(item);
        }
 
        /// <summary>
        /// Removes element at the specified index.
        /// </summary>
        /// <param name="index">The index which element will be removed.</param>
        public void RemoveAt(int index)
        {
            innerlist.RemoveAt(index);
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return innerlist.GetEnumerator();
        }
 
        #endregion
    }
}

Archive Download this file

Branches

Number of commits:
Page rendered in 0.08976s using 11 queries.