//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.Collections;

namespace FrameworkLibraries
{
	public class QueueMain 
	{
		static void Main(string [] args)
		{
			Queue q = new Queue();
			lock(q.SyncRoot)
			{
				q.Enqueue("Pierwszy");
				q.Enqueue("Drugi");
				q.Enqueue("Trzeci");
				q.Enqueue("Czwarty");
				q.Enqueue("Piąty");
			}
			Console.WriteLine("Licznik: {0}", q.Count);
			lock(q.SyncRoot)
			{
				foreach(object o in q)
				{
					Console.WriteLine("{0} {1}", o, o.GetType());
				}
				object obj;
				obj = q.Dequeue();
				Console.WriteLine("{0} {1}", q.Count, obj);
				obj = q.Dequeue();
				Console.WriteLine("{0} {1}", q.Count, obj);
				obj = q.Dequeue();
				Console.WriteLine("{0} {1}", q.Count, obj);
				obj = q.Dequeue();
				Console.WriteLine("{0} {1}", q.Count, obj);
				obj = q.Dequeue();
				Console.WriteLine("{0} {1}", q.Count, obj);
			}
		}
	}
}