Reverting back sh to ksh for test executor
[csql.git] / include / Util.h
bloba0f1b96087aaee80425103a47996d8e69885aa55
1 /***************************************************************************
2 * Copyright (C) 2007 by Prabakaran Thirumalai *
3 * praba_tuty@yahoo.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 ***************************************************************************/
16 #ifndef UTIL_H
17 #define UTIL_H
18 #include<ErrorType.h>
19 #include<Debug.h>
20 class ListNode
22 public:
23 void *element;
24 ListNode *next;
28 class ListIterator
30 ListNode *iter;
31 ListNode *start;
32 ListIterator();
33 public:
35 ListIterator(ListNode *head) { iter = head; start = head; }
37 bool hasElement()
39 if (iter == NULL) return false; else return true;
42 void reset()
44 iter = start;
46 //isRemove ->the node needs to deleted after returning
47 void* nextElement(bool isRemove = false)
49 if (iter == NULL) return NULL;
50 ListNode *node = iter;
51 iter = iter ->next;
52 return node->element;
56 class Identifier
58 public:
59 char name[IDENTIFIER_LENGTH];
62 class List
64 ListNode *head;
65 public:
66 List() { head = NULL;}
68 DbRetVal append(void *elem)
70 ListNode *newNode = new ListNode();
71 newNode->element = elem;
72 newNode->next = NULL;
73 //If this is the first node, set it as head
74 if (NULL == head) { head = newNode; return OK; }
76 ListNode *iter = head;
77 while (NULL != iter->next) iter = iter->next;
78 iter->next = newNode;
79 return OK;
81 //Warning:Try to avoid using this method while using the iterator.The behavior
82 //is undefined. Instead set flag isRemove to yes and call nextElement of iterator.
83 DbRetVal remove(void *elem)
85 if (NULL == head)
87 printError(ErrNotExists, "There are no elements in the list. Empty list");
88 return ErrNotExists;
90 ListNode *iter = head, *prev = head;
91 while (iter->next != NULL)
93 if (elem == iter->element)
95 prev->next = iter->next;
96 delete iter;
98 prev = iter;
99 iter = iter->next;
101 if( iter == head) // there is only one node in the list
103 if (elem == iter->element)
105 delete head;
106 head = NULL;
107 return OK;
111 if( prev == head) // there are only two node in the list
113 if (elem == iter->element)
115 head->next = NULL;
116 delete iter;
117 return OK;
120 printError(ErrNotFound, "There are no elements in the list");
121 return ErrNotFound;
124 ListIterator getIterator()
126 ListIterator iter(head);
127 return iter;
129 void reset()
131 if (NULL == head) return;
132 ListNode *iter = head, *prevIter = head;
133 while (iter->next != NULL)
135 prevIter = iter;
136 iter = iter->next;
137 delete prevIter;
140 delete iter;
141 head = NULL;
142 return;
144 int size()
146 int count =1;
147 if (NULL == head) return 0;
148 ListNode *iter = head;
149 while (iter->next != NULL)
151 count++;
152 iter = iter->next;
154 return count;
158 #endif