Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
R
rust-rocksdb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fangzongwu
rust-rocksdb
Commits
06e5e44b
Commit
06e5e44b
authored
Dec 13, 2014
by
Tyler Neely
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
training wheels off. &[u8] not String
parent
6eb01eb0
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
6 additions
and
6 deletions
+6
-6
rocksdb.rs
src/rocksdb.rs
+6
-6
No files found.
src/rocksdb.rs
View file @
06e5e44b
...
...
@@ -54,7 +54,7 @@ impl RocksDBOptions {
}
}
pub
fn
add_merge_operator
<
'a
>
(
&
self
,
name
:
&
str
,
merge_fn
:
for
<
'a
>
fn
(
String
,
Option
<
String
>
,
&
mut
MergeOperands
)
->
Vec
<
u8
>
)
{
pub
fn
add_merge_operator
<
'a
>
(
&
self
,
name
:
&
str
,
merge_fn
:
for
<
'a
>
fn
(
&
[
u8
],
Option
<&
[
u8
]
>
,
&
mut
MergeOperands
)
->
Vec
<
u8
>
)
{
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
<
String
>
,
&
mut
MergeOperands
)
->
Vec
<
u8
>
,
merge_fn
:
for
<
'b
>
fn
(
&
[
u8
],
Option
<&
[
u8
]
>
,
&
mut
MergeOperands
)
->
Vec
<
u8
>
,
}
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
<
String
>
,
fn
test_provided_merge
<
'a
>
(
new_key
:
&
[
u8
],
existing_val
:
Option
<&
[
u8
]
>
,
mut
operands
:
&
mut
MergeOperands
)
->
Vec
<
u8
>
{
let
mut
result
:
Vec
<
u8
>
=
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
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment