Spring – Rev 1

Subversion Repositories:
Rev:
using System.Collections.Generic;

namespace Spring.Utilities
{
    public static class Extensions
    {
#region Public Methods

        /// <summary>
        ///     Determines if the sequence a is contained within b.
        /// </summary>
        /// <typeparam name="T">an equatable type</typeparam>
        /// <param name="a">the first sequence</param>
        /// <param name="b">the second sequence</param>
        /// <returns>true if the first sequence is contained within the second sequence</returns>
        public static bool SequenceContains(this IEnumerable<dynamic> a, IEnumerable<dynamic> b)
        {
            using (var ea = a.GetEnumerator())
            {
                using (var eb = b.GetEnumerator())
                {
                    var aea = ea.MoveNext();
                    var aeb = eb.MoveNext();

                    while (aea && aeb)
                    {
                        var eac = ea.Current;
                        var ebc = eb.Current;

                        if (eac.Equals(ebc))
                        {
                            aea = ea.MoveNext();
                            aeb = eb.MoveNext();

                            continue;
                        }

                        aeb = eb.MoveNext();
                    }

                    return !aea;
                }
            }
        }

#endregion
    }
}