source: tags/arb_5.1/EDIT4/ED4_list.cxx

Last change on this file was 5390, checked in by westram, 16 years ago
  • TAB-Ex
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.3 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3
4#include <arbdb.h>
5#include <aw_root.hxx>
6#include <aw_window.hxx>
7
8#include "ed4_class.hxx"
9
10// -----------------
11//      ED4_list
12// -----------------
13
14ED4_returncode ED4_list::append_elem_backwards( void *elem )
15{
16    ED4_list_elem *new_list_elem;
17
18    if ( elem == NULL ) return ( ED4_R_IMPOSSIBLE );
19
20    new_list_elem = new ED4_list_elem(elem);
21
22    if (!first()) {
23        my_first = new_list_elem;
24        my_last = new_list_elem;
25    }
26    else {
27        new_list_elem->set_next(first());
28        my_first = new_list_elem;
29    }
30
31    my_no_of_entries++;
32
33    return ( ED4_R_OK );
34}
35
36
37ED4_returncode ED4_list::append_elem( void *elem )
38{
39    ED4_list_elem       *new_list_elem;
40
41    if ( elem == NULL )
42        return ( ED4_R_IMPOSSIBLE );
43
44    new_list_elem = new ED4_list_elem(elem);
45
46    if ( my_first == NULL) {
47        my_first = new_list_elem;
48        my_last = new_list_elem;
49    }
50    else {
51        my_last->set_next(new_list_elem);
52        my_last = new_list_elem;
53    }
54
55    my_no_of_entries++;
56    return ( ED4_R_OK );
57}
58
59
60
61ED4_returncode ED4_list::delete_elem( void *elem )
62{
63    ED4_list_elem    *current_list_elem,
64        *previous_list_elem;
65
66    current_list_elem = first();
67    previous_list_elem = NULL;
68
69    while (current_list_elem && current_list_elem->elem()!=elem) {
70        previous_list_elem = current_list_elem;
71        current_list_elem  = current_list_elem->next();
72    }
73
74    if ( current_list_elem == NULL ) {
75        return ( ED4_R_IMPOSSIBLE );
76    }
77
78    if ( current_list_elem == first() ) {
79        if ( current_list_elem == last() ) {
80            my_last = NULL;
81        }
82        my_first = current_list_elem->next();
83    }
84    else
85    {
86        previous_list_elem->set_next(current_list_elem->next());
87
88        if ( current_list_elem == last() ) {
89            my_last = previous_list_elem;
90        }
91    }
92
93    my_no_of_entries--;
94    delete current_list_elem;
95    return ( ED4_R_OK );
96}
97
98short ED4_list::is_elem( void *elem )
99{
100    ED4_list_elem       *current_list_elem = first();
101
102    if ( elem == NULL ) return ( 0 );
103
104    while (current_list_elem && current_list_elem->elem()!=elem) {
105        current_list_elem = current_list_elem->next();
106    }
107
108    return current_list_elem!=0;
109}
110
111
112ED4_list::ED4_list()
113{
114    my_first = NULL;
115    my_last  = NULL;
116    my_no_of_entries = 0;
117}
118
119
120ED4_list::~ED4_list()
121{
122}
123
Note: See TracBrowser for help on using the repository browser.