/** * 親構成要素から削除親要素(セル)を削除する. * @param parent_cell 削除親要素(セル) * @return 親構成要素数 */ UdmSize_t UdmComponent::removeReferencedCell(const UdmCell* parent_cell) { if (parent_cell == NULL) return this->getNumParentCells(); int count = 0; int n; for (n=0; n<2; n++) { if (this->parent_cells[n] == parent_cell) { this->parent_cells[n] = NULL; } else if (this->parent_cells[n] != NULL) { count++; } } // 親要素が存在しないので、構成節点(ノード)からこの部品要素を削除する. if (count == 0) { // 構成節点(ノード)から親要素(セル)を削除する. std::vector<UdmNode*>::iterator itr_node; for (itr_node=this->nodes.begin(); itr_node!=this->nodes.end(); itr_node++) { UdmNode* node = (*itr_node); // 親要素(セル)を削除する. node->removeReferencedCell(this); } } return this->getNumParentCells(); }
/** * この要素(セル)を親に持つ節点(ノード)、要素(セル)からこの要素(セル)を削除する. * @return エラー番号 : UDM_OK | UDM_ERROR */ UdmError_t UdmCell::removeReferencedCells() { UdmSize_t num_parents; int i, size; // セクション(要素構成)情報のUdmElements::cell_listから削除する. // std::vectorから削除するのみ. if (this->parent_elements != NULL) { this->parent_elements->removeCell(this); } // 部品要素(セル)から親要素(セル)を削除する. size = this->components.size(); if (size > 0) { for (i=size-1; i>=0; i--) { UdmComponent* component = this->components[i]; // 親要素(セル)を削除する. num_parents = component->removeReferencedCell(this); // 部品要素(セル)から要素(セル)を削除(free)する. // 親要素(セル)が存在しない独立要素(セル)は、要素(セル)自身を削除する. this->removeComponentCell(component); } } // 構成節点(ノード)から親要素(セル)を削除する. std::vector<UdmNode*>::iterator itr_node; for (itr_node=this->nodes.begin(); itr_node!=this->nodes.end(); itr_node++) { UdmNode* node = (*itr_node); // 親要素(セル)を削除する. num_parents = node->removeReferencedCell(this); } return UDM_OK; }
/** * 親構成要素からすべての削除親要素(セル)を削除する. * @return 親構成要素数 */ UdmSize_t UdmComponent::removeReferencedCells() { int count = 0; int n; for (n=0; n<2; n++) { if (this->parent_cells[n] != NULL) { this->parent_cells[n]->removeComponentCell(this); this->parent_cells[n] = NULL; } } // 親要素が存在しないので、構成節点(ノード)からこの部品要素を削除する. // 構成節点(ノード)から親要素(セル)を削除する. std::vector<UdmNode*>::iterator itr_node; for (itr_node=this->nodes.begin(); itr_node!=this->nodes.end(); itr_node++) { UdmNode* node = (*itr_node); // 親要素(セル)を削除する. node->removeReferencedCell(this); } return 0; }