リビジョン | 2f5623d38805ae9d31bae63d2acf87afabe48407 (tree) |
---|---|
日時 | 2020-11-22 21:09:30 |
作者 | dhrname <dhrname@user...> |
コミッター | dhrname |
Modify the removeChild method
@@ -163,20 +163,25 @@ void BaseNode::setParent(Node* node) | ||
163 | 163 | |
164 | 164 | void BaseNode::setNext(Node* node) |
165 | 165 | { |
166 | + this->throwNULLArgumentError(node, "setNext"); | |
166 | 167 | this->nextSibling = node; |
167 | 168 | } |
168 | 169 | |
169 | 170 | void BaseNode::setPrev(Node* node) |
170 | 171 | { |
172 | + this->throwNULLArgumentError(node, "setPrev"); | |
171 | 173 | this->previousSibling = node; |
172 | 174 | } |
173 | 175 | |
174 | 176 | void BaseNode::setFirstChild(Node* node) |
175 | 177 | { |
178 | + this->throwNULLArgumentError(node, "setFirstChild"); | |
176 | 179 | this->firstChild = node; |
177 | 180 | } |
178 | 181 | |
179 | -void BaseNode::setLastChild(Node* node){ | |
182 | +void BaseNode::setLastChild(Node* node) | |
183 | +{ | |
184 | + this->throwNULLArgumentError(node, "setLastChild"); | |
180 | 185 | this->lastChild = node; |
181 | 186 | } |
182 | 187 |
@@ -207,6 +212,17 @@ Node* BaseNode::removeChild(Node* const child) | ||
207 | 212 | |
208 | 213 | child->setParent(emptynode); |
209 | 214 | |
215 | + if (this->lastChild == child) | |
216 | + { | |
217 | + /*末子ノードがchildである場合は自分のlastChildメンバを書きかえておく*/ | |
218 | + this->setLastChild(child->getPrev()); | |
219 | + } | |
220 | + if (this->firstChild == child) | |
221 | + { | |
222 | + /*長子ノードがchildである場合は自分のfirstChildメンバを書きかえておく*/ | |
223 | + this->setFirstChild(child->getNext()); | |
224 | + } | |
225 | + | |
210 | 226 | /*nodeが抜けた後、隣接ノードに関するメンバは書き換えておく*/ |
211 | 227 | if (child->getPrev()->isNode()) |
212 | 228 | { |
@@ -216,12 +232,6 @@ Node* BaseNode::removeChild(Node* const child) | ||
216 | 232 | { |
217 | 233 | child->getNext()->setPrev(child->getPrev()); |
218 | 234 | } |
219 | - | |
220 | - if (this->getLastChild() == child) | |
221 | - { | |
222 | - /*末尾ノードがchildである場合は自分のlastChildメンバを書きかえておく*/ | |
223 | - this->lastChild = child->getPrev(); | |
224 | - } | |
225 | 235 | |
226 | 236 | child->setNext(emptynode); |
227 | 237 | child->setPrev(emptynode); |
@@ -156,7 +156,7 @@ ST_Node ST_removeChild(ST_Node parent, ST_Node child) | ||
156 | 156 | |
157 | 157 | if (ST_getLastChild(parent) == child) |
158 | 158 | { |
159 | - /*末尾ノードがnodeである場合はparentノードのメンバを書きかえておく*/ | |
159 | + /*末尾ノードがchildである場合はparentノードのメンバを書きかえておく*/ | |
160 | 160 | parent->lastChild = ST_getPreviousNode(child); |
161 | 161 | } |
162 | 162 |