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 //----------------------------------------------------------------------------