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