gpointer mono_array_handle_pin_with_size (MonoArrayHandle handle, int size, uintptr_t idx, uint32_t *gchandle) { g_assert (gchandle != NULL); *gchandle = mono_gchandle_from_handle (MONO_HANDLE_CAST(MonoObject,handle), TRUE); MonoArray *raw = MONO_HANDLE_RAW (handle); return mono_array_addr_with_size (raw, size, idx); }
PoolVector3Array mono_array_to_PoolVector3Array(MonoArray *p_array) { PoolVector3Array ret; int length = mono_array_length(p_array); for (int i = 0; i < length; i++) { real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 3, i); MARSHALLED_IN(Vector3, raw_elem, elem); ret.push_back(elem); } return ret; }
PoolVector2Array mono_array_to_PoolVector2Array(MonoArray *p_array) { PoolVector2Array ret; if (!p_array) return ret; int length = mono_array_length(p_array); ret.resize(length); for (int i = 0; i < length; i++) { real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 2, i); MARSHALLED_IN(Vector2, raw_elem, elem); ret.set(i, elem); } return ret; }
MonoArray *PoolVector2Array_to_mono_array(const PoolVector2Array &p_array) { MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Vector2), p_array.size()); for (int i = 0; i < p_array.size(); i++) { #ifdef YOLOCOPY mono_array_set(ret, Vector2, i, p_array[i]); #else real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 2, i); const Vector2 &elem = p_array[i]; raw[0] = elem.x; raw[1] = elem.y; #endif } return ret; }
MonoArray *PoolColorArray_to_mono_array(const PoolColorArray &p_array) { MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Color), p_array.size()); for (int i = 0; i < p_array.size(); i++) { #ifdef YOLOCOPY mono_array_set(ret, Color, i, p_array[i]); #else real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 4, i); const Color &elem = p_array[i]; raw[0] = elem.r; raw[1] = elem.g; raw[2] = elem.b; raw[3] = elem.a; #endif } return ret; }