• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

コミットメタ情報

リビジョン2f5623d38805ae9d31bae63d2acf87afabe48407 (tree)
日時2020-11-22 21:09:30
作者dhrname <dhrname@user...>
コミッターdhrname

ログメッセージ

Modify the removeChild method

変更サマリ

差分

--- a/joestar/cpp/main.cpp
+++ b/joestar/cpp/main.cpp
@@ -163,20 +163,25 @@ void BaseNode::setParent(Node* node)
163163
164164 void BaseNode::setNext(Node* node)
165165 {
166+ this->throwNULLArgumentError(node, "setNext");
166167 this->nextSibling = node;
167168 }
168169
169170 void BaseNode::setPrev(Node* node)
170171 {
172+ this->throwNULLArgumentError(node, "setPrev");
171173 this->previousSibling = node;
172174 }
173175
174176 void BaseNode::setFirstChild(Node* node)
175177 {
178+ this->throwNULLArgumentError(node, "setFirstChild");
176179 this->firstChild = node;
177180 }
178181
179-void BaseNode::setLastChild(Node* node){
182+void BaseNode::setLastChild(Node* node)
183+{
184+ this->throwNULLArgumentError(node, "setLastChild");
180185 this->lastChild = node;
181186 }
182187
@@ -207,6 +212,17 @@ Node* BaseNode::removeChild(Node* const child)
207212
208213 child->setParent(emptynode);
209214
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+
210226 /*nodeが抜けた後、隣接ノードに関するメンバは書き換えておく*/
211227 if (child->getPrev()->isNode())
212228 {
@@ -216,12 +232,6 @@ Node* BaseNode::removeChild(Node* const child)
216232 {
217233 child->getNext()->setPrev(child->getPrev());
218234 }
219-
220- if (this->getLastChild() == child)
221- {
222- /*末尾ノードがchildである場合は自分のlastChildメンバを書きかえておく*/
223- this->lastChild = child->getPrev();
224- }
225235
226236 child->setNext(emptynode);
227237 child->setPrev(emptynode);
--- a/source_code/ntree.c
+++ b/source_code/ntree.c
@@ -156,7 +156,7 @@ ST_Node ST_removeChild(ST_Node parent, ST_Node child)
156156
157157 if (ST_getLastChild(parent) == child)
158158 {
159- /*末尾ノードがnodeである場合はparentノードのメンバを書きかえておく*/
159+ /*末尾ノードがchildである場合はparentノードのメンバを書きかえておく*/
160160 parent->lastChild = ST_getPreviousNode(child);
161161 }
162162