Preconfigure admin as TM for mamer in the distribution
[capablanca.git] / lasker-2.2.3 / bots / mamer / link.cc
1 //--------------------------------------------------------------------------
2 // link.cc - Source file for the link list classes
3 //
4 // Matthew E. Moses
5 //
6 // $Revision: 1.5 $
7 // $Date: 1998/09/10 19:57:17 $
8 //
9 // $Author: mlong $
10 // $Locker:  $
11 //
12 // $Log: link.cc,v $
13 // Revision 1.5  1998/09/10 19:57:17  mlong
14 // lots of little bug fixes and a few new features
15 //
16 // Revision 1.4  1998/06/04 19:55:00  mlong
17 // changed this?
18 //
19 // Revision 1.3  1998/04/18 18:46:04  mlong
20 // fixed delete bug &
21 // added delete tourney function
22 //
23 // Revision 1.2  1998/04/15 16:56:17  mlong
24 // *** empty log message ***
25 //
26 // Revision 1.1  1998/03/16 18:09:27  moses
27 // Initial revision
28 //
29 // Revision 1.2  1998/03/16 19:47:54  chess
30 // cfi *.h
31 //
32 // Revision 1.1  1998/03/14 03:13:00  chess
33 // Initial revision
34 //
35 // Revision 1.1  1996/09/30 20:52:48  moses
36 // Initial revision
37 //
38 //
39 //--------------------------------------------------------------------------
40
41 // static char RCSid[] = "$Id: link.cc,v 1.5 1998/09/10 19:57:17 mlong Exp $";
42
43 #include "link.hh"
44
45 //----------------------------------------------------------------------------
46 // Link class methods
47 //
48
49 // default constructor
50 Link::Link(void) { next = 0; }
51
52 // constructor
53 Link::Link(Link *p) { next = p; }
54
55 Link::~Link(void) {}
56
57
58 //----------------------------------------------------------------------------
59 // LinkListBase class methods
60 //
61
62 // default constructor
63 LinkListBase::LinkListBase(void)    { head = 0; }
64
65 LinkListBase::~LinkListBase(void) {}
66
67 void LinkListBase::Insert(Link *p)
68 {               
69    if(head)
70       p->next = head;
71    
72    head = p;
73 }
74
75 void LinkListBase::Insert(Link *p, Link *q) {
76   Link *tmp = 0;
77
78   if(head)
79     if(head == p)
80       Insert(q);
81     else {
82       for(tmp = head; (tmp->next != 0); tmp = tmp->next) {
83         if(tmp->next == p) {
84           q->next = p;
85           tmp->next = q;
86           break;
87         }
88       }
89       if(tmp->next == 0) 
90         Append(q);
91     }
92   else
93     head = q;
94 }
95
96 //--------------------------
97 // Head
98 //
99 Link *LinkListBase::Head(void) { return(head); }
100
101 void LinkListBase::Append(Link *p)
102 {
103    if(head) {
104       Link *tmp = 0;
105
106       for(tmp = head; tmp->next != 0; tmp = tmp->next)
107          ;
108       tmp->next = p;
109    }
110    else
111       head = p;
112 }
113
114 void LinkListBase::Delete(void)
115 {
116     Link *p = 0;
117
118     if(head) {
119                 p = head->next;
120                 delete head;
121                 head = p;
122         }
123         else
124                 head = 0;
125 }
126
127 void LinkListBase::Delete(Link *p) 
128 {
129   Link *tmp = 0;
130   
131   if(head != p) {
132     for(tmp = head; (tmp != 0 && tmp->next != p); tmp = tmp->next)
133       ;
134     
135     if(tmp->next == p) {
136       tmp->next = p->next;
137       delete p;
138     }
139   } else if(head == p) {
140     tmp = head->next;
141     delete head;
142     /* 
143     head = 0;
144     */ /* This line will delete the entire list */
145     head = tmp;  /* This one does not delete the entire list. */
146   } else {
147     head = 0;
148   }
149 }
150
151
152 //----------------------------------------------------------------------------
153 // LinkListIterBase class methods
154 //
155
156 // constructor
157 LinkListIterBase::LinkListIterBase(LinkListBase& list) 
158
159     currentList = &list; 
160     currentItem = currentList->head;
161 }
162
163 void LinkListIterBase::Reset(void) 
164
165     currentItem = currentList->head;
166 }
167
168 Link *LinkListIterBase::Next(void)
169 {
170     Link *ret = 0;
171
172     ret = currentItem;
173     if(0 != currentItem)
174        currentItem = currentItem->next;
175
176     return(ret);
177 }  
178
179