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