Initial revision
[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 #include "CTR_List.h"
33
34
35 CTR_Link::
36 CTR_Link(
37 ) : 
38         m_next(0), 
39         m_prev(0) 
40 {
41 }
42
43 CTR_Link::
44 CTR_Link(
45         CTR_Link *next,
46         CTR_Link *prev
47 ) : 
48         m_next(next), 
49         m_prev(prev) 
50 {
51 }
52
53         CTR_Link *
54 CTR_Link::
55 getNext(
56 ) const {
57         return m_next; 
58 }
59
60         CTR_Link *
61 CTR_Link::
62 getPrev(
63 ) const { 
64         return m_prev; 
65 }  
66
67         bool 
68 CTR_Link::
69 isHead(
70 ) const { 
71         return m_prev == 0; 
72 }
73
74         bool 
75 CTR_Link::
76 isTail(
77 ) const { 
78         return m_next == 0; 
79 }
80
81         void 
82 CTR_Link::
83 insertBefore(
84         CTR_Link *link
85 ) {
86     m_next         = link;
87     m_prev         = link->m_prev;
88     m_next->m_prev = this;
89     m_prev->m_next = this;
90
91
92         void 
93 CTR_Link::
94 insertAfter(
95         CTR_Link *link
96 ) {
97     m_next         = link->m_next;
98     m_prev         = link;
99     m_next->m_prev = this;
100     m_prev->m_next = this;
101
102
103         void 
104 CTR_Link::
105 remove(
106 ) { 
107     m_next->m_prev = m_prev; 
108     m_prev->m_next = m_next;
109 }
110
111
112 CTR_List::
113 CTR_List(
114 ) : 
115         m_head(&m_tail, 0), 
116         m_tail(0, &m_head) 
117 {
118 }
119
120         CTR_Link *
121 CTR_List::
122 getHead(
123 ) const { 
124         return m_head.getNext(); 
125 }
126
127         CTR_Link *
128 CTR_List::
129 getTail(
130 ) const { 
131         return m_tail.getPrev();
132
133
134         void 
135 CTR_List::
136 addHead(
137         CTR_Link *link
138 ) { 
139         link->insertAfter(&m_head); 
140 }
141
142         void 
143 CTR_List::
144 addTail(
145         CTR_Link *link
146 ) { 
147         link->insertBefore(&m_tail); 
148 }
149