* return the right error code
[blender-staging.git] / intern / container / intern / CTR_List.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  *
19  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
20  * All rights reserved.
21  *
22  * The Original Code is: all of this file.
23  *
24  * Contributor(s): none yet.
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #ifdef HAVE_CONFIG_H
30 #include <config.h>
31 #endif
32
33 #include "CTR_List.h"
34
35
36 CTR_Link::
37 CTR_Link(
38 ) : 
39         m_next(0), 
40         m_prev(0) 
41 {
42 }
43
44 CTR_Link::
45 CTR_Link(
46         CTR_Link *next,
47         CTR_Link *prev
48 ) : 
49         m_next(next), 
50         m_prev(prev) 
51 {
52 }
53
54         CTR_Link *
55 CTR_Link::
56 getNext(
57 ) const {
58         return m_next; 
59 }
60
61         CTR_Link *
62 CTR_Link::
63 getPrev(
64 ) const { 
65         return m_prev; 
66 }  
67
68         bool 
69 CTR_Link::
70 isHead(
71 ) const { 
72         return m_prev == 0; 
73 }
74
75         bool 
76 CTR_Link::
77 isTail(
78 ) const { 
79         return m_next == 0; 
80 }
81
82         void 
83 CTR_Link::
84 insertBefore(
85         CTR_Link *link
86 ) {
87     m_next         = link;
88     m_prev         = link->m_prev;
89     m_next->m_prev = this;
90     m_prev->m_next = this;
91
92
93         void 
94 CTR_Link::
95 insertAfter(
96         CTR_Link *link
97 ) {
98     m_next         = link->m_next;
99     m_prev         = link;
100     m_next->m_prev = this;
101     m_prev->m_next = this;
102
103
104         void 
105 CTR_Link::
106 remove(
107 ) { 
108     m_next->m_prev = m_prev; 
109     m_prev->m_next = m_next;
110 }
111
112
113 CTR_List::
114 CTR_List(
115 ) : 
116         m_head(&m_tail, 0), 
117         m_tail(0, &m_head) 
118 {
119 }
120
121         CTR_Link *
122 CTR_List::
123 getHead(
124 ) const { 
125         return m_head.getNext(); 
126 }
127
128         CTR_Link *
129 CTR_List::
130 getTail(
131 ) const { 
132         return m_tail.getPrev();
133
134
135         void 
136 CTR_List::
137 addHead(
138         CTR_Link *link
139 ) { 
140         link->insertAfter(&m_head); 
141 }
142
143         void 
144 CTR_List::
145 addTail(
146         CTR_Link *link
147 ) { 
148         link->insertBefore(&m_tail); 
149 }
150