Do not copy the spec during attach.
Use a reference count for managing the memory. PiperOrigin-RevId: 716169486 Change-Id: Id270c4858c17b9250115e9544d5ea143584e2d5f
This commit is contained in:
committed by
Copybara-Service
parent
6436055c6c
commit
c2138c3fb0
+11
-2
@@ -208,7 +208,7 @@ int mjs_detachBody(mjSpec* s, mjsBody* b) {
|
||||
model->SetError(e);
|
||||
return -1;
|
||||
}
|
||||
delete body;
|
||||
model->Detach(body);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -254,6 +254,15 @@ int mjs_activatePlugin(mjSpec* s, const char* name) {
|
||||
|
||||
|
||||
|
||||
// set deep copy flag
|
||||
int mjs_setDeepCopy(mjSpec* s, int deepcopy) {
|
||||
mjCModel* model = static_cast<mjCModel*>(s->element);
|
||||
model->SetDeepCopy(deepcopy);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// delete object, return 0 if success
|
||||
int mjs_delete(mjsElement* element) {
|
||||
mjCBase* object = static_cast<mjCBase*>(element);
|
||||
@@ -705,7 +714,7 @@ const char* mjs_resolveOrientation(double quat[4], mjtByte degree, const char* s
|
||||
mjsFrame* mjs_bodyToFrame(mjsBody** body) {
|
||||
mjCBody* bodyC = static_cast<mjCBody*>((*body)->element);
|
||||
mjCFrame* frameC = bodyC->ToFrame();
|
||||
delete bodyC;
|
||||
bodyC->model->Detach(bodyC);
|
||||
*body = nullptr;
|
||||
return &frameC->spec;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user