Skip to content

Commit 524fd46

Browse files
carlocastoldidariost
authored andcommitted
changed to return wyvern_data_array structs by reference rather than by value
Signed-off-by: Dario Ostuni <dario.ostuni@gmail.com>
1 parent c66a5bb commit 524fd46

1 file changed

Lines changed: 19 additions & 9 deletions

File tree

wyvern-c/src/lib.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ extern crate wyvern;
77
use libc::{free, malloc};
88
use std::ffi::CStr;
99
use std::ffi::c_void;
10+
use std::mem;
1011
use std::os::raw::c_char;
1112
use std::ptr::write;
1213
use std::slice;
@@ -201,51 +202,60 @@ pub unsafe extern "C" fn wyvern_vk_resource_get_data_float32(obj: *mut wyvern_vk
201202
}
202203

203204
#[no_mangle]
204-
pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_uint32(obj: *mut wyvern_vk_resource_t) -> wyvern_data_array_uint32_t {
205+
pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_uint32(obj: *mut wyvern_vk_resource_t) -> *mut wyvern_data_array_uint32_t {
205206
let obj = &mut *(obj as *mut Arc<VkResource>);
206207
if let TokenValue::Vector(ConstantVector::U32(value)) = obj.get_data() {
207208
let data = malloc(value.len() * 4) as *mut u32;
208209
for i in 0..value.len() {
209210
write(data.offset(i as isize), value[i]);
210211
}
211-
wyvern_data_array_uint32_t {
212+
let arr = wyvern_data_array_uint32_t {
212213
size: value.len() as u32,
213214
data: data,
214-
}
215+
};
216+
let arr_p = malloc(mem::size_of::<wyvern_data_array_uint32_t>()) as *mut wyvern_data_array_uint32_t;
217+
write(arr_p, arr);
218+
arr_p
215219
} else {
216220
panic!("Wrong type requested!");
217221
}
218222
}
219223

220224
#[no_mangle]
221-
pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_int32(obj: *mut wyvern_vk_resource_t) -> wyvern_data_array_int32_t {
225+
pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_int32(obj: *mut wyvern_vk_resource_t) -> *mut wyvern_data_array_int32_t {
222226
let obj = &mut *(obj as *mut Arc<VkResource>);
223227
if let TokenValue::Vector(ConstantVector::I32(value)) = obj.get_data() {
224228
let data = malloc(value.len() * 4) as *mut i32;
225229
for i in 0..value.len() {
226230
write(data.offset(i as isize), value[i]);
227231
}
228-
wyvern_data_array_int32_t {
232+
let arr = wyvern_data_array_int32_t {
229233
size: value.len() as u32,
230234
data: data,
231-
}
235+
};
236+
let arr_p = malloc(mem::size_of::<wyvern_data_array_int32_t>()) as *mut wyvern_data_array_int32_t;
237+
write(arr_p, arr);
238+
arr_p
232239
} else {
233240
panic!("Wrong type requested!");
234241
}
235242
}
236243

237244
#[no_mangle]
238-
pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_float32(obj: *mut wyvern_vk_resource_t) -> wyvern_data_array_float_t {
245+
pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_float32(obj: *mut wyvern_vk_resource_t) -> *mut wyvern_data_array_float_t {
239246
let obj = &mut *(obj as *mut Arc<VkResource>);
240247
if let TokenValue::Vector(ConstantVector::F32(value)) = obj.get_data() {
241248
let data = malloc(value.len() * 4) as *mut f32;
242249
for i in 0..value.len() {
243250
write(data.offset(i as isize), value[i]);
244251
}
245-
wyvern_data_array_float_t {
252+
let arr = wyvern_data_array_float_t {
246253
size: value.len() as u32,
247254
data: data,
248-
}
255+
};
256+
let arr_p = malloc(mem::size_of::<wyvern_data_array_float_t>()) as *mut wyvern_data_array_float_t;
257+
write(arr_p, arr);
258+
arr_p
249259
} else {
250260
panic!("Wrong type requested!");
251261
}

0 commit comments

Comments
 (0)