source: git/libpolys/tests/cxxtest/LinkedList.cpp @ ba5e9e

spielwiese
Last change on this file since ba5e9e was 4aa8610, checked in by Mohamed Barakat <mohamed.barakat@…>, 13 years ago
created libpolys/tests and set up the beginning of a test-suite using cxxtest
  • Property mode set to 100644
File size: 3.1 KB
Line 
1#ifndef __cxxtest__LinkedList_cpp__
2#define __cxxtest__LinkedList_cpp__
3
4#include <cxxtest/LinkedList.h>
5
6namespace CxxTest
7{
8    List GlobalFixture::_list = { 0, 0 };
9    List RealSuiteDescription::_suites = { 0, 0 };
10
11    void List::initialize()
12    {
13        _head = _tail = 0;
14    }
15   
16    Link *List::head()
17    {
18        Link *l = _head;
19        while ( l && !l->active() )
20            l = l->next();
21        return l;
22    }
23
24    const Link *List::head() const
25    {
26        Link *l = _head;
27        while ( l && !l->active() )
28            l = l->next();
29        return l;
30    }
31
32    Link *List::tail()
33    {
34        Link *l = _tail;
35        while ( l && !l->active() )
36            l = l->prev();
37        return l;
38    }
39
40    const Link *List::tail() const
41    {
42        Link *l = _tail;
43        while ( l && !l->active() )
44            l = l->prev();
45        return l;
46    }
47
48    bool List::empty() const
49    {
50        return (_head == 0);
51    }
52
53    unsigned List::size() const
54    {
55        unsigned count = 0;
56        for ( const Link *l = head(); l != 0; l = l->next() )
57            ++ count;
58        return count;
59    }
60
61    Link *List::nth( unsigned n )
62    {
63        Link *l = head();
64        while ( n -- )
65            l = l->next();
66        return l;
67    }
68
69    void List::activateAll()
70    {
71        for ( Link *l = _head; l != 0; l = l->justNext() )
72            l->setActive( true );
73    }
74
75    void List::leaveOnly( const Link &link )
76    {
77        for ( Link *l = head(); l != 0; l = l->next() )
78            if ( l != &link )
79                l->setActive( false );
80    }
81
82    Link::Link() :
83        _next( 0 ),
84        _prev( 0 ),
85        _active( true )
86    {
87    }
88
89    Link::~Link()
90    {
91    }
92   
93    bool Link::active() const
94    {
95        return _active;
96    }
97   
98    void Link::setActive( bool value )
99    {
100        _active = value;
101    }
102
103    Link * Link::justNext()
104    {
105        return _next;
106    }
107   
108    Link * Link::justPrev()
109    {
110        return _prev;
111    }
112       
113    Link * Link::next()
114    {
115        Link *l = _next;
116        while ( l && !l->_active )
117            l = l->_next;
118        return l;
119    }
120   
121    Link * Link::prev()
122    {
123        Link *l = _prev;
124        while ( l && !l->_active )
125            l = l->_prev;
126        return l;
127    }
128   
129    const Link * Link::next() const
130    {
131        Link *l = _next;
132        while ( l && !l->_active )
133            l = l->_next;
134        return l;
135    }
136   
137    const Link * Link::prev() const
138    {
139        Link *l = _prev;
140        while ( l && !l->_active )
141            l = l->_prev;
142        return l;
143    }
144   
145    void Link::attach( List &l )
146    {
147        if ( l._tail )
148            l._tail->_next = this;
149
150        _prev = l._tail;
151        _next = 0;
152           
153        if ( l._head == 0 )
154            l._head = this;
155        l._tail = this;
156    }
157
158    void Link::detach( List &l )
159    {
160        if ( _prev )
161            _prev->_next = _next;
162        else
163            l._head = _next;
164           
165        if ( _next )
166            _next->_prev = _prev;
167        else
168            l._tail = _prev;
169    }
170};
171
172#endif // __cxxtest__LinkedList_cpp__
Note: See TracBrowser for help on using the repository browser.