Happy new year
[yazpp-moved-to-github.git] / src / gduqueue.cpp
1 /* This file is part of the yazpp toolkit.
2  * Copyright (C) 1998-2011 Index Data and Mike Taylor
3  * See the file LICENSE for details.
4  */
5
6 #include <yazpp/gdu.h>
7 #include <yazpp/gduqueue.h>
8
9 using namespace yazpp_1;
10
11 GDUQueue::GDUQueue()
12 {
13     m_list = 0;
14 }
15
16 int GDUQueue::size()
17 {
18     int no = 0;
19     GDUQueue_List *l;
20     for (l = m_list; l; l = l->m_next)
21         no++;
22     return no;
23 }
24
25 void GDUQueue::enqueue(GDU *gdu)
26 {
27     GDUQueue_List *l = new GDUQueue_List;
28     l->m_next = m_list;
29     l->m_item = gdu;
30     m_list = l;
31 }
32
33 GDU *GDUQueue::dequeue()
34 {
35     GDUQueue_List **l = &m_list;
36     if (!*l)
37         return 0;
38     while ((*l)->m_next)
39         l = &(*l)->m_next;
40     GDU *m = (*l)->m_item;
41     delete *l;
42     *l = 0;
43     return m;
44 }
45
46 void GDUQueue::clear()
47 {
48     GDU *g;
49     while ((g = dequeue()))
50         delete g;
51 }
52
53 GDUQueue::~GDUQueue()
54 {
55     clear();
56 }
57 /*
58  * Local variables:
59  * c-basic-offset: 4
60  * c-file-style: "Stroustrup"
61  * indent-tabs-mode: nil
62  * End:
63  * vim: shiftwidth=4 tabstop=8 expandtab
64  */
65