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