Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Stack has a reverse method - which does not seem to work
Message
De
25/07/2009 08:25:47
 
 
À
23/06/2009 10:14:17
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Versions des environnements
Environment:
C# 3.0
Divers
Thread ID:
01407785
Message ID:
01414450
Vues:
37
I have created a couple of extension methods that can reverse a Queue or a Stack

Queue
// 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;
		}
		//______________________________________________________________________
	}
Gregory
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform