diff --git a/doc/APIreference/APItypes.rst b/doc/APIreference/APItypes.rst index 65830fe3..b6df3f7a 100644 --- a/doc/APIreference/APItypes.rst +++ b/doc/APIreference/APItypes.rst @@ -91,6 +91,18 @@ Byte type used to represent boolean variables. typedef unsigned char mjtByte; +.. _mjtSize: + +mjtSize +^^^^^^^ + +Size type used to represent buffer sizes. + +.. code-block:: C + + typedef uint64_t mjtSize; + + .. _tyEnums: Enum types diff --git a/doc/includes/references.h b/doc/includes/references.h index 40147f30..28a552a0 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -134,8 +134,8 @@ struct mjSolverStat_ { // per-iteration solver statistics typedef struct mjSolverStat_ mjSolverStat; struct mjData_ { // constant sizes - size_t narena; // size of the arena in bytes (inclusive of the stack) - size_t nbuffer; // size of main buffer in bytes + mjtSize narena; // size of the arena in bytes (inclusive of the stack) + mjtSize nbuffer; // size of main buffer in bytes int nplugin; // number of plugin instances // stack pointer @@ -146,9 +146,9 @@ struct mjData_ { size_t parena; // first available byte in arena // memory utilization statistics - size_t maxuse_stack; // maximum stack allocation in bytes - size_t maxuse_threadstack[mjMAXTHREAD]; // maximum stack allocation per thread in bytes - size_t maxuse_arena; // maximum arena allocation in bytes + mjtSize maxuse_stack; // maximum stack allocation in bytes + mjtSize maxuse_threadstack[mjMAXTHREAD]; // maximum stack allocation per thread in bytes + mjtSize maxuse_arena; // maximum arena allocation in bytes int maxuse_con; // maximum number of contacts int maxuse_efc; // maximum number of scalar constraints @@ -1056,8 +1056,8 @@ struct mjModel_ { int nsensordata; // number of mjtNums in sensor data vector int npluginstate; // number of mjtNums in plugin state vector - size_t narena; // number of bytes in the mjData arena (inclusive of stack) - size_t nbuffer; // number of bytes in buffer + mjtSize narena; // number of bytes in the mjData arena (inclusive of stack) + mjtSize nbuffer; // number of bytes in buffer // ------------------------------- options and statistics @@ -1866,7 +1866,7 @@ typedef struct mjSpec_ { // model specification mjStatistic stat; // statistics override (if defined) // sizes - size_t memory; // number of bytes in arena+stack memory + mjtSize memory; // number of bytes in arena+stack memory int nemax; // max number of equality constraints int nuserdata; // number of mjtNums in userdata int nuser_body; // number of mjtNums in body_user @@ -1880,7 +1880,7 @@ typedef struct mjSpec_ { // model specification int nkey; // number of keyframes int njmax; // (deprecated) max number of constraints int nconmax; // (deprecated) max number of detected contacts - size_t nstack; // (deprecated) number of mjtNums in mjData stack + mjtSize nstack; // (deprecated) number of mjtNums in mjData stack // global data mjString* comment; // comment at top of XML diff --git a/include/mujoco/mjdata.h b/include/mujoco/mjdata.h index 1d894fd4..e4bb437d 100644 --- a/include/mujoco/mjdata.h +++ b/include/mujoco/mjdata.h @@ -162,8 +162,8 @@ typedef struct mjSolverStat_ mjSolverStat; struct mjData_ { // constant sizes - size_t narena; // size of the arena in bytes (inclusive of the stack) - size_t nbuffer; // size of main buffer in bytes + mjtSize narena; // size of the arena in bytes (inclusive of the stack) + mjtSize nbuffer; // size of main buffer in bytes int nplugin; // number of plugin instances // stack pointer @@ -174,9 +174,9 @@ struct mjData_ { size_t parena; // first available byte in arena // memory utilization statistics - size_t maxuse_stack; // maximum stack allocation in bytes - size_t maxuse_threadstack[mjMAXTHREAD]; // maximum stack allocation per thread in bytes - size_t maxuse_arena; // maximum arena allocation in bytes + mjtSize maxuse_stack; // maximum stack allocation in bytes + mjtSize maxuse_threadstack[mjMAXTHREAD]; // maximum stack allocation per thread in bytes + mjtSize maxuse_arena; // maximum arena allocation in bytes int maxuse_con; // maximum number of contacts int maxuse_efc; // maximum number of scalar constraints diff --git a/include/mujoco/mjmodel.h b/include/mujoco/mjmodel.h index 6145331c..c06b6ab6 100644 --- a/include/mujoco/mjmodel.h +++ b/include/mujoco/mjmodel.h @@ -731,8 +731,8 @@ struct mjModel_ { int nsensordata; // number of mjtNums in sensor data vector int npluginstate; // number of mjtNums in plugin state vector - size_t narena; // number of bytes in the mjData arena (inclusive of stack) - size_t nbuffer; // number of bytes in buffer + mjtSize narena; // number of bytes in the mjData arena (inclusive of stack) + mjtSize nbuffer; // number of bytes in buffer // ------------------------------- options and statistics diff --git a/include/mujoco/mjspec.h b/include/mujoco/mjspec.h index 8dbc0f1a..c5b70fe1 100644 --- a/include/mujoco/mjspec.h +++ b/include/mujoco/mjspec.h @@ -170,7 +170,7 @@ typedef struct mjSpec_ { // model specification mjStatistic stat; // statistics override (if defined) // sizes - size_t memory; // number of bytes in arena+stack memory + mjtSize memory; // number of bytes in arena+stack memory int nemax; // max number of equality constraints int nuserdata; // number of mjtNums in userdata int nuser_body; // number of mjtNums in body_user @@ -184,7 +184,7 @@ typedef struct mjSpec_ { // model specification int nkey; // number of keyframes int njmax; // (deprecated) max number of constraints int nconmax; // (deprecated) max number of detected contacts - size_t nstack; // (deprecated) number of mjtNums in mjData stack + mjtSize nstack; // (deprecated) number of mjtNums in mjData stack // global data mjString* comment; // comment at top of XML diff --git a/include/mujoco/mjtnum.h b/include/mujoco/mjtnum.h index e50b5ff5..838357a2 100644 --- a/include/mujoco/mjtnum.h +++ b/include/mujoco/mjtnum.h @@ -15,6 +15,8 @@ #ifndef MUJOCO_INCLUDE_MJTNUM_H_ #define MUJOCO_INCLUDE_MJTNUM_H_ +#include + //---------------------------------- floating-point definition ------------------------------------- // floating point data type and minval @@ -34,4 +36,10 @@ typedef unsigned char mjtByte; // used for true/false +//-------------------------------------- size definition ------------------------------------------- + +typedef uint64_t mjtSize; // used for buffer sizes + + + #endif // MUJOCO_INCLUDE_MJTNUM_H_ diff --git a/python/mujoco/introspect/structs.py b/python/mujoco/introspect/structs.py index dce810e8..717728e5 100644 --- a/python/mujoco/introspect/structs.py +++ b/python/mujoco/introspect/structs.py @@ -1255,12 +1255,12 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), StructFieldDecl( name='narena', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='number of bytes in the mjData arena (inclusive of stack)', ), StructFieldDecl( name='nbuffer', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='number of bytes in buffer', ), StructFieldDecl( @@ -4866,12 +4866,12 @@ STRUCTS: Mapping[str, StructDecl] = dict([ fields=( StructFieldDecl( name='narena', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='size of the arena in bytes (inclusive of the stack)', ), StructFieldDecl( name='nbuffer', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='size of main buffer in bytes', ), StructFieldDecl( @@ -4896,20 +4896,20 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), StructFieldDecl( name='maxuse_stack', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='maximum stack allocation in bytes', ), StructFieldDecl( name='maxuse_threadstack', type=ArrayType( - inner_type=ValueType(name='size_t'), + inner_type=ValueType(name='mjtSize'), extents=(128,), ), doc='maximum stack allocation per thread in bytes', ), StructFieldDecl( name='maxuse_arena', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='maximum arena allocation in bytes', ), StructFieldDecl( @@ -8043,7 +8043,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), StructFieldDecl( name='memory', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='number of bytes in arena+stack memory', ), StructFieldDecl( @@ -8113,7 +8113,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), StructFieldDecl( name='nstack', - type=ValueType(name='size_t'), + type=ValueType(name='mjtSize'), doc='(deprecated) number of mjtNums in mjData stack', ), StructFieldDecl( diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index b3edf055..51eaf4de 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. - #include "engine/engine_io.h" +#include // NOLINT required for PRIu64 #include #include #include @@ -22,8 +22,8 @@ #include #include -#include #include +#include #include #include // IWYU pragma: keep #include @@ -320,11 +320,11 @@ static int getnint(void) { -// count size_t members in mjModel -static int getnsize(void) { +// count buffer members in mjModel (mjtSize) +static int getnbuffer(void) { int cnt = 0; -#define X(name) cnt += _Generic(MJMODEL_MEMBER(name), size_t: 1, default: 0); +#define X(name) cnt += _Generic(MJMODEL_MEMBER(name), mjtSize: 1, default: 0); MJMODEL_INTS #undef X @@ -414,7 +414,10 @@ static void mj_setPtrModel(mjModel* m) { // check size ptrdiff_t sz = ptr - (char*)m->buffer; if (m->nbuffer != sz) { - mjERROR("mjModel buffer size mismatch, expected size: %zd, actual size: %zu", m->nbuffer, sz); + mjERROR( + "mjModel buffer size mismatch, " + "expected size: %" PRIu64 ", actual size: %td", + m->nbuffer, sz); } } @@ -425,7 +428,7 @@ static void mj_setPtrModel(mjModel* m) { // performs the following operations: // *nbuffer += SKIP(*offset) + type_size*nr*nc; // *offset += SKIP(*offset) + type_size*nr*nc; -static int safeAddToBufferSize(intptr_t* offset, size_t* nbuffer, +static int safeAddToBufferSize(intptr_t* offset, mjtSize* nbuffer, size_t type_size, int nr, int nc) { if (type_size < 0 || nr < 0 || nc < 0) { return 0; @@ -724,7 +727,7 @@ void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buff int ptrbuf = 0; // standard header - int header[NHEADER] = {ID, sizeof(mjtNum), getnint(), getnsize(), getnptr()}; + int header[NHEADER] = {ID, sizeof(mjtNum), getnint(), getnbuffer(), getnptr()}; // open file for writing if no buffer if (!buffer) { @@ -752,7 +755,7 @@ void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buff #undef X } } else { - bufwrite(header, sizeof(int)*sizeof(header) / sizeof(int), buffer_sz, buffer, &ptrbuf); + bufwrite(header, sizeof(header), buffer_sz, buffer, &ptrbuf); #define X(name) bufwrite(&m->name, sizeof(m->name), buffer_sz, buffer, &ptrbuf); MJMODEL_INTS #undef X @@ -776,10 +779,6 @@ void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buff // load binary MJB model mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { - int header[NHEADER] = {0}; - int expected_header[NHEADER] = {ID, sizeof(mjtNum), getnint(), getnsize(), getnptr()}; - int ints[256]; - size_t sizes[8]; int ptrbuf = 0; mjModel *m = 0; @@ -788,9 +787,11 @@ mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { return NULL; } + int header[NHEADER] = {0}; bufread(header, NHEADER*sizeof(int), buffer_sz, buffer, &ptrbuf); // check header + int expected_header[NHEADER] = {ID, sizeof(mjtNum), getnint(), getnbuffer(), getnptr()}; for (int i=0; i < NHEADER; i++) { if (header[i] != expected_header[i]) { switch (i) { @@ -817,15 +818,16 @@ mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { } } - // read mjModel structure: info only - if (ptrbuf + sizeof(int)*getnint() + sizeof(size_t)*getnsize() > buffer_sz) { + if (ptrbuf + sizeof(int)*getnint() + sizeof(mjtSize)*getnbuffer() > buffer_sz) { mju_warning("Truncated model file - ran out of data while reading sizes"); return NULL; } - bufread(ints, sizeof(int)*getnint(), buffer_sz, buffer, &ptrbuf); - bufread(sizes, sizeof(size_t)*getnsize(), buffer_sz, buffer, &ptrbuf); - // allocate new mjModel, check sizes + // read mjModel construction fields + int ints[256]; + bufread(ints, sizeof(int)*getnint(), buffer_sz, buffer, &ptrbuf); + + // allocate new mjModel mj_makeModel(&m, ints[0], ints[1], ints[2], ints[3], ints[4], ints[5], ints[6], ints[7], ints[8], ints[9], ints[10], ints[11], ints[12], ints[13], @@ -837,8 +839,14 @@ mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { ints[49], ints[50], ints[51], ints[52], ints[53], ints[54], ints[55], ints[56], ints[57], ints[58], ints[59], ints[60], ints[61], ints[62], ints[63], ints[64], ints[65], ints[66], ints[67], ints[68], ints[69]); - if (!m || m->nbuffer != sizes[getnsize()-1]) { - mju_warning("Corrupted model, wrong size parameters"); + + // read mjModel mjtSize fields + mjtSize sizes[8]; + bufread(sizes, sizeof(mjtSize)*getnbuffer(), buffer_sz, buffer, &ptrbuf); + + // check mjtSize fields + if (!m || m->nbuffer != sizes[getnbuffer()-1]) { + mju_warning("Corrupted model, wrong nbuffer field"); mj_deleteModel(m); return NULL; } @@ -848,7 +856,7 @@ mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { int int_idx = 0; int size_idx = 0; #define X(name) \ - m->name = _Generic(m->name, size_t: sizes[size_idx++], default: ints[int_idx++]); + m->name = _Generic(m->name, mjtSize: sizes[size_idx++], default: ints[int_idx++]); MJMODEL_INTS #undef X } @@ -908,7 +916,7 @@ void mj_deleteModel(mjModel* m) { int mj_sizeModel(const mjModel* m) { int size = ( sizeof(int)*(NHEADER+getnint()) - + sizeof(size_t)*getnsize() + + sizeof(mjtSize)*getnbuffer() + sizeof(mjOption) + sizeof(mjVisual) + sizeof(mjStatistic)); @@ -1285,7 +1293,10 @@ static void mj_setPtrData(const mjModel* m, mjData* d) { // check size ptrdiff_t sz = ptr - (char*)d->buffer; if (d->nbuffer != sz) { - mjERROR("mjData buffer size mismatch, expected size: %zd, actual size: %zu", d->nbuffer, sz); + mjERROR( + "mjData buffer size mismatch, " + "expected size: %" PRIu64 ", actual size: %td", + d->nbuffer, sz); } // zero-initialize arena pointers @@ -1928,7 +1939,7 @@ static void _resetData(const mjModel* m, mjData* d, unsigned char debug_value) { // clear memory utilization stats d->maxuse_stack = 0; - mju_zeroSizeT(d->maxuse_threadstack, mjMAXTHREAD); + mju_zeroSize(d->maxuse_threadstack, mjMAXTHREAD); d->maxuse_arena = 0; d->maxuse_con = 0; d->maxuse_efc = 0; diff --git a/src/engine/engine_util_misc.c b/src/engine/engine_util_misc.c index 67e6709d..f959ce71 100644 --- a/src/engine/engine_util_misc.c +++ b/src/engine/engine_util_misc.c @@ -1367,7 +1367,12 @@ void mju_zeroInt(int* res, int n) { memset(res, 0, n*sizeof(int)); } +// set mjtSize vector to 0 +void mju_zeroSize(mjtSize* res, size_t n) { + memset(res, 0, n*sizeof(mjtSize)); +} +// set size_t vector to 0 void mju_zeroSizeT(size_t* res, size_t n) { memset(res, 0, n*sizeof(size_t)); } diff --git a/src/engine/engine_util_misc.h b/src/engine/engine_util_misc.h index 80de506a..3b25ddfb 100644 --- a/src/engine/engine_util_misc.h +++ b/src/engine/engine_util_misc.h @@ -139,6 +139,9 @@ MJAPI int mju_isZero(mjtNum* vec, int n); // set integer vector to 0 MJAPI void mju_zeroInt(int* res, int n); +// set mjtSize vector to 0 +MJAPI void mju_zeroSize(mjtSize* res, size_t n); + // set size_t vector to 0 MJAPI void mju_zeroSizeT(size_t* res, size_t n); diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index bb82bbb5..7b98e53c 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -728,142 +728,142 @@ public unsafe struct mjSolverStat_ { [StructLayout(LayoutKind.Sequential)] public unsafe struct mjData_ { - public UIntPtr narena; - public UIntPtr nbuffer; + public UInt64 narena; + public UInt64 nbuffer; public int nplugin; public UIntPtr pstack; public UIntPtr pbase; public UIntPtr parena; - public UIntPtr maxuse_stack; - public UIntPtr maxuse_threadstack0; - public UIntPtr maxuse_threadstack1; - public UIntPtr maxuse_threadstack2; - public UIntPtr maxuse_threadstack3; - public UIntPtr maxuse_threadstack4; - public UIntPtr maxuse_threadstack5; - public UIntPtr maxuse_threadstack6; - public UIntPtr maxuse_threadstack7; - public UIntPtr maxuse_threadstack8; - public UIntPtr maxuse_threadstack9; - public UIntPtr maxuse_threadstack10; - public UIntPtr maxuse_threadstack11; - public UIntPtr maxuse_threadstack12; - public UIntPtr maxuse_threadstack13; - public UIntPtr maxuse_threadstack14; - public UIntPtr maxuse_threadstack15; - public UIntPtr maxuse_threadstack16; - public UIntPtr maxuse_threadstack17; - public UIntPtr maxuse_threadstack18; - public UIntPtr maxuse_threadstack19; - public UIntPtr maxuse_threadstack20; - public UIntPtr maxuse_threadstack21; - public UIntPtr maxuse_threadstack22; - public UIntPtr maxuse_threadstack23; - public UIntPtr maxuse_threadstack24; - public UIntPtr maxuse_threadstack25; - public UIntPtr maxuse_threadstack26; - public UIntPtr maxuse_threadstack27; - public UIntPtr maxuse_threadstack28; - public UIntPtr maxuse_threadstack29; - public UIntPtr maxuse_threadstack30; - public UIntPtr maxuse_threadstack31; - public UIntPtr maxuse_threadstack32; - public UIntPtr maxuse_threadstack33; - public UIntPtr maxuse_threadstack34; - public UIntPtr maxuse_threadstack35; - public UIntPtr maxuse_threadstack36; - public UIntPtr maxuse_threadstack37; - public UIntPtr maxuse_threadstack38; - public UIntPtr maxuse_threadstack39; - public UIntPtr maxuse_threadstack40; - public UIntPtr maxuse_threadstack41; - public UIntPtr maxuse_threadstack42; - public UIntPtr maxuse_threadstack43; - public UIntPtr maxuse_threadstack44; - public UIntPtr maxuse_threadstack45; - public UIntPtr maxuse_threadstack46; - public UIntPtr maxuse_threadstack47; - public UIntPtr maxuse_threadstack48; - public UIntPtr maxuse_threadstack49; - public UIntPtr maxuse_threadstack50; - public UIntPtr maxuse_threadstack51; - public UIntPtr maxuse_threadstack52; - public UIntPtr maxuse_threadstack53; - public UIntPtr maxuse_threadstack54; - public UIntPtr maxuse_threadstack55; - public UIntPtr maxuse_threadstack56; - public UIntPtr maxuse_threadstack57; - public UIntPtr maxuse_threadstack58; - public UIntPtr maxuse_threadstack59; - public UIntPtr maxuse_threadstack60; - public UIntPtr maxuse_threadstack61; - public UIntPtr maxuse_threadstack62; - public UIntPtr maxuse_threadstack63; - public UIntPtr maxuse_threadstack64; - public UIntPtr maxuse_threadstack65; - public UIntPtr maxuse_threadstack66; - public UIntPtr maxuse_threadstack67; - public UIntPtr maxuse_threadstack68; - public UIntPtr maxuse_threadstack69; - public UIntPtr maxuse_threadstack70; - public UIntPtr maxuse_threadstack71; - public UIntPtr maxuse_threadstack72; - public UIntPtr maxuse_threadstack73; - public UIntPtr maxuse_threadstack74; - public UIntPtr maxuse_threadstack75; - public UIntPtr maxuse_threadstack76; - public UIntPtr maxuse_threadstack77; - public UIntPtr maxuse_threadstack78; - public UIntPtr maxuse_threadstack79; - public UIntPtr maxuse_threadstack80; - public UIntPtr maxuse_threadstack81; - public UIntPtr maxuse_threadstack82; - public UIntPtr maxuse_threadstack83; - public UIntPtr maxuse_threadstack84; - public UIntPtr maxuse_threadstack85; - public UIntPtr maxuse_threadstack86; - public UIntPtr maxuse_threadstack87; - public UIntPtr maxuse_threadstack88; - public UIntPtr maxuse_threadstack89; - public UIntPtr maxuse_threadstack90; - public UIntPtr maxuse_threadstack91; - public UIntPtr maxuse_threadstack92; - public UIntPtr maxuse_threadstack93; - public UIntPtr maxuse_threadstack94; - public UIntPtr maxuse_threadstack95; - public UIntPtr maxuse_threadstack96; - public UIntPtr maxuse_threadstack97; - public UIntPtr maxuse_threadstack98; - public UIntPtr maxuse_threadstack99; - public UIntPtr maxuse_threadstack100; - public UIntPtr maxuse_threadstack101; - public UIntPtr maxuse_threadstack102; - public UIntPtr maxuse_threadstack103; - public UIntPtr maxuse_threadstack104; - public UIntPtr maxuse_threadstack105; - public UIntPtr maxuse_threadstack106; - public UIntPtr maxuse_threadstack107; - public UIntPtr maxuse_threadstack108; - public UIntPtr maxuse_threadstack109; - public UIntPtr maxuse_threadstack110; - public UIntPtr maxuse_threadstack111; - public UIntPtr maxuse_threadstack112; - public UIntPtr maxuse_threadstack113; - public UIntPtr maxuse_threadstack114; - public UIntPtr maxuse_threadstack115; - public UIntPtr maxuse_threadstack116; - public UIntPtr maxuse_threadstack117; - public UIntPtr maxuse_threadstack118; - public UIntPtr maxuse_threadstack119; - public UIntPtr maxuse_threadstack120; - public UIntPtr maxuse_threadstack121; - public UIntPtr maxuse_threadstack122; - public UIntPtr maxuse_threadstack123; - public UIntPtr maxuse_threadstack124; - public UIntPtr maxuse_threadstack125; - public UIntPtr maxuse_threadstack126; - public UIntPtr maxuse_threadstack127; - public UIntPtr maxuse_arena; + public UInt64 maxuse_stack; + public UInt64 maxuse_threadstack0; + public UInt64 maxuse_threadstack1; + public UInt64 maxuse_threadstack2; + public UInt64 maxuse_threadstack3; + public UInt64 maxuse_threadstack4; + public UInt64 maxuse_threadstack5; + public UInt64 maxuse_threadstack6; + public UInt64 maxuse_threadstack7; + public UInt64 maxuse_threadstack8; + public UInt64 maxuse_threadstack9; + public UInt64 maxuse_threadstack10; + public UInt64 maxuse_threadstack11; + public UInt64 maxuse_threadstack12; + public UInt64 maxuse_threadstack13; + public UInt64 maxuse_threadstack14; + public UInt64 maxuse_threadstack15; + public UInt64 maxuse_threadstack16; + public UInt64 maxuse_threadstack17; + public UInt64 maxuse_threadstack18; + public UInt64 maxuse_threadstack19; + public UInt64 maxuse_threadstack20; + public UInt64 maxuse_threadstack21; + public UInt64 maxuse_threadstack22; + public UInt64 maxuse_threadstack23; + public UInt64 maxuse_threadstack24; + public UInt64 maxuse_threadstack25; + public UInt64 maxuse_threadstack26; + public UInt64 maxuse_threadstack27; + public UInt64 maxuse_threadstack28; + public UInt64 maxuse_threadstack29; + public UInt64 maxuse_threadstack30; + public UInt64 maxuse_threadstack31; + public UInt64 maxuse_threadstack32; + public UInt64 maxuse_threadstack33; + public UInt64 maxuse_threadstack34; + public UInt64 maxuse_threadstack35; + public UInt64 maxuse_threadstack36; + public UInt64 maxuse_threadstack37; + public UInt64 maxuse_threadstack38; + public UInt64 maxuse_threadstack39; + public UInt64 maxuse_threadstack40; + public UInt64 maxuse_threadstack41; + public UInt64 maxuse_threadstack42; + public UInt64 maxuse_threadstack43; + public UInt64 maxuse_threadstack44; + public UInt64 maxuse_threadstack45; + public UInt64 maxuse_threadstack46; + public UInt64 maxuse_threadstack47; + public UInt64 maxuse_threadstack48; + public UInt64 maxuse_threadstack49; + public UInt64 maxuse_threadstack50; + public UInt64 maxuse_threadstack51; + public UInt64 maxuse_threadstack52; + public UInt64 maxuse_threadstack53; + public UInt64 maxuse_threadstack54; + public UInt64 maxuse_threadstack55; + public UInt64 maxuse_threadstack56; + public UInt64 maxuse_threadstack57; + public UInt64 maxuse_threadstack58; + public UInt64 maxuse_threadstack59; + public UInt64 maxuse_threadstack60; + public UInt64 maxuse_threadstack61; + public UInt64 maxuse_threadstack62; + public UInt64 maxuse_threadstack63; + public UInt64 maxuse_threadstack64; + public UInt64 maxuse_threadstack65; + public UInt64 maxuse_threadstack66; + public UInt64 maxuse_threadstack67; + public UInt64 maxuse_threadstack68; + public UInt64 maxuse_threadstack69; + public UInt64 maxuse_threadstack70; + public UInt64 maxuse_threadstack71; + public UInt64 maxuse_threadstack72; + public UInt64 maxuse_threadstack73; + public UInt64 maxuse_threadstack74; + public UInt64 maxuse_threadstack75; + public UInt64 maxuse_threadstack76; + public UInt64 maxuse_threadstack77; + public UInt64 maxuse_threadstack78; + public UInt64 maxuse_threadstack79; + public UInt64 maxuse_threadstack80; + public UInt64 maxuse_threadstack81; + public UInt64 maxuse_threadstack82; + public UInt64 maxuse_threadstack83; + public UInt64 maxuse_threadstack84; + public UInt64 maxuse_threadstack85; + public UInt64 maxuse_threadstack86; + public UInt64 maxuse_threadstack87; + public UInt64 maxuse_threadstack88; + public UInt64 maxuse_threadstack89; + public UInt64 maxuse_threadstack90; + public UInt64 maxuse_threadstack91; + public UInt64 maxuse_threadstack92; + public UInt64 maxuse_threadstack93; + public UInt64 maxuse_threadstack94; + public UInt64 maxuse_threadstack95; + public UInt64 maxuse_threadstack96; + public UInt64 maxuse_threadstack97; + public UInt64 maxuse_threadstack98; + public UInt64 maxuse_threadstack99; + public UInt64 maxuse_threadstack100; + public UInt64 maxuse_threadstack101; + public UInt64 maxuse_threadstack102; + public UInt64 maxuse_threadstack103; + public UInt64 maxuse_threadstack104; + public UInt64 maxuse_threadstack105; + public UInt64 maxuse_threadstack106; + public UInt64 maxuse_threadstack107; + public UInt64 maxuse_threadstack108; + public UInt64 maxuse_threadstack109; + public UInt64 maxuse_threadstack110; + public UInt64 maxuse_threadstack111; + public UInt64 maxuse_threadstack112; + public UInt64 maxuse_threadstack113; + public UInt64 maxuse_threadstack114; + public UInt64 maxuse_threadstack115; + public UInt64 maxuse_threadstack116; + public UInt64 maxuse_threadstack117; + public UInt64 maxuse_threadstack118; + public UInt64 maxuse_threadstack119; + public UInt64 maxuse_threadstack120; + public UInt64 maxuse_threadstack121; + public UInt64 maxuse_threadstack122; + public UInt64 maxuse_threadstack123; + public UInt64 maxuse_threadstack124; + public UInt64 maxuse_threadstack125; + public UInt64 maxuse_threadstack126; + public UInt64 maxuse_threadstack127; + public UInt64 maxuse_arena; public int maxuse_con; public int maxuse_efc; public mjSolverStat_ solver0; @@ -5341,8 +5341,8 @@ public unsafe struct mjModel_ { public int nuserdata; public int nsensordata; public int npluginstate; - public UIntPtr narena; - public UIntPtr nbuffer; + public UInt64 narena; + public UInt64 nbuffer; public mjOption_ opt; public mjVisual_ vis; public mjStatistic_ stat;