From 06e5e44b67741f1c7df3b2c43c206f0c0fb1c180 Mon Sep 17 00:00:00 2001 From: Tyler Neely Date: Sat, 13 Dec 2014 16:04:22 -0500 Subject: [PATCH] training wheels off. &[u8] not String --- src/rocksdb.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/rocksdb.rs b/src/rocksdb.rs index 02db25e..b732955 100644 --- a/src/rocksdb.rs +++ b/src/rocksdb.rs @@ -54,7 +54,7 @@ impl RocksDBOptions { } } - pub fn add_merge_operator<'a>(&self, name: &str, merge_fn: for <'a> fn (String, Option, &mut MergeOperands) -> Vec) { + pub fn add_merge_operator<'a>(&self, name: &str, merge_fn: for <'a> fn (&[u8], Option<&[u8]>, &mut MergeOperands) -> Vec) { let cb = box MergeOperatorCallback { name: name.to_c_str(), merge_fn: merge_fn, @@ -418,7 +418,7 @@ impl <'a> Iterator<&'a [u8]> for &'a mut MergeOperands<'a> { struct MergeOperatorCallback { name: CString, - merge_fn: for <'b> fn (String, Option, &mut MergeOperands) -> Vec, + merge_fn: for <'b> fn (&[u8], Option<&[u8]>, &mut MergeOperands) -> Vec, } extern "C" fn destructor_callback(raw_cb: *mut c_void) { @@ -446,7 +446,7 @@ extern "C" fn full_merge_callback( let operands = &mut MergeOperands::new(operands_list, operands_list_len, num_operands); let key = from_buf_len(key as *const u8, key_len as uint); let oldval = from_buf_len(existing_value as *const u8, existing_value_len as uint); - let mut result = (cb.merge_fn)(key, Some(oldval), operands); + let mut result = (cb.merge_fn)(key.as_bytes(), Some(oldval.as_bytes()), operands); result.shrink_to_fit(); //TODO(tan) investigate zero-copy techniques to improve performance let buf = libc::malloc(result.len() as size_t); @@ -467,7 +467,7 @@ extern "C" fn partial_merge_callback( let cb: &mut MergeOperatorCallback = &mut *(raw_cb as *mut MergeOperatorCallback); let operands = &mut MergeOperands::new(operands_list, operands_list_len, num_operands); let key = from_buf_len(key as *const u8, key_len as uint); - let mut result = (cb.merge_fn)(key, None, operands); + let mut result = (cb.merge_fn)(key.as_bytes(), None, operands); result.shrink_to_fit(); //TODO(tan) investigate zero-copy techniques to improve performance let buf = libc::malloc(result.len() as size_t); @@ -479,11 +479,11 @@ extern "C" fn partial_merge_callback( } } -fn test_provided_merge<'a>(new_key: String, existing_val: Option, +fn test_provided_merge<'a>(new_key: &[u8], existing_val: Option<&[u8]>, mut operands: &mut MergeOperands) -> Vec { let mut result: Vec = Vec::with_capacity(operands.size_hint().val0()); match existing_val { - Some(v) => result.push_all(v.as_bytes()), + Some(v) => result.push_all(v), None => (), } for op in operands {