]> git.vomp.tv Git - vompclient.git/blob - queue.cc
Corruption fixes
[vompclient.git] / queue.cc
1 /*
2     Copyright 2004-2005 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #include "queue.h"
22
23 // ------ Constructor add delete get methods -------------------------------------
24
25 Queue::Queue(void)
26 {
27   start = NULL;
28   end = NULL;
29 }
30
31 Queue::~Queue()
32 {
33   while(!isEmpty()) retrieve();
34 }
35
36 void Queue::store(void *newData)
37 {
38   Node *temp = new Node(newData, NULL);
39   if (temp == NULL)
40   {
41     // oh dear.
42   }
43   if (start == NULL) // add to empty queue
44   {
45     start = temp;
46     end = temp;
47   }
48   else // add to non-empty queue
49   {
50     end->setPtr(temp);
51     end = temp;
52   }
53 }
54
55 void *Queue::retrieve(void)
56 {
57   if (start == NULL) { return NULL; } // there was an exit EXIT here bug?!!?!?
58   if (start == end) // then we are removing the last node so set end to 0
59   {
60     end = NULL;
61   }
62   void *toReturn = start->getData();
63   Node *next = start->getPtr();
64   delete start;
65   start = next;
66   return toReturn;
67 }
68
69 void *Queue::peekNext(void)
70 {
71   return start->getData();
72 }
73
74 // ------ Boolean methods -----------------------------------------------------
75
76 short Queue::isEmpty(void) const
77 {
78   return (start == NULL);
79 }