Move detach from mjs_delete to mjs_detach.

PiperOrigin-RevId: 773686024
Change-Id: Ida2c032a6329104df80ed134cf904dde7259bd1e
This commit is contained in:
Alessio Quaglino
2025-06-20 07:02:38 -07:00
committed by Copybara-Service
parent a2acd2d4ed
commit 7dc7a349c5
3 changed files with 62 additions and 37 deletions
+24 -20
View File
@@ -283,20 +283,6 @@ const char* mjs_getError(mjSpec* s) {
// detach body from mjSpec, return 0 on success
int mjs_detach(mjSpec* s, mjsElement* element) {
mjCModel* model = static_cast<mjCModel*>(s->element);
if (!element) {
model->SetError(mjCError(0, "Element is null."));
return -1;
}
mjCError e(0, "Detach is not implemented yet.");
model->SetError(e);
return -1;
}
// check if model has warnings
int mjs_isWarning(mjSpec* s) {
mjCModel* modelC = static_cast<mjCModel*>(s->element);
@@ -354,6 +340,28 @@ int mj_copyBack(mjSpec* s, const mjModel* m) {
// detach body from mjSpec, return 0 on success
int mjs_detach(mjSpec* s, mjsElement* element) {
mjCModel* model = static_cast<mjCModel*>(s->element);
if (!element) {
model->SetError(mjCError(0, "Element is null."));
return -1;
}
try {
if (element->elemtype == mjOBJ_DEFAULT) {
throw mjCError(0, "Detach is not implemented for defaults.");
} else {
*model -= element;
}
return 0;
} catch (mjCError& e) {
model->SetError(e);
return -1;
}
}
// delete object, return 0 on success
int mjs_delete(mjSpec* s, mjsElement* element) {
mjCModel* model = static_cast<mjCModel*>(s->element);
@@ -362,15 +370,11 @@ int mjs_delete(mjSpec* s, mjsElement* element) {
return -1;
}
try {
if (element->elemtype == mjOBJ_BODY) {
mjCBody* body = static_cast<mjCBody*>(element);
*model -= *body;
model->DeleteElement(body);
} else if (element->elemtype == mjOBJ_DEFAULT) {
if (element->elemtype == mjOBJ_DEFAULT) {
mjCDef* def = static_cast<mjCDef*>(element);
*model -= *def;
} else {
// it will call the appropriate destructor since ~mjCBase is virtual
mjs_detach(s, element);
model->DeleteElement(element);
}
return 0;