Refactor Default class to use pointers instead of indices.

This in order to make it easier to append the default tree to another tree.

PiperOrigin-RevId: 649812975
Change-Id: I2915ac7e37957e45eadc24d6caaf7beea236bf29
This commit is contained in:
Alessio Quaglino
2024-07-06 03:50:26 -07:00
committed by Copybara-Service
parent 9d0812911c
commit f57dc90669
9 changed files with 45 additions and 47 deletions
+7 -7
View File
@@ -862,7 +862,7 @@ string mjXWriter::Write(char *error, size_t error_sz) {
Visual(root);
Statistic(root);
writingdefaults = true;
Default(root, model->Defaults(0));
Default(root, model->Default());
writingdefaults = false;
Extension(root);
Custom(root);
@@ -1192,8 +1192,8 @@ void mjXWriter::Default(XMLElement* root, mjCDef* def) {
// pointer to parent defaults
mjCDef* par;
if (def->parentid>=0) {
par = model->Defaults(def->parentid);
if (def->parent) {
par = def->parent;
} else {
par = new mjCDef;
}
@@ -1260,19 +1260,19 @@ void mjXWriter::Default(XMLElement* root, mjCDef* def) {
if (!elem->FirstAttribute()) section->DeleteChild(elem);
// if top-level class has no members or children, delete it and return
if (def->parentid<0 && section->NoChildren() && def->childid.empty()) {
if (!def->parent && section->NoChildren() && def->child.empty()) {
root->DeleteChild(section);
delete par;
return;
}
// add children recursively
for (int i=0; i<(int)def->childid.size(); i++) {
Default(section, model->Defaults(def->childid[i]));
for (int i=0; i<(int)def->child.size(); i++) {
Default(section, def->child[i]);
}
// delete parent defaults if allocated here
if (def->parentid<0) {
if (!def->parent) {
delete par;
}
}