/[cvs]/api/Classes/LinkedList/ObjectLinkedList3.cpp
ViewVC logotype

Annotation of /api/Classes/LinkedList/ObjectLinkedList3.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Sun Jul 1 20:47:58 2001 UTC (23 years ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

1 bearsoft 1.1 #include "ObjectLinkedList.h"
2     #include "../System/SystemDefine.h"
3     #include "../Element/DefineObjects.h"
4     #include "../String/Parse.h"
5     #include "../Sort/ObjectLinkedListQuickSort.h"
6     #include "../System/System.h"
7     #include "../String/StringTools.h"
8    
9     ObjectLinkedList::ObjectLinkedList()
10     {
11     howfar=0;
12     }
13    
14     ////////////////////////////////////////////////////////////////////////////////////
15     //free memory for all Elements that exsist in the LinkedList
16     ////////////////////////////////////////////////////////////////////////////////////
17    
18     ObjectLinkedList::~ObjectLinkedList()
19     {
20     removeAllElement();
21     }
22    
23     ////////////////////////////////////////////////////////////////////////////////////
24     //free memory for all Elements that exsist in the LinkedList
25     ////////////////////////////////////////////////////////////////////////////////////
26    
27     void ObjectLinkedList::removeAllElement()
28     {
29     if ( howfar != 0 )
30     {
31     ObjectElement *element=first;
32    
33     for ( int s=0; s<howfar ; s++ )
34     {
35     ObjectElement *tempElement=element->next;
36     delete element;
37     element=tempElement;
38     }
39     }
40    
41     }
42    
43     ////////////////////////////////////////////////////////////////////////////////////
44     //How many Elements is it in the LinkedList
45     ////////////////////////////////////////////////////////////////////////////////////
46    
47     int ObjectLinkedList::size()
48     {
49     return howfar;
50     }
51    
52     ////////////////////////////////////////////////////////////////////////////////////
53     //add a Element to the LinkedList
54     ////////////////////////////////////////////////////////////////////////////////////
55     /*
56     ObjectElement *ObjectLinkedList::addLast(ChunkNameElement *iChunkNameElement)
57     {
58     return addLastMain((void*)iChunkNameElement,DefineChunkNameElement);
59     }
60     */
61     ObjectElement *ObjectLinkedList::addLast(ExtPropertiesElement *iExtPropertiesElement)
62     {
63     return addLastMain((ObjectElement*)iExtPropertiesElement,DefineExtPropertiesElement);
64     }
65    
66     ObjectElement *ObjectLinkedList::addLastMain(void *iObjectElement, int iTypeOfObject)
67     {
68     if (howfar == 0)
69     {
70     first = new ObjectElement(iObjectElement,iTypeOfObject,Parse::intToString(howfar));
71     last=first;
72     }
73     else
74     {
75     last->next = new ObjectElement(iObjectElement,iTypeOfObject,Parse::intToString(howfar));
76     last->next->previos=last;
77     last=last->next;
78     }
79    
80     howfar++;
81    
82     return (ObjectElement*)last->pointer;
83     }
84    
85     ObjectElement *ObjectLinkedList::addLast(SGI *sgi, char *iName)
86     {
87     return addLastMainWithName((void*)sgi,DefineSGI, iName);
88     }
89     /*
90     ObjectElement *ObjectLinkedList::addLast(ChunkNameElement *iChunkNameElement, char *iName)
91     {
92     return addLastMainWithName((void*)iChunkNameElement,DefineChunkNameElement, iName);
93     }
94     */
95     ObjectElement *ObjectLinkedList::addLast(ExtPropertiesElement *iExtPropertiesElement, char *iName)
96     {
97     return addLastMainWithName((ObjectElement*)iExtPropertiesElement,DefineExtPropertiesElement, iName);
98     }
99    
100     ObjectElement *ObjectLinkedList::addLastMainWithName(void *iObjectElement, int iTypeOfObject, char *iName)
101     {
102    
103     if (iTypeOfObject==DefineSGI)
104     {
105     ObjectElement *objectElement=checkIfElementNameExist(iName);
106    
107     if(objectElement!=null)
108     {
109     return objectElement;
110     }
111     }
112    
113     if (howfar == 0)
114     {
115     first = new ObjectElement(iObjectElement,iTypeOfObject,iName);
116     last=first;
117     }
118     else
119     {
120     last->next = new ObjectElement(iObjectElement,iTypeOfObject,iName);
121     last->next->previos=last;
122     last=last->next;
123     }
124    
125     howfar++;
126    
127     return (ObjectElement*)last->pointer;
128     }
129    
130    
131     ////////////////////////////////////////////////////////////////////////////////////
132     //check if a element with same name exist
133     ////////////////////////////////////////////////////////////////////////////////////
134    
135     ObjectElement *ObjectLinkedList::checkIfElementNameExist(char *name)
136     {
137     ObjectElement *element=first;
138    
139     for ( int s=0; s<howfar ; s++ )
140     {
141     if (element->name->equals(name))
142     {
143     return (ObjectElement*)element;
144     }
145     element=element->next;
146     }
147    
148     return (ObjectElement*)null;
149     }
150    
151    
152     ////////////////////////////////////////////////////////////////////////////////////
153     //get a Element from the LinkedList
154     ////////////////////////////////////////////////////////////////////////////////////
155    
156     ObjectElement *ObjectLinkedList::getElement(int index)
157     {
158     ObjectElement *element=first;
159    
160     for ( int s=0; s<index ; s++ )
161     {
162     element=element->next;
163     }
164    
165     return (ObjectElement*)element->pointer;
166     }
167    
168     ////////////////////////////////////////////////////////////////////////////////////
169     //get a ObjectName from the LinkedList
170     ////////////////////////////////////////////////////////////////////////////////////
171    
172     char *ObjectLinkedList::getObjectName(int index)
173     {
174     ObjectElement *element=first;
175    
176     for ( int s=0; s<index ; s++ )
177     {
178     element=element->next;
179     }
180    
181     stringLength=element->name->length;
182    
183     return element->name->buffer;
184     }
185    
186    
187     ////////////////////////////////////////////////////////////////////////////////////
188     //get a ObjectElement from the LinkedList
189     ////////////////////////////////////////////////////////////////////////////////////
190    
191     ObjectElement *ObjectLinkedList::getObjectElement(int index)
192     {
193     ObjectElement *element=first;
194    
195     for ( int s=0; s<index ; s++ )
196     {
197     element=element->next;
198     }
199    
200     return (ObjectElement*)element;
201     }
202    
203     ////////////////////////////////////////////////////////////////////////////////////
204     //set a Element in the LinkedList
205     ////////////////////////////////////////////////////////////////////////////////////
206     /*
207     void ObjectLinkedList::setElement(ChunkNameElement *iChunkNameElement, int index)
208     {
209     if ( index < howfar && index >= 0)
210     {
211     setElementMain((void*)iChunkNameElement, DefineChunkNameElement, index);
212     }
213     }
214     */
215     void ObjectLinkedList::setElement(ExtPropertiesElement *iExtPropertiesElement, int index)
216     {
217     if ( index < howfar && index >= 0)
218     {
219     setElementMain((void*)iExtPropertiesElement, DefineExtPropertiesElement, index);
220     }
221     }
222    
223     void ObjectLinkedList::setElementMain(void *iObjectElement, int iTypeOfObject, int index)
224     {
225     ObjectElement *element=first;
226    
227     for ( int s=0; s<index ; s++ )
228     {
229     element=element->next;
230     }
231    
232     element->remove();
233     element->pointer=(void *)iObjectElement;
234     element->typeOfObject=iTypeOfObject;
235     }
236    
237     /*
238     void ObjectLinkedList::setElement(ChunkNameElement *iChunkNameElement, char *iName, int index)
239     {
240     if ( index < howfar && index >= 0)
241     {
242     setElementMainWithName((void*)iChunkNameElement, DefineChunkNameElement, iName, index);
243     }
244     }
245     */
246     void ObjectLinkedList::setElement(ExtPropertiesElement *iExtPropertiesElement, char *iName, int index)
247     {
248     if ( index < howfar && index >= 0)
249     {
250     setElementMainWithName((void*)iExtPropertiesElement, DefineExtPropertiesElement, iName, index);
251     }
252     }
253    
254     void ObjectLinkedList::setElementMainWithName(void *iObjectElement, int iTypeOfObject, char *iName, int index)
255     {
256     ObjectElement *element=first;
257    
258     for ( int s=0; s<index ; s++ )
259     {
260     element=element->next;
261     }
262    
263     element->remove();
264     element->pointer=(void *)iObjectElement;
265     element->typeOfObject=iTypeOfObject;
266     element->name->setString(iName);
267     }
268    
269     ////////////////////////////////////////////////////////////////////////////////////
270     //insert a new object here, used with sorting
271     ////////////////////////////////////////////////////////////////////////////////////
272    
273     void ObjectLinkedList::setElement(ObjectElement *iObjectElement, int index)
274     {
275     ObjectElement *element=first;
276    
277     for ( int s=0; s<index ; s++ )
278     {
279     element=element->next;
280     }
281    
282     element->pointer=iObjectElement->pointer;
283     element->typeOfObject=iObjectElement->typeOfObject;
284     element->name->setString(iObjectElement->name->buffer);
285     }
286    
287     ////////////////////////////////////////////////////////////////////////////////////
288     //have to do with the quicksort
289     ////////////////////////////////////////////////////////////////////////////////////
290    
291     void ObjectLinkedList::setElementPivot(void *iObjectElement, int iTypeOfObject, char *iName, int index)
292     {
293     ObjectElement *element=first;
294    
295     for ( int s=0; s<index ; s++ )
296     {
297     element=element->next;
298     }
299    
300     element->pointer=(void *)iObjectElement;
301     element->typeOfObject=iTypeOfObject;
302     element->name->setString(iName);
303     }
304    
305     ////////////////////////////////////////////////////////////////////////////////////
306     //sort element in linkedlist
307     ////////////////////////////////////////////////////////////////////////////////////
308    
309     void ObjectLinkedList::sortLargestOrder()
310     {
311     ObjectLinkedListQuickSort::setStatement(1);
312     ObjectLinkedListQuickSort::sortLargestOrder(this,0,howfar-1);
313     }
314    
315     void ObjectLinkedList::sortSmallestOrder()
316     {
317     ObjectLinkedListQuickSort::setStatement(0);
318     ObjectLinkedListQuickSort::sortSmallestOrder(this,0,howfar-1);
319     }
320    
321    
322    
323     ////////////////////////////////////////////////////////////////////////////////////
324     //remove a element from the linkedlist
325     ////////////////////////////////////////////////////////////////////////////////////
326    
327     bool ObjectLinkedList::removeElement(int index)
328     {
329     if ( index < howfar && index >= 0)
330     {
331     int temphowfar=howfar;
332     --howfar;
333     ObjectElement *lista = first;
334    
335     for ( int w=0; w<index ; w++ )
336     {
337     lista=lista->next;
338     }
339    
340     if ( lista == first && temphowfar == 1 )
341     {
342     delete first;
343     return true;
344     }
345    
346     if ( lista == first && temphowfar != 1 )
347     {
348     bool s=false;
349    
350     if ( lista->next == last )
351     {
352     s=true;
353     }
354    
355     ObjectElement *temp=first->next;
356     delete first;
357     first=temp;
358    
359     if (s == true)
360     {
361     last=first;
362     }
363    
364     return true;
365     }
366    
367     if ( lista == last )
368     {
369     ObjectElement *temp=last->previos;
370     delete last;
371     last=temp;
372     return true;
373     }
374    
375     int t=0;
376    
377     if ( lista->next == last && lista->previos == first )
378     {
379     t=1;
380     }
381    
382    
383     ObjectElement *tempnext=lista->previos;
384     ObjectElement *tempprevios=lista->next;
385     delete lista;
386     tempnext->next=tempprevios;
387     tempprevios->previos=tempnext;
388    
389     if ( t == 1 )
390     {
391     first=tempnext;
392     last=tempprevios;
393     }
394    
395     return true;
396     }
397    
398     return false;
399     }

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26