// Queue_EnQueue.cs public static partial class ExtensionMethods_Queue { //______________________________________________________________________ /// <summary> /// Enqueues a sequence of items of IEnumerable(T) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queue"></param> /// <param name="items">IEnumerable(T)</param> public static void Enqueue<T>(this Queue<T> queue, IEnumerable<T> items) { queue.Enqueue(items, false); } //______________________________________________________________________ /// <summary> /// Enqueues a sequence of items of IEnumerable(T) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queue"></param> /// <param name="items">IEnumerable(T)</param> /// <param name="reversed">reverse the sequence of IEnumerable(T) before Enqueue</param> public static void Enqueue<T>( this Queue<T> queue, IEnumerable<T> items, bool reversed ) { if (reversed) items = items.Reverse(); foreach (T item in items) queue.Enqueue(item); } //______________________________________________________________________ } // Queue_Reverse.cs public static partial class ExtensionMethods_Queue { //______________________________________________________________________ /// <summary> /// reverses the elements in place /// </summary> /// <param name="queue"></param> /// <returns>the same queue</returns> public static Queue<T> Reverse<T>(this Queue<T> queue) { // (1) copy contents to new array var contents = new T[queue.Count]; queue.CopyTo(contents, 0); // (2) Clear the queue queue.Clear(); // (3) enqueue the array queue.Enqueue(contents, true); return queue; } //______________________________________________________________________ }Stack
// Stack_push.cs public static partial class ExtensionMethods_Stack { //______________________________________________________________________ /// <summary> /// Pushes a sequence of items of IEnumerable(T) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="stack"></param> /// <param name="items">IEnumerable(T)</param> public static void Push<T>(this Stack<T> stack, IEnumerable<T> items) { stack.Push(items, false); } //______________________________________________________________________ /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="stack"></param> /// <param name="items">IEnumerable(T)</param> /// <param name="reversed">reverse the sequence of IEnumerable(T) before Enqueue</param> public static void Push<T>(this Stack<T> stack, IEnumerable<T> items, bool reversed) { if (reversed) items = items.Reverse(); foreach (T item in items) stack.Push(item); } //______________________________________________________________________ } // Stack_Reverse.cs public static partial class ExtensionMethods_Stack { //______________________________________________________________________ /// <summary> /// Reverses the stack /// </summary> /// <typeparam name="T"></typeparam> /// <param name="stack"></param> /// <returns>the stack</returns> public static Stack<T> Reverse<T>(this Stack<T> stack) { // Copy contents to array var contents = new T[stack.Count]; stack.CopyTo(contents, 0); // Clear the stack stack.Clear(); stack.Push(contents); return stack; } //______________________________________________________________________ }