@@ -49,22 +49,20 @@ pub unsafe extern "C" fn full_merge_callback(
4949 success : * mut u8 ,
5050 new_value_length : * mut size_t ,
5151) -> * mut c_char {
52- unsafe {
53- let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
54- let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
55- let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
56- let oldval: & [ u8 ] =
57- slice:: from_raw_parts ( existing_value as * const u8 , existing_value_len as usize ) ;
58- let mut result = ( cb. merge_fn ) ( key, Some ( oldval) , operands) ;
59- result. shrink_to_fit ( ) ;
60- // TODO(tan) investigate zero-copy techniques to improve performance
61- let buf = libc:: malloc ( result. len ( ) as size_t ) ;
62- assert ! ( !buf. is_null( ) ) ;
63- * new_value_length = result. len ( ) as size_t ;
64- * success = 1 as u8 ;
65- ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
66- buf as * mut c_char
67- }
52+ let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
53+ let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
54+ let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
55+ let oldval: & [ u8 ] =
56+ slice:: from_raw_parts ( existing_value as * const u8 , existing_value_len as usize ) ;
57+ let mut result = ( cb. merge_fn ) ( key, Some ( oldval) , operands) ;
58+ result. shrink_to_fit ( ) ;
59+ // TODO(tan) investigate zero-copy techniques to improve performance
60+ let buf = libc:: malloc ( result. len ( ) as size_t ) ;
61+ assert ! ( !buf. is_null( ) ) ;
62+ * new_value_length = result. len ( ) as size_t ;
63+ * success = 1 as u8 ;
64+ ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
65+ buf as * mut c_char
6866}
6967
7068pub unsafe extern "C" fn partial_merge_callback (
@@ -77,20 +75,18 @@ pub unsafe extern "C" fn partial_merge_callback(
7775 success : * mut u8 ,
7876 new_value_length : * mut size_t ,
7977) -> * mut c_char {
80- unsafe {
81- let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
82- let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
83- let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
84- let mut result = ( cb. merge_fn ) ( key, None , operands) ;
85- result. shrink_to_fit ( ) ;
86- // TODO(tan) investigate zero-copy techniques to improve performance
87- let buf = libc:: malloc ( result. len ( ) as size_t ) ;
88- assert ! ( !buf. is_null( ) ) ;
89- * new_value_length = result. len ( ) as size_t ;
90- * success = 1 as u8 ;
91- ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
92- buf as * mut c_char
93- }
78+ let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
79+ let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
80+ let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
81+ let mut result = ( cb. merge_fn ) ( key, None , operands) ;
82+ result. shrink_to_fit ( ) ;
83+ // TODO(tan) investigate zero-copy techniques to improve performance
84+ let buf = libc:: malloc ( result. len ( ) as size_t ) ;
85+ assert ! ( !buf. is_null( ) ) ;
86+ * new_value_length = result. len ( ) as size_t ;
87+ * success = 1 as u8 ;
88+ ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
89+ buf as * mut c_char
9490}
9591
9692pub struct MergeOperands {
0 commit comments