Add mjv_copyData
PiperOrigin-RevId: 760642972 Change-Id: I16227fd91bf42618fda684b15b3650758ae29b13
This commit is contained in:
committed by
Copybara-Service
parent
670c97c4f7
commit
8268c6d1ff
+54
-9
@@ -1415,8 +1415,9 @@ mjData* mj_makeData(const mjModel* m) {
|
||||
|
||||
|
||||
|
||||
// copy mjData, if dest==NULL create new data
|
||||
mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
// copy mjData, if dest==NULL create new data;
|
||||
// flg_all 1: copy all fields, 0: skip fields not required for visualization
|
||||
mjData* mj_copyDataVisual(mjData* dest, const mjModel* m, const mjData* src, int flg_all) {
|
||||
void* save_buffer;
|
||||
void* save_arena;
|
||||
|
||||
@@ -1461,10 +1462,25 @@ mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
// copy buffer
|
||||
{
|
||||
MJDATA_POINTERS_PREAMBLE(m)
|
||||
#define X(type, name, nr, nc) \
|
||||
memcpy((char*)dest->name, (const char*)src->name, sizeof(type)*(m->nr)*nc);
|
||||
MJDATA_POINTERS
|
||||
#undef X
|
||||
if (flg_all) {
|
||||
#define X(type, name, nr, nc) \
|
||||
memcpy((char*)dest->name, (const char*)src->name, sizeof(type)*(m->nr)*nc);
|
||||
MJDATA_POINTERS
|
||||
#undef X
|
||||
} else {
|
||||
// redefine XNV to nothing
|
||||
#undef XNV
|
||||
#define XNV(type, name, nr, nc)
|
||||
|
||||
#define X(type, name, nr, nc) \
|
||||
memcpy((char*)dest->name, (const char*)src->name, sizeof(type)*(m->nr)*nc);
|
||||
MJDATA_POINTERS
|
||||
#undef X
|
||||
|
||||
// redefine XNV to be the same as X
|
||||
#undef XNV
|
||||
#define XNV X
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1474,7 +1490,8 @@ mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
#undef MJ_M
|
||||
#define MJ_M(n) (m->n)
|
||||
|
||||
#define X(type, name, nr, nc) \
|
||||
if (flg_all) {
|
||||
#define X(type, name, nr, nc) \
|
||||
if (src->name) { \
|
||||
dest->name = (type*)((char*)dest->arena + PTRDIFF(src->name, src->arena)); \
|
||||
ASAN_UNPOISON_MEMORY_REGION(dest->name, sizeof(type) * nr * nc); \
|
||||
@@ -1482,8 +1499,28 @@ mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
} else { \
|
||||
dest->name = NULL; \
|
||||
}
|
||||
MJDATA_ARENA_POINTERS
|
||||
#undef X
|
||||
MJDATA_ARENA_POINTERS
|
||||
#undef X
|
||||
} else {
|
||||
// redefine XNV to nothing
|
||||
#undef XNV
|
||||
#define XNV(type, name, nr, nc)
|
||||
|
||||
#define X(type, name, nr, nc) \
|
||||
if (src->name) { \
|
||||
dest->name = (type*)((char*)dest->arena + PTRDIFF(src->name, src->arena)); \
|
||||
ASAN_UNPOISON_MEMORY_REGION(dest->name, sizeof(type) * nr * nc); \
|
||||
memcpy((char*)dest->name, (const char*)src->name, sizeof(type) * nr * nc); \
|
||||
} else { \
|
||||
dest->name = NULL; \
|
||||
}
|
||||
MJDATA_ARENA_POINTERS
|
||||
#undef X
|
||||
|
||||
// redefine XNV to be the same as X
|
||||
#undef XNV
|
||||
#define XNV X
|
||||
}
|
||||
|
||||
#undef MJ_M
|
||||
#define MJ_M(n) n
|
||||
@@ -1515,6 +1552,14 @@ mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
}
|
||||
|
||||
|
||||
mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
return mj_copyDataVisual(dest, m, src, /*flg_all=*/1);
|
||||
}
|
||||
|
||||
|
||||
mjData* mjv_copyData(mjData* dest, const mjModel* m, const mjData* src) {
|
||||
return mj_copyDataVisual(dest, m, src, /*flg_all=*/0);
|
||||
}
|
||||
|
||||
static void maybe_lock_alloc_mutex(mjData* d) {
|
||||
if (d->threadpool != 0) {
|
||||
|
||||
@@ -99,6 +99,9 @@ MJAPI void mj_makeRawData(mjData** dest, const mjModel* m);
|
||||
// m is only required to contain the size fields from MJMODEL_INTS.
|
||||
MJAPI mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src);
|
||||
|
||||
// copy mjData, skip large arrays not required for abstract visualization
|
||||
MJAPI mjData* mjv_copyData(mjData* dest, const mjModel* m, const mjData* src);
|
||||
|
||||
// set data to defaults
|
||||
MJAPI void mj_resetData(const mjModel* m, mjData* d);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user