Skip to content

Commit 07449aa

Browse files
committed
Eliminate box indirection in resources. Fixes #40.
1 parent 35c833b commit 07449aa

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/resource.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,18 @@ pub unsafe fn align_alloced_mem_for_struct<T>(ptr: *const c_void) -> *const c_vo
8484
/// resource instance on creation, and decrements when dropped.
8585
pub struct ResourceCell<T> where T: NifResourceTypeProvider + Sync {
8686
raw: *const c_void,
87-
inner: *mut Box<T>,
87+
inner: *mut T,
8888
}
8989

9090
impl<T> ResourceCell<T> where T: NifResourceTypeProvider + Sync {
9191
/// Makes a new ResourceCell from the given type. Note that the type must have
9292
/// NifResourceTypeProvider implemented for it. See module documentation for info on this.
9393
pub fn new(data: T) -> Self {
94-
let alloc_size = get_alloc_size_struct::<Box<T>>();
94+
let alloc_size = get_alloc_size_struct::<T>();
9595
let mem_raw = unsafe { ::wrapper::resource::alloc_resource(T::get_type().res, alloc_size) };
96-
let aligned_mem = unsafe { align_alloced_mem_for_struct::<Box<T>>(mem_raw) } as *mut Box<T>;
96+
let aligned_mem = unsafe { align_alloced_mem_for_struct::<T>(mem_raw) as *mut T };
9797

98-
unsafe { ptr::write(aligned_mem, Box::new(data)) };
98+
unsafe { ptr::write(aligned_mem, data) };
9999

100100
ResourceCell {
101101
raw: mem_raw,
@@ -109,7 +109,7 @@ impl<T> ResourceCell<T> where T: NifResourceTypeProvider + Sync {
109109
None => return Err(NifError::BadArg),
110110
};
111111
unsafe { ::wrapper::resource::keep_resource(res_resource); }
112-
let casted_ptr = unsafe { align_alloced_mem_for_struct::<Box<T>>(res_resource) } as *mut Box<T>;
112+
let casted_ptr = unsafe { align_alloced_mem_for_struct::<T>(res_resource) as *mut T };
113113
Ok(ResourceCell {
114114
raw: res_resource,
115115
inner: casted_ptr,

0 commit comments

Comments
 (0)