1 //Written in the D programming language 2 /* 3 * Simple queue. 4 * 5 * Copyright 2009-2016 Jaypha 6 * 7 * Distributed under the Boost Software License, Version 1.0. 8 * (See http://www.boost.org/LICENSE_1_0.txt) 9 * 10 * Authors: Jason den Dulk 11 */ 12 13 module jaypha.container.queue; 14 15 import std.array; 16 17 //---------------------------------------------------------------------------- 18 struct Queue(E) 19 //---------------------------------------------------------------------------- 20 { 21 alias Queue!E Q; 22 23 private: 24 25 E[] theQueue; 26 27 public: 28 29 void put(E e) 30 { 31 theQueue ~= e; 32 } 33 34 Q opOpAssign(string op)(E e) if (op == "~") 35 { 36 theQueue ~= e; 37 return this; 38 } 39 40 Q opOpAssign(string op)(E[] e) if (op == "~") 41 { 42 theQueue ~= e; 43 return this; 44 } 45 46 Q opOpAssign(string op)(Q q) if (op == "~") 47 { 48 theQueue ~= q.theQueue; 49 return this; 50 } 51 52 @property bool empty() { return theQueue.empty; } 53 @property ref E front() { return theQueue.front; } 54 void popFront() { theQueue.popFront(); } 55 } 56 57 //---------------------------------------------------------------------------- 58 59 unittest 60 { 61 Queue!long queue; 62 63 assert(queue.empty); 64 65 queue.put(4); 66 67 assert(!queue.empty); 68 assert(queue.front == 4); 69 70 queue.put(12); 71 72 assert(queue.front == 4); 73 74 queue.put(8); 75 76 assert(queue.front == 4); 77 78 queue.popFront(); 79 80 assert(queue.front == 12); 81 82 queue.put(1); 83 84 assert(queue.front == 12); 85 86 queue.popFront(); 87 88 assert(queue.front == 8); 89 90 queue.popFront(); 91 92 assert(queue.front == 1); 93 94 queue.popFront(); 95 96 assert(queue.empty); 97 98 queue.put(3); 99 assert(queue.theQueue == [3]); 100 queue ~= 4; 101 assert(queue.theQueue == [3,4]); 102 queue ~= [8,7]; 103 assert(queue.theQueue == [3,4,8,7]); 104 105 Queue!long queue2; 106 queue2 ~= [10,12]; 107 queue ~= queue2; 108 assert(queue.theQueue == [3,4,8,7,10,12]); 109 } 110 111 //----------------------------------------------------------------------------