renamed Set.h to ckset.h
[charm.git] / src / ck-ldb / ckset.C
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /**
9 ***  Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by
10 ***  The Board of Trustees of the University of Illinois.
11 ***  All rights reserved.
12 **/
13
14 /**
15  * \addtogroup CkLdb
16 */
17 /*@{*/
18
19 #include "ckset.h"
20 #include "elements.h"
21
22
23 Set::Set() 
24 {
25   head = (listNode *) 0;
26 }
27
28 Set::~Set()
29 {
30   int n;
31   listNode *p = head;
32   while (p){
33     listNode *cur = p;
34     p = p->next;
35     delete cur;
36   }
37 }
38
39 void Set::insert(InfoRecord *info) 
40 {
41   if (!find(info))
42   {
43     listNode *node = new listNode();
44     node->info = info;
45     node->next = head;
46     head = node;
47   }
48    
49 }
50
51
52 void Set::myRemove(listNode **n, InfoRecord *r)
53 {
54   if ((*n)->info == r)
55     *n = (*n)->next;
56   else 
57     myRemove(&((*n)->next), r);
58 }
59
60 void Set::remove(InfoRecord * r) 
61 {
62   listNode *p = head;
63   if (!head)
64     return;
65
66   listNode *q = head->next;
67
68   if (p->info == r){
69     head = head->next;
70     return;
71   }
72      
73   while (q){
74     if (q->info == r){
75       p->next = q->next;
76       delete q;
77       return;
78     }
79     else {
80       p = q;
81       q = q->next;
82     }
83   }
84 }
85
86 int Set::find(InfoRecord * r) 
87 {
88   listNode *p = head;
89   while (p) {
90     if (p->info == r) return 1;
91     else p = p->next;
92   }
93   return 0;
94 }
95
96 InfoRecord * Set::iterator(Iterator *iter)
97 {
98   if (head){
99     iter->next = head->next;
100     return head->info;
101   }
102   return 0;
103 }
104
105 InfoRecord * Set::next(Iterator *iter)
106 {
107   //  ckout << "set::next: " << iter->next << "\n";
108   if (!iter->next)
109     { return 0;
110     }
111   //  ckout << "set::next: iter->next->info=" << iter->next->info << "\n";
112   InfoRecord *temp = iter->next->info;
113   iter->next = iter->next->next;
114   return temp;
115 }
116
117
118 int Set::numElements()
119 {
120   int n;
121   n = 0;
122   listNode *p = head;
123   while (p){
124     n++;
125     p = p->next;
126   }
127   return n;
128 }
129
130 void Set::print() 
131 {
132   listNode *p = head;
133   while (p){
134     printf("%d ",p->info->Id);
135     p = p->next;
136   }
137 }
138
139
140 /*@}*/