Add const to mjsDefault when used as function argument.

Fixes #2197.

PiperOrigin-RevId: 692346264
Change-Id: Iddb9be1377a7d59c86911802d8c5563f6bf6b043
This commit is contained in:
Alessio Quaglino
2024-11-01 18:17:42 -07:00
committed by Copybara-Service
parent 47ebb0614e
commit ebe60b9ad5
8 changed files with 102 additions and 111 deletions
+14 -14
View File
@@ -3567,22 +3567,22 @@ mjsFrame* mjs_attachFrame(mjsBody* parent, const mjsFrame* child,
mjsBody* mjs_attachToSite(mjsSite* parent, const mjsBody* child, mjsBody* mjs_attachToSite(mjsSite* parent, const mjsBody* child,
const char* prefix, const char* suffix); const char* prefix, const char* suffix);
int mjs_detachBody(mjSpec* s, mjsBody* b); int mjs_detachBody(mjSpec* s, mjsBody* b);
mjsBody* mjs_addBody(mjsBody* body, mjsDefault* def); mjsBody* mjs_addBody(mjsBody* body, const mjsDefault* def);
mjsSite* mjs_addSite(mjsBody* body, mjsDefault* def); mjsSite* mjs_addSite(mjsBody* body, const mjsDefault* def);
mjsJoint* mjs_addJoint(mjsBody* body, mjsDefault* def); mjsJoint* mjs_addJoint(mjsBody* body, const mjsDefault* def);
mjsJoint* mjs_addFreeJoint(mjsBody* body); mjsJoint* mjs_addFreeJoint(mjsBody* body);
mjsGeom* mjs_addGeom(mjsBody* body, mjsDefault* def); mjsGeom* mjs_addGeom(mjsBody* body, const mjsDefault* def);
mjsCamera* mjs_addCamera(mjsBody* body, mjsDefault* def); mjsCamera* mjs_addCamera(mjsBody* body, const mjsDefault* def);
mjsLight* mjs_addLight(mjsBody* body, mjsDefault* def); mjsLight* mjs_addLight(mjsBody* body, const mjsDefault* def);
mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe); mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe);
void mjs_delete(mjsElement* element); void mjs_delete(mjsElement* element);
mjsActuator* mjs_addActuator(mjSpec* s, mjsDefault* def); mjsActuator* mjs_addActuator(mjSpec* s, const mjsDefault* def);
mjsSensor* mjs_addSensor(mjSpec* s); mjsSensor* mjs_addSensor(mjSpec* s);
mjsFlex* mjs_addFlex(mjSpec* s); mjsFlex* mjs_addFlex(mjSpec* s);
mjsPair* mjs_addPair(mjSpec* s, mjsDefault* def); mjsPair* mjs_addPair(mjSpec* s, const mjsDefault* def);
mjsExclude* mjs_addExclude(mjSpec* s); mjsExclude* mjs_addExclude(mjSpec* s);
mjsEquality* mjs_addEquality(mjSpec* s, mjsDefault* def); mjsEquality* mjs_addEquality(mjSpec* s, const mjsDefault* def);
mjsTendon* mjs_addTendon(mjSpec* s, mjsDefault* def); mjsTendon* mjs_addTendon(mjSpec* s, const mjsDefault* def);
mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name); mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name);
mjsWrap* mjs_wrapGeom(mjsTendon* tendon, const char* name, const char* sidesite); mjsWrap* mjs_wrapGeom(mjsTendon* tendon, const char* name, const char* sidesite);
mjsWrap* mjs_wrapJoint(mjsTendon* tendon, const char* name, double coef); mjsWrap* mjs_wrapJoint(mjsTendon* tendon, const char* name, double coef);
@@ -3593,11 +3593,11 @@ mjsTuple* mjs_addTuple(mjSpec* s);
mjsKey* mjs_addKey(mjSpec* s); mjsKey* mjs_addKey(mjSpec* s);
mjsPlugin* mjs_addPlugin(mjSpec* s); mjsPlugin* mjs_addPlugin(mjSpec* s);
mjsDefault* mjs_addDefault(mjSpec* s, const char* classname, const mjsDefault* parent); mjsDefault* mjs_addDefault(mjSpec* s, const char* classname, const mjsDefault* parent);
mjsMesh* mjs_addMesh(mjSpec* s, mjsDefault* def); mjsMesh* mjs_addMesh(mjSpec* s, const mjsDefault* def);
mjsHField* mjs_addHField(mjSpec* s); mjsHField* mjs_addHField(mjSpec* s);
mjsSkin* mjs_addSkin(mjSpec* s); mjsSkin* mjs_addSkin(mjSpec* s);
mjsTexture* mjs_addTexture(mjSpec* s); mjsTexture* mjs_addTexture(mjSpec* s);
mjsMaterial* mjs_addMaterial(mjSpec* s, mjsDefault* def); mjsMaterial* mjs_addMaterial(mjSpec* s, const mjsDefault* def);
mjSpec* mjs_getSpec(mjsElement* element); mjSpec* mjs_getSpec(mjsElement* element);
mjSpec* mjs_findSpec(mjSpec* spec, const char* name); mjSpec* mjs_findSpec(mjSpec* spec, const char* name);
mjsBody* mjs_findBody(mjSpec* s, const char* name); mjsBody* mjs_findBody(mjSpec* s, const char* name);
@@ -3605,7 +3605,7 @@ mjsElement* mjs_findElement(mjSpec* s, mjtObj type, const char* name);
mjsBody* mjs_findChild(mjsBody* body, const char* name); mjsBody* mjs_findChild(mjsBody* body, const char* name);
mjsFrame* mjs_findFrame(mjSpec* s, const char* name); mjsFrame* mjs_findFrame(mjSpec* s, const char* name);
mjsDefault* mjs_getDefault(mjsElement* element); mjsDefault* mjs_getDefault(mjsElement* element);
mjsDefault* mjs_findDefault(mjSpec* s, const char* classname); const mjsDefault* mjs_findDefault(mjSpec* s, const char* classname);
mjsDefault* mjs_getSpecDefault(mjSpec* s); mjsDefault* mjs_getSpecDefault(mjSpec* s);
int mjs_getId(mjsElement* element); int mjs_getId(mjsElement* element);
mjsElement* mjs_firstChild(mjsBody* body, mjtObj type, int recurse); mjsElement* mjs_firstChild(mjsBody* body, mjtObj type, int recurse);
@@ -3625,7 +3625,7 @@ void mjs_setDouble(mjDoubleVec* dest, const double* array, int size);
void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes); void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes);
const char* mjs_getString(const mjString* source); const char* mjs_getString(const mjString* source);
const double* mjs_getDouble(const mjDoubleVec* source, int* size); const double* mjs_getDouble(const mjDoubleVec* source, int* size);
void mjs_setDefault(mjsElement* element, mjsDefault* def); void mjs_setDefault(mjsElement* element, const mjsDefault* def);
void mjs_setFrame(mjsElement* dest, mjsFrame* frame); void mjs_setFrame(mjsElement* dest, mjsFrame* frame);
const char* mjs_resolveOrientation(double quat[4], mjtByte degree, const char* sequence, const char* mjs_resolveOrientation(double quat[4], mjtByte degree, const char* sequence,
const mjsOrientation* orientation); const mjsOrientation* orientation);
+14 -14
View File
@@ -1421,25 +1421,25 @@ MJAPI int mjs_detachBody(mjSpec* s, mjsBody* b);
//---------------------------------- Tree elements ------------------------------------------------- //---------------------------------- Tree elements -------------------------------------------------
// Add child body to body, return child. // Add child body to body, return child.
MJAPI mjsBody* mjs_addBody(mjsBody* body, mjsDefault* def); MJAPI mjsBody* mjs_addBody(mjsBody* body, const mjsDefault* def);
// Add site to body, return site spec. // Add site to body, return site spec.
MJAPI mjsSite* mjs_addSite(mjsBody* body, mjsDefault* def); MJAPI mjsSite* mjs_addSite(mjsBody* body, const mjsDefault* def);
// Add joint to body. // Add joint to body.
MJAPI mjsJoint* mjs_addJoint(mjsBody* body, mjsDefault* def); MJAPI mjsJoint* mjs_addJoint(mjsBody* body, const mjsDefault* def);
// Add freejoint to body. // Add freejoint to body.
MJAPI mjsJoint* mjs_addFreeJoint(mjsBody* body); MJAPI mjsJoint* mjs_addFreeJoint(mjsBody* body);
// Add geom to body. // Add geom to body.
MJAPI mjsGeom* mjs_addGeom(mjsBody* body, mjsDefault* def); MJAPI mjsGeom* mjs_addGeom(mjsBody* body, const mjsDefault* def);
// Add camera to body. // Add camera to body.
MJAPI mjsCamera* mjs_addCamera(mjsBody* body, mjsDefault* def); MJAPI mjsCamera* mjs_addCamera(mjsBody* body, const mjsDefault* def);
// Add light to body. // Add light to body.
MJAPI mjsLight* mjs_addLight(mjsBody* body, mjsDefault* def); MJAPI mjsLight* mjs_addLight(mjsBody* body, const mjsDefault* def);
// Add frame to body. // Add frame to body.
MJAPI mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe); MJAPI mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe);
@@ -1451,7 +1451,7 @@ MJAPI void mjs_delete(mjsElement* element);
//---------------------------------- Non-tree elements --------------------------------------------- //---------------------------------- Non-tree elements ---------------------------------------------
// Add actuator. // Add actuator.
MJAPI mjsActuator* mjs_addActuator(mjSpec* s, mjsDefault* def); MJAPI mjsActuator* mjs_addActuator(mjSpec* s, const mjsDefault* def);
// Add sensor. // Add sensor.
MJAPI mjsSensor* mjs_addSensor(mjSpec* s); MJAPI mjsSensor* mjs_addSensor(mjSpec* s);
@@ -1460,16 +1460,16 @@ MJAPI mjsSensor* mjs_addSensor(mjSpec* s);
MJAPI mjsFlex* mjs_addFlex(mjSpec* s); MJAPI mjsFlex* mjs_addFlex(mjSpec* s);
// Add contact pair. // Add contact pair.
MJAPI mjsPair* mjs_addPair(mjSpec* s, mjsDefault* def); MJAPI mjsPair* mjs_addPair(mjSpec* s, const mjsDefault* def);
// Add excluded body pair. // Add excluded body pair.
MJAPI mjsExclude* mjs_addExclude(mjSpec* s); MJAPI mjsExclude* mjs_addExclude(mjSpec* s);
// Add equality. // Add equality.
MJAPI mjsEquality* mjs_addEquality(mjSpec* s, mjsDefault* def); MJAPI mjsEquality* mjs_addEquality(mjSpec* s, const mjsDefault* def);
// Add tendon. // Add tendon.
MJAPI mjsTendon* mjs_addTendon(mjSpec* s, mjsDefault* def); MJAPI mjsTendon* mjs_addTendon(mjSpec* s, const mjsDefault* def);
// Wrap site using tendon. // Wrap site using tendon.
MJAPI mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name); MJAPI mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name);
@@ -1505,7 +1505,7 @@ MJAPI mjsDefault* mjs_addDefault(mjSpec* s, const char* classname, const mjsDefa
//---------------------------------- Assets -------------------------------------------------------- //---------------------------------- Assets --------------------------------------------------------
// Add mesh. // Add mesh.
MJAPI mjsMesh* mjs_addMesh(mjSpec* s, mjsDefault* def); MJAPI mjsMesh* mjs_addMesh(mjSpec* s, const mjsDefault* def);
// Add height field. // Add height field.
MJAPI mjsHField* mjs_addHField(mjSpec* s); MJAPI mjsHField* mjs_addHField(mjSpec* s);
@@ -1517,7 +1517,7 @@ MJAPI mjsSkin* mjs_addSkin(mjSpec* s);
MJAPI mjsTexture* mjs_addTexture(mjSpec* s); MJAPI mjsTexture* mjs_addTexture(mjSpec* s);
// Add material. // Add material.
MJAPI mjsMaterial* mjs_addMaterial(mjSpec* s, mjsDefault* def); MJAPI mjsMaterial* mjs_addMaterial(mjSpec* s, const mjsDefault* def);
//---------------------------------- Find and get utilities ---------------------------------------- //---------------------------------- Find and get utilities ----------------------------------------
@@ -1544,7 +1544,7 @@ MJAPI mjsFrame* mjs_findFrame(mjSpec* s, const char* name);
MJAPI mjsDefault* mjs_getDefault(mjsElement* element); MJAPI mjsDefault* mjs_getDefault(mjsElement* element);
// Find default in model by class name. // Find default in model by class name.
MJAPI mjsDefault* mjs_findDefault(mjSpec* s, const char* classname); MJAPI const mjsDefault* mjs_findDefault(mjSpec* s, const char* classname);
// Get global default from model. // Get global default from model.
MJAPI mjsDefault* mjs_getSpecDefault(mjSpec* s); MJAPI mjsDefault* mjs_getSpecDefault(mjSpec* s);
@@ -1614,7 +1614,7 @@ MJAPI const double* mjs_getDouble(const mjDoubleVec* source, int* size);
//---------------------------------- Spec utilities ------------------------------------------------ //---------------------------------- Spec utilities ------------------------------------------------
// Set element's default. // Set element's default.
MJAPI void mjs_setDefault(mjsElement* element, mjsDefault* def); MJAPI void mjs_setDefault(mjsElement* element, const mjsDefault* def);
// Set element's enclosing frame. // Set element's enclosing frame.
MJAPI void mjs_setFrame(mjsElement* dest, mjsFrame* frame); MJAPI void mjs_setFrame(mjsElement* dest, mjsFrame* frame);
+14 -14
View File
@@ -9072,7 +9072,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9094,7 +9094,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9116,7 +9116,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9154,7 +9154,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9176,7 +9176,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9198,7 +9198,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9256,7 +9256,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9310,7 +9310,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9348,7 +9348,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9370,7 +9370,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9596,7 +9596,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9666,7 +9666,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
@@ -9822,7 +9822,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionDecl( FunctionDecl(
name='mjs_findDefault', name='mjs_findDefault',
return_type=PointerType( return_type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
parameters=( parameters=(
FunctionParameterDecl( FunctionParameterDecl(
@@ -10262,7 +10262,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
FunctionParameterDecl( FunctionParameterDecl(
name='def', name='def',
type=PointerType( type=PointerType(
inner_type=ValueType(name='mjsDefault'), inner_type=ValueType(name='mjsDefault', is_const=True),
), ),
), ),
), ),
+1 -1
View File
@@ -346,7 +346,7 @@ PYBIND11_MODULE(_specs, m) {
py::return_value_policy::reference_internal); py::return_value_policy::reference_internal);
mjSpec.def( mjSpec.def(
"find_default", "find_default",
[](MjSpec& self, std::string& classname) -> raw::MjsDefault* { [](MjSpec& self, std::string& classname) -> const raw::MjsDefault* {
return mjs_findDefault(self.ptr, classname.c_str()); return mjs_findDefault(self.ptr, classname.c_str());
}, },
py::return_value_policy::reference_internal); py::return_value_policy::reference_internal);
+14 -14
View File
@@ -263,7 +263,7 @@ void mjs_delete(mjsElement* element) {
// add child body to body, return child spec // add child body to body, return child spec
mjsBody* mjs_addBody(mjsBody* bodyspec, mjsDefault* defspec) { mjsBody* mjs_addBody(mjsBody* bodyspec, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = static_cast<mjCBody*>(bodyspec->element)->AddBody(def); mjCBody* body = static_cast<mjCBody*>(bodyspec->element)->AddBody(def);
return &body->spec; return &body->spec;
@@ -272,7 +272,7 @@ mjsBody* mjs_addBody(mjsBody* bodyspec, mjsDefault* defspec) {
// add site to body, return site spec // add site to body, return site spec
mjsSite* mjs_addSite(mjsBody* bodyspec, mjsDefault* defspec) { mjsSite* mjs_addSite(mjsBody* bodyspec, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = static_cast<mjCBody*>(bodyspec->element); mjCBody* body = static_cast<mjCBody*>(bodyspec->element);
mjCSite* site = body->AddSite(def); mjCSite* site = body->AddSite(def);
@@ -282,7 +282,7 @@ mjsSite* mjs_addSite(mjsBody* bodyspec, mjsDefault* defspec) {
// add joint to body // add joint to body
mjsJoint* mjs_addJoint(mjsBody* bodyspec, mjsDefault* defspec) { mjsJoint* mjs_addJoint(mjsBody* bodyspec, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = static_cast<mjCBody*>(bodyspec->element); mjCBody* body = static_cast<mjCBody*>(bodyspec->element);
mjCJoint* joint = body->AddJoint(def); mjCJoint* joint = body->AddJoint(def);
@@ -301,7 +301,7 @@ mjsJoint* mjs_addFreeJoint(mjsBody* bodyspec) {
// add geom to body // add geom to body
mjsGeom* mjs_addGeom(mjsBody* bodyspec, mjsDefault* defspec) { mjsGeom* mjs_addGeom(mjsBody* bodyspec, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = static_cast<mjCBody*>(bodyspec->element); mjCBody* body = static_cast<mjCBody*>(bodyspec->element);
mjCGeom* geom = body->AddGeom(def); mjCGeom* geom = body->AddGeom(def);
@@ -311,7 +311,7 @@ mjsGeom* mjs_addGeom(mjsBody* bodyspec, mjsDefault* defspec) {
// add camera to body // add camera to body
mjsCamera* mjs_addCamera(mjsBody* bodyspec, mjsDefault* defspec) { mjsCamera* mjs_addCamera(mjsBody* bodyspec, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = static_cast<mjCBody*>(bodyspec->element); mjCBody* body = static_cast<mjCBody*>(bodyspec->element);
mjCCamera* camera = body->AddCamera(def); mjCCamera* camera = body->AddCamera(def);
@@ -321,7 +321,7 @@ mjsCamera* mjs_addCamera(mjsBody* bodyspec, mjsDefault* defspec) {
// add light to body // add light to body
mjsLight* mjs_addLight(mjsBody* bodyspec, mjsDefault* defspec) { mjsLight* mjs_addLight(mjsBody* bodyspec, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = static_cast<mjCBody*>(bodyspec->element); mjCBody* body = static_cast<mjCBody*>(bodyspec->element);
mjCLight* light = body->AddLight(def); mjCLight* light = body->AddLight(def);
@@ -354,7 +354,7 @@ mjsFrame* mjs_addFrame(mjsBody* bodyspec, mjsFrame* parentframe) {
// add mesh to model // add mesh to model
mjsMesh* mjs_addMesh(mjSpec* s, mjsDefault* defspec) { mjsMesh* mjs_addMesh(mjSpec* s, const mjsDefault* defspec) {
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCMesh* mesh = modelC->AddMesh(def); mjCMesh* mesh = modelC->AddMesh(def);
@@ -391,7 +391,7 @@ mjsTexture* mjs_addTexture(mjSpec* s) {
// add material to model // add material to model
mjsMaterial* mjs_addMaterial(mjSpec* s, mjsDefault* defspec) { mjsMaterial* mjs_addMaterial(mjSpec* s, const mjsDefault* defspec) {
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCMaterial* material = modelC->AddMaterial(def); mjCMaterial* material = modelC->AddMaterial(def);
@@ -401,7 +401,7 @@ mjsMaterial* mjs_addMaterial(mjSpec* s, mjsDefault* defspec) {
// add pair to model // add pair to model
mjsPair* mjs_addPair(mjSpec* s, mjsDefault* defspec) { mjsPair* mjs_addPair(mjSpec* s, const mjsDefault* defspec) {
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCPair* pair = modelC->AddPair(def); mjCPair* pair = modelC->AddPair(def);
@@ -420,7 +420,7 @@ mjsExclude* mjs_addExclude(mjSpec* s) {
// add equality to model // add equality to model
mjsEquality* mjs_addEquality(mjSpec* s, mjsDefault* defspec) { mjsEquality* mjs_addEquality(mjSpec* s, const mjsDefault* defspec) {
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCEquality* equality = modelC->AddEquality(def); mjCEquality* equality = modelC->AddEquality(def);
@@ -430,7 +430,7 @@ mjsEquality* mjs_addEquality(mjSpec* s, mjsDefault* defspec) {
// add tendon to model // add tendon to model
mjsTendon* mjs_addTendon(mjSpec* s, mjsDefault* defspec) { mjsTendon* mjs_addTendon(mjSpec* s, const mjsDefault* defspec) {
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCTendon* tendon = modelC->AddTendon(def); mjCTendon* tendon = modelC->AddTendon(def);
@@ -476,7 +476,7 @@ mjsWrap* mjs_wrapPulley(mjsTendon* tendonspec, double divisor) {
// add actuator to model // add actuator to model
mjsActuator* mjs_addActuator(mjSpec* s, mjsDefault* defspec) { mjsActuator* mjs_addActuator(mjSpec* s, const mjsDefault* defspec) {
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0; mjCDef* def = defspec ? static_cast<mjCDef*>(defspec->element) : 0;
mjCActuator* actuator = modelC->AddActuator(def); mjCActuator* actuator = modelC->AddActuator(def);
@@ -580,7 +580,7 @@ mjsDefault* mjs_getDefault(mjsElement* element) {
// Find default with given name in model. // Find default with given name in model.
mjsDefault* mjs_findDefault(mjSpec* s, const char* classname) { const mjsDefault* mjs_findDefault(mjSpec* s, const char* classname) {
mjCModel* modelC = static_cast<mjCModel*>(s->element); mjCModel* modelC = static_cast<mjCModel*>(s->element);
mjCDef* cdef = modelC->FindDefault(classname); mjCDef* cdef = modelC->FindDefault(classname);
if (!cdef) { if (!cdef) {
@@ -692,7 +692,7 @@ int mjs_getId(mjsElement* element) {
// set default // set default
void mjs_setDefault(mjsElement* element, mjsDefault* defspec) { void mjs_setDefault(mjsElement* element, const mjsDefault* defspec) {
mjCBase* baseC = static_cast<mjCBase*>(element); mjCBase* baseC = static_cast<mjCBase*>(element);
baseC->classname = static_cast<mjCDef*>(defspec->element)->name; baseC->classname = static_cast<mjCDef*>(defspec->element)->name;
} }
+14 -14
View File
@@ -85,25 +85,25 @@ MJAPI int mjs_detachBody(mjSpec* s, mjsBody* b);
//---------------------------------- Add tree elements --------------------------------------------- //---------------------------------- Add tree elements ---------------------------------------------
// Add child body to body, return child. // Add child body to body, return child.
MJAPI mjsBody* mjs_addBody(mjsBody* body, mjsDefault* def); MJAPI mjsBody* mjs_addBody(mjsBody* body, const mjsDefault* def);
// Add site to body, return site spec. // Add site to body, return site spec.
MJAPI mjsSite* mjs_addSite(mjsBody* body, mjsDefault* def); MJAPI mjsSite* mjs_addSite(mjsBody* body, const mjsDefault* def);
// Add joint to body. // Add joint to body.
MJAPI mjsJoint* mjs_addJoint(mjsBody* body, mjsDefault* def); MJAPI mjsJoint* mjs_addJoint(mjsBody* body, const mjsDefault* def);
// Add freejoint to body. // Add freejoint to body.
MJAPI mjsJoint* mjs_addFreeJoint(mjsBody* body); MJAPI mjsJoint* mjs_addFreeJoint(mjsBody* body);
// Add geom to body. // Add geom to body.
MJAPI mjsGeom* mjs_addGeom(mjsBody* body, mjsDefault* def); MJAPI mjsGeom* mjs_addGeom(mjsBody* body, const mjsDefault* def);
// Add camera to body. // Add camera to body.
MJAPI mjsCamera* mjs_addCamera(mjsBody* body, mjsDefault* def); MJAPI mjsCamera* mjs_addCamera(mjsBody* body, const mjsDefault* def);
// Add light to body. // Add light to body.
MJAPI mjsLight* mjs_addLight(mjsBody* body, mjsDefault* def); MJAPI mjsLight* mjs_addLight(mjsBody* body, const mjsDefault* def);
// Add frame to body. // Add frame to body.
MJAPI mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe); MJAPI mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe);
@@ -115,7 +115,7 @@ MJAPI void mjs_delete(mjsElement* element);
//---------------------------------- Add non-tree elements ----------------------------------------- //---------------------------------- Add non-tree elements -----------------------------------------
// Add actuator. // Add actuator.
MJAPI mjsActuator* mjs_addActuator(mjSpec* s, mjsDefault* def); MJAPI mjsActuator* mjs_addActuator(mjSpec* s, const mjsDefault* def);
// Add sensor. // Add sensor.
MJAPI mjsSensor* mjs_addSensor(mjSpec* s); MJAPI mjsSensor* mjs_addSensor(mjSpec* s);
@@ -124,16 +124,16 @@ MJAPI mjsSensor* mjs_addSensor(mjSpec* s);
MJAPI mjsFlex* mjs_addFlex(mjSpec* s); MJAPI mjsFlex* mjs_addFlex(mjSpec* s);
// Add contact pair. // Add contact pair.
MJAPI mjsPair* mjs_addPair(mjSpec* s, mjsDefault* def); MJAPI mjsPair* mjs_addPair(mjSpec* s, const mjsDefault* def);
// Add excluded body pair. // Add excluded body pair.
MJAPI mjsExclude* mjs_addExclude(mjSpec* s); MJAPI mjsExclude* mjs_addExclude(mjSpec* s);
// Add equality. // Add equality.
MJAPI mjsEquality* mjs_addEquality(mjSpec* s, mjsDefault* def); MJAPI mjsEquality* mjs_addEquality(mjSpec* s, const mjsDefault* def);
// Add tendon. // Add tendon.
MJAPI mjsTendon* mjs_addTendon(mjSpec* s, mjsDefault* def); MJAPI mjsTendon* mjs_addTendon(mjSpec* s, const mjsDefault* def);
// Wrap site using tendon. // Wrap site using tendon.
MJAPI mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name); MJAPI mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name);
@@ -169,7 +169,7 @@ MJAPI mjsDefault* mjs_addDefault(mjSpec* s, const char* classname, const mjsDefa
//---------------------------------- Add assets ---------------------------------------------------- //---------------------------------- Add assets ----------------------------------------------------
// Add mesh. // Add mesh.
MJAPI mjsMesh* mjs_addMesh(mjSpec* s, mjsDefault* def); MJAPI mjsMesh* mjs_addMesh(mjSpec* s, const mjsDefault* def);
// Add height field. // Add height field.
MJAPI mjsHField* mjs_addHField(mjSpec* s); MJAPI mjsHField* mjs_addHField(mjSpec* s);
@@ -181,7 +181,7 @@ MJAPI mjsSkin* mjs_addSkin(mjSpec* s);
MJAPI mjsTexture* mjs_addTexture(mjSpec* s); MJAPI mjsTexture* mjs_addTexture(mjSpec* s);
// Add material. // Add material.
MJAPI mjsMaterial* mjs_addMaterial(mjSpec* s, mjsDefault* def); MJAPI mjsMaterial* mjs_addMaterial(mjSpec* s, const mjsDefault* def);
//---------------------------------- Find/get utilities -------------------------------------------- //---------------------------------- Find/get utilities --------------------------------------------
@@ -208,7 +208,7 @@ MJAPI mjsFrame* mjs_findFrame(mjSpec* s, const char* name);
MJAPI mjsDefault* mjs_getDefault(mjsElement* element); MJAPI mjsDefault* mjs_getDefault(mjsElement* element);
// Find default in model by class name. // Find default in model by class name.
MJAPI mjsDefault* mjs_findDefault(mjSpec* s, const char* classname); MJAPI const mjsDefault* mjs_findDefault(mjSpec* s, const char* classname);
// Get global default from model. // Get global default from model.
MJAPI mjsDefault* mjs_getSpecDefault(mjSpec* s); MJAPI mjsDefault* mjs_getSpecDefault(mjSpec* s);
@@ -353,7 +353,7 @@ MJAPI const double* mjs_getDouble(const mjDoubleVec* source, int* size);
//---------------------------------- Other utilities ----------------------------------------------- //---------------------------------- Other utilities -----------------------------------------------
// Set element's default. // Set element's default.
MJAPI void mjs_setDefault(mjsElement* element, mjsDefault* def); MJAPI void mjs_setDefault(mjsElement* element, const mjsDefault* def);
// Set element's enlcosing frame. // Set element's enlcosing frame.
MJAPI void mjs_setFrame(mjsElement* dest, mjsFrame* frame); MJAPI void mjs_setFrame(mjsElement* dest, mjsFrame* frame);
+29 -38
View File
@@ -2383,7 +2383,7 @@ void mjXReader::OneActuator(XMLElement* elem, mjsActuator* actuator) {
// make composite // make composite
void mjXReader::OneComposite(XMLElement* elem, mjsBody* body, mjsDefault* def) { void mjXReader::OneComposite(XMLElement* elem, mjsBody* body, const mjsDefault* def) {
string text; string text;
int n; int n;
@@ -3188,7 +3188,7 @@ void mjXReader::Asset(XMLElement* section, const mjVFS* vfs) {
name = elem->Value(); name = elem->Value();
// get class if specified, otherwise use default0 // get class if specified, otherwise use default0
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getSpecDefault(spec); def = mjs_getSpecDefault(spec);
} }
@@ -3408,7 +3408,7 @@ void mjXReader::Body(XMLElement* section, mjsBody* body, mjsFrame* frame,
name = elem->Value(); name = elem->Value();
// get class if specified, otherwise use body // get class if specified, otherwise use body
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getDefault(frame ? frame->element : body->element); def = mjs_getDefault(frame ? frame->element : body->element);
} }
@@ -3519,13 +3519,10 @@ void mjXReader::Body(XMLElement* section, mjsBody* body, mjsFrame* frame,
// frame sub-element // frame sub-element
else if (name=="frame") { else if (name=="frame") {
// read childdef // read childdef
mjsDefault* childdef = 0; bool has_childclass = ReadAttrTxt(elem, "childclass", text);
if (ReadAttrTxt(elem, "childclass", text)) { const mjsDefault* childdef = has_childclass ? mjs_findDefault(spec, text.c_str()) : nullptr;
childdef = mjs_findDefault(spec, text.c_str()); if (has_childclass && !childdef) {
mjs_findDefault(spec, text.c_str()); throw mjXError(elem, "unknown default childclass");
if (!childdef) {
throw mjXError(elem, "unknown default childclass");
}
} }
// create frame // create frame
@@ -3568,13 +3565,10 @@ void mjXReader::Body(XMLElement* section, mjsBody* body, mjsFrame* frame,
mjs_resolveOrientation(rotation, spec->compiler.degree, spec->compiler.eulerseq, &alt); mjs_resolveOrientation(rotation, spec->compiler.degree, spec->compiler.eulerseq, &alt);
// read childdef // read childdef
mjsDefault* childdef = 0; bool has_childclass = ReadAttrTxt(elem, "childclass", text);
if (ReadAttrTxt(elem, "childclass", text)) { const mjsDefault* childdef = has_childclass ? mjs_findDefault(spec, text.c_str()) : nullptr;
childdef = mjs_findDefault(spec, text.c_str()); if (has_childclass && !childdef) {
mjs_findDefault(spec, text.c_str()); throw mjXError(elem, "unknown default childclass");
if (!childdef) {
throw mjXError(elem, "unknown default childclass");
}
} }
// create subtree // create subtree
@@ -3622,13 +3616,10 @@ void mjXReader::Body(XMLElement* section, mjsBody* body, mjsFrame* frame,
// body sub-element // body sub-element
else if (name=="body") { else if (name=="body") {
// read childdef // read childdef
mjsDefault* childdef = 0; bool has_childclass = ReadAttrTxt(elem, "childclass", text);
if (ReadAttrTxt(elem, "childclass", text)) { const mjsDefault* childdef = has_childclass ? mjs_findDefault(spec, text.c_str()) : nullptr;
childdef = mjs_findDefault(spec, text.c_str()); if (has_childclass && !childdef) {
mjs_findDefault(spec, text.c_str()); throw mjXError(elem, "unknown default childclass");
if (!childdef) {
throw mjXError(elem, "unknown default childclass");
}
} }
// create child body // create child body
@@ -3720,7 +3711,7 @@ void mjXReader::Contact(XMLElement* section) {
name = elem->Value(); name = elem->Value();
// get class if specified, otherwise use default0 // get class if specified, otherwise use default0
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getSpecDefault(spec); def = mjs_getSpecDefault(spec);
} }
@@ -3765,7 +3756,7 @@ void mjXReader::Equality(XMLElement* section) {
elem = FirstChildElement(section); elem = FirstChildElement(section);
while (elem) { while (elem) {
// get class if specified, otherwise use default0 // get class if specified, otherwise use default0
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getSpecDefault(spec); def = mjs_getSpecDefault(spec);
} }
@@ -3793,7 +3784,7 @@ void mjXReader::Deformable(XMLElement* section, const mjVFS* vfs) {
name = elem->Value(); name = elem->Value();
// get class if specified, otherwise use default0 // get class if specified, otherwise use default0
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getSpecDefault(spec); def = mjs_getSpecDefault(spec);
} }
@@ -3829,7 +3820,7 @@ void mjXReader::Tendon(XMLElement* section) {
elem = FirstChildElement(section); elem = FirstChildElement(section);
while (elem) { while (elem) {
// get class if specified, otherwise use default0 // get class if specified, otherwise use default0
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getSpecDefault(spec); def = mjs_getSpecDefault(spec);
} }
@@ -3895,7 +3886,7 @@ void mjXReader::Actuator(XMLElement* section) {
elem = FirstChildElement(section); elem = FirstChildElement(section);
while (elem) { while (elem) {
// get class if specified, otherwise use default0 // get class if specified, otherwise use default0
mjsDefault* def = GetClass(elem); const mjsDefault* def = GetClass(elem);
if (!def) { if (!def) {
def = mjs_getSpecDefault(spec); def = mjs_getSpecDefault(spec);
} }
@@ -4306,19 +4297,19 @@ void mjXReader::Keyframe(XMLElement* section) {
// get defaults class // get defaults class
mjsDefault* mjXReader::GetClass(XMLElement* section) { const mjsDefault* mjXReader::GetClass(XMLElement* section) {
string text; string text;
mjsDefault* def = nullptr;
if (ReadAttrTxt(section, "class", text)) { if (!ReadAttrTxt(section, "class", text)) {
def = mjs_findDefault(spec, text.c_str()); return nullptr;
if (!def) {
throw mjXError(
section,
string("unknown default class name '" + text + "'").c_str());
}
} }
const mjsDefault* def = mjs_findDefault(spec, text.c_str());
if (!def) {
throw mjXError(
section,
string("unknown default class name '" + text + "'").c_str());
}
return def; return def;
} }
+2 -2
View File
@@ -80,12 +80,12 @@ class mjXReader : public mjXBase {
void OneEquality(tinyxml2::XMLElement* elem, mjsEquality* pequality); void OneEquality(tinyxml2::XMLElement* elem, mjsEquality* pequality);
void OneTendon(tinyxml2::XMLElement* elem, mjsTendon* ptendon); void OneTendon(tinyxml2::XMLElement* elem, mjsTendon* ptendon);
void OneActuator(tinyxml2::XMLElement* elem, mjsActuator* pactuator); void OneActuator(tinyxml2::XMLElement* elem, mjsActuator* pactuator);
void OneComposite(tinyxml2::XMLElement* elem, mjsBody* pbody, mjsDefault* def); void OneComposite(tinyxml2::XMLElement* elem, mjsBody* pbody, const mjsDefault* def);
void OneFlexcomp(tinyxml2::XMLElement* elem, mjsBody* pbody, const mjVFS* vfs); void OneFlexcomp(tinyxml2::XMLElement* elem, mjsBody* pbody, const mjVFS* vfs);
void OnePlugin(tinyxml2::XMLElement* elem, mjsPlugin* plugin); void OnePlugin(tinyxml2::XMLElement* elem, mjsPlugin* plugin);
mjXSchema schema; // schema used for validation mjXSchema schema; // schema used for validation
mjsDefault* GetClass(tinyxml2::XMLElement* section); // get default class name const mjsDefault* GetClass(tinyxml2::XMLElement* section); // get default class name
bool readingdefaults; // true while reading defaults bool readingdefaults; // true while reading defaults