From a369c4f5c2bf86f8381ba8313f80e76dd5944ac6 Mon Sep 17 00:00:00 2001 From: Alexander Regueiro Date: Wed, 26 Oct 2016 00:25:29 +0100 Subject: [PATCH 1/6] Updated rocksdb submodule to v4.11.2. Fixed memory leakage bug in `tests/c_test.rs` --- Cargo.toml | 2 +- build.rs | 19 +- rocksdb | 2 +- src/lib.rs | 1393 +++++++++++++++++++++-------------------------- src/test.rs | 3 +- tests/c_test.rs | 126 ++--- 6 files changed, 690 insertions(+), 855 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 600d81a..bef7ab1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "rocksdb-sys" version = "0.2.2" authors = ["Jeremy Fitzhardinge "] license = "MIT/Apache-2.0/BSD-3-Clause" -description = "Native bindings to the rocksdb library" +description = "Native bindings to the RocksDB library" readme = "README.md" repository = "https://github.com/jsgf/rocksdb-sys.git" keywords = [ "ffi", "rocksdb" ] diff --git a/build.rs b/build.rs index aa0ff42..182c34b 100644 --- a/build.rs +++ b/build.rs @@ -13,19 +13,18 @@ fn main() { cmd.current_dir(Path::new("rocksdb")) .arg("EXTRA_CFLAGS=-fPIC") - .arg("EXTRA_CXXFLAGS=-fPIC") + .arg("EXTRA_CXXFLAGS=-fPIC") // -std=c++11 -stdlib=libstdc++ .arg(format!("INSTALL_PATH={}", out_dir)); if let Ok(jobs) = num_jobs { cmd.arg(format!("-j{}", jobs)); } - cmd.arg("install-static"); + cmd.arg("install"); match cmd.output() { Ok(out) => if !out.status.success() { - let _ = writeln!(&mut stderr, "build failed:\nstdout:\n{}\nstderr:\n{}", - String::from_utf8(out.stdout).unwrap(), String::from_utf8(out.stderr).unwrap()); + let _ = writeln!(&mut stderr, "build failed:\nstdout:\n{}\nstderr:\n{}", String::from_utf8(out.stdout).unwrap(), String::from_utf8(out.stderr).unwrap()); exit(1); }, Err(e) => { let _ = writeln!(&mut stderr, "command execution failed: {:?}", e); exit(1) } @@ -33,7 +32,7 @@ fn main() { let config = match File::open("rocksdb/make_config.mk") { Ok(c) => c, - Err(e) => { let _ = writeln!(&mut stderr, "Failed to open rocksdb/make_config.mk: {}", e); exit(1) } + Err(e) => { let _ = writeln!(&mut stderr, "Failed to open `rocksdb/make_config.mk`: {}", e); exit(1) } }; let config = BufReader::new(config); @@ -47,21 +46,21 @@ fn main() { let words: Vec<_> = line.split_whitespace().collect(); if !words[0].starts_with("PLATFORM_LDFLAGS=") { - continue + continue; } - + lz4 = words.iter().any(|w| *w == "-llz4"); snappy = words.iter().any( |w| *w == "-lsnappy"); zlib = words.iter().any(|w| *w == "-lz"); bzip2 = words.iter().any(|w| *w == "-lbz2"); break; } - + println!("cargo:rustc-link-search=native={}/lib", out_dir); - println!("cargo:rustc-link-lib=static=rocksdb"); - println!("cargo:rustc-link-lib=stdc++"); + println!("cargo:rustc-link-lib=rocksdb"); if lz4 { println!("cargo:rustc-link-lib=lz4"); } if snappy { println!("cargo:rustc-link-lib=snappy"); } if zlib { println!("cargo:rustc-link-lib=z"); } if bzip2 { println!("cargo:rustc-link-lib=bz2"); } + println!("cargo:rustc-link-lib=stdc++"); } diff --git a/rocksdb b/rocksdb index dab9465..9808491 160000 --- a/rocksdb +++ b/rocksdb @@ -1 +1 @@ -Subproject commit dab9465c40b0a8fb7a59b461e516f27ff074274b +Subproject commit 98084910a7355eb3447afb8f48549cd47acf55cf diff --git a/src/lib.rs b/src/lib.rs index 9d326cf..b804857 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,820 +1,651 @@ -//! Raw binding for RocksDB. -//! -//! This is just a thin binding to the RocksDB C API, mostly generated -//! by rust-bindgen and lightly edited. This is intended to underpin a -//! higher level library rather than for direct use. -#![allow(dead_code, non_upper_case_globals, non_camel_case_types)] +#![allow(dead_code, non_camel_case_types, non_upper_case_globals, non_snake_case)] + +extern crate libc; #[cfg(test)] mod test; -extern crate libc; +use libc::*; -pub const kDefaultColumnFamilyName: &'static str = "default"; - -/* automatically generated by rust-bindgen, hand edited */ -use libc::{size_t, uint64_t, int64_t, uint32_t, int32_t, c_void, c_int, c_uint, c_char, c_uchar, c_double}; - -pub enum Struct_rocksdb_t { } -pub type rocksdb_t = Struct_rocksdb_t; -pub enum Struct_rocksdb_backup_engine_t { } -pub type rocksdb_backup_engine_t = Struct_rocksdb_backup_engine_t; -pub enum Struct_rocksdb_backup_engine_info_t { } -pub type rocksdb_backup_engine_info_t = Struct_rocksdb_backup_engine_info_t; -pub enum Struct_rocksdb_restore_options_t { } -pub type rocksdb_restore_options_t = Struct_rocksdb_restore_options_t; -pub enum Struct_rocksdb_cache_t { } -pub type rocksdb_cache_t = Struct_rocksdb_cache_t; -pub enum Struct_rocksdb_compactionfilter_t { } -pub type rocksdb_compactionfilter_t = Struct_rocksdb_compactionfilter_t; -pub enum Struct_rocksdb_compactionfiltercontext_t { } -pub type rocksdb_compactionfiltercontext_t = Struct_rocksdb_compactionfiltercontext_t; -pub enum Struct_rocksdb_compactionfilterfactory_t { } -pub type rocksdb_compactionfilterfactory_t = Struct_rocksdb_compactionfilterfactory_t; -pub enum Struct_rocksdb_comparator_t { } -pub type rocksdb_comparator_t = Struct_rocksdb_comparator_t; -pub enum Struct_rocksdb_env_t { } -pub type rocksdb_env_t = Struct_rocksdb_env_t; -pub enum Struct_rocksdb_fifo_compaction_options_t { } -pub type rocksdb_fifo_compaction_options_t = Struct_rocksdb_fifo_compaction_options_t; -pub enum Struct_rocksdb_filelock_t { } -pub type rocksdb_filelock_t = Struct_rocksdb_filelock_t; -pub enum Struct_rocksdb_filterpolicy_t { } -pub type rocksdb_filterpolicy_t = Struct_rocksdb_filterpolicy_t; -pub enum Struct_rocksdb_flushoptions_t { } -pub type rocksdb_flushoptions_t = Struct_rocksdb_flushoptions_t; -pub enum Struct_rocksdb_iterator_t { } -pub type rocksdb_iterator_t = Struct_rocksdb_iterator_t; -pub enum Struct_rocksdb_logger_t { } -pub type rocksdb_logger_t = Struct_rocksdb_logger_t; -pub enum Struct_rocksdb_mergeoperator_t { } -pub type rocksdb_mergeoperator_t = Struct_rocksdb_mergeoperator_t; -pub enum Struct_rocksdb_options_t { } -pub type rocksdb_options_t = Struct_rocksdb_options_t; -pub enum Struct_rocksdb_block_based_table_options_t { } -pub type rocksdb_block_based_table_options_t = Struct_rocksdb_block_based_table_options_t; -pub enum Struct_rocksdb_cuckoo_table_options_t { } -pub type rocksdb_cuckoo_table_options_t = Struct_rocksdb_cuckoo_table_options_t; -pub enum Struct_rocksdb_randomfile_t { } -pub type rocksdb_randomfile_t = Struct_rocksdb_randomfile_t; -pub enum Struct_rocksdb_readoptions_t { } -pub type rocksdb_readoptions_t = Struct_rocksdb_readoptions_t; -pub enum Struct_rocksdb_seqfile_t { } -pub type rocksdb_seqfile_t = Struct_rocksdb_seqfile_t; -pub enum Struct_rocksdb_slicetransform_t { } -pub type rocksdb_slicetransform_t = Struct_rocksdb_slicetransform_t; -pub enum Struct_rocksdb_snapshot_t { } -pub type rocksdb_snapshot_t = Struct_rocksdb_snapshot_t; -pub enum Struct_rocksdb_writablefile_t { } -pub type rocksdb_writablefile_t = Struct_rocksdb_writablefile_t; -pub enum Struct_rocksdb_writebatch_t { } -pub type rocksdb_writebatch_t = Struct_rocksdb_writebatch_t; -pub enum Struct_rocksdb_writeoptions_t { } -pub type rocksdb_writeoptions_t = Struct_rocksdb_writeoptions_t; -pub enum Struct_rocksdb_universal_compaction_options_t { } -pub type rocksdb_universal_compaction_options_t = Struct_rocksdb_universal_compaction_options_t; -pub enum Struct_rocksdb_livefiles_t { } -pub type rocksdb_livefiles_t = Struct_rocksdb_livefiles_t; -pub enum Struct_rocksdb_column_family_handle_t { } -pub type rocksdb_column_family_handle_t = Struct_rocksdb_column_family_handle_t; - -pub const rocksdb_block_based_table_index_type_binary_search: c_uint = 0; -pub const rocksdb_block_based_table_index_type_hash_search: c_uint = 1; - -pub const rocksdb_no_compression: c_uint = 0; -pub const rocksdb_snappy_compression: c_uint = 1; -pub const rocksdb_zlib_compression: c_uint = 2; -pub const rocksdb_bz2_compression: c_uint = 3; -pub const rocksdb_lz4_compression: c_uint = 4; -pub const rocksdb_lz4hc_compression: c_uint = 5; - -pub const rocksdb_level_compaction: c_uint = 0; -pub const rocksdb_universal_compaction: c_uint = 1; -pub const rocksdb_fifo_compaction: c_uint = 2; - -pub const rocksdb_similar_size_compaction_stop_style: c_uint = 0; -pub const rocksdb_total_size_compaction_stop_style: c_uint = 1; - -#[link(name = "rocksdb")] extern "C" { - pub fn rocksdb_open(options: *const rocksdb_options_t, - name: *const c_char, - errptr: *mut *mut c_char) -> *mut rocksdb_t; - pub fn rocksdb_open_for_read_only(options: *const rocksdb_options_t, - name: *const c_char, - error_if_log_file_exist: c_uchar, - errptr: *mut *mut c_char) -> *mut rocksdb_t; - pub fn rocksdb_backup_engine_open(options: *const rocksdb_options_t, - path: *const c_char, - errptr: *mut *mut c_char) -> *mut rocksdb_backup_engine_t; - pub fn rocksdb_backup_engine_create_new_backup(be: *mut rocksdb_backup_engine_t, - db: *mut rocksdb_t, - errptr: *mut *mut c_char); + pub fn rocksdb_open(options: *const rocksdb_options_t, name: *const c_char, errptr: *mut *mut c_char) -> *mut rocksdb_t; + + pub fn rocksdb_open_for_read_only(options: *const rocksdb_options_t, name: *const c_char, error_if_log_file_exist: c_uchar, errptr: *mut *mut c_char) -> *mut rocksdb_t; + + pub fn rocksdb_backup_engine_open(options: *const rocksdb_options_t, path: *const c_char, errptr: *mut *mut c_char) -> *mut rocksdb_backup_engine_t; + + pub fn rocksdb_backup_engine_create_new_backup(be: *mut rocksdb_backup_engine_t, db: *mut rocksdb_t, errptr: *mut *mut c_char); + + pub fn rocksdb_backup_engine_purge_old_backups(be: *mut rocksdb_backup_engine_t, num_backups_to_keep: uint32_t, errptr: *mut *mut c_char); + pub fn rocksdb_restore_options_create() -> *mut rocksdb_restore_options_t; + pub fn rocksdb_restore_options_destroy(opt: *mut rocksdb_restore_options_t); - pub fn rocksdb_restore_options_set_keep_log_files(opt: *mut rocksdb_restore_options_t, - v: c_int); - pub fn rocksdb_backup_engine_restore_db_from_latest_backup(be: *mut rocksdb_backup_engine_t, - db_dir: *const c_char, - wal_dir: *const c_char, - restore_options: *const rocksdb_restore_options_t, - errptr: *mut *mut c_char); + + pub fn rocksdb_restore_options_set_keep_log_files(opt: *mut rocksdb_restore_options_t, v: c_int); + + pub fn rocksdb_backup_engine_restore_db_from_latest_backup(be: *mut rocksdb_backup_engine_t, db_dir: *const c_char, wal_dir: *const c_char, restore_options: *const rocksdb_restore_options_t, errptr: *mut *mut c_char); + pub fn rocksdb_backup_engine_get_backup_info(be: *mut rocksdb_backup_engine_t) -> *const rocksdb_backup_engine_info_t; + pub fn rocksdb_backup_engine_info_count(info: *const rocksdb_backup_engine_info_t) -> c_int; - pub fn rocksdb_backup_engine_info_timestamp(info: *const rocksdb_backup_engine_info_t, - index: c_int) -> int64_t; - pub fn rocksdb_backup_engine_info_backup_id(info: *const rocksdb_backup_engine_info_t, - index: c_int) -> uint32_t; - pub fn rocksdb_backup_engine_info_size(info: *const rocksdb_backup_engine_info_t, - index: c_int) -> uint64_t; - pub fn rocksdb_backup_engine_info_number_files(info: *const rocksdb_backup_engine_info_t, - index: c_int) -> uint32_t; + + pub fn rocksdb_backup_engine_info_timestamp(info: *const rocksdb_backup_engine_info_t, index: c_int) -> int64_t; + + pub fn rocksdb_backup_engine_info_backup_id(info: *const rocksdb_backup_engine_info_t, index: c_int) -> uint32_t; + + pub fn rocksdb_backup_engine_info_size(info: *const rocksdb_backup_engine_info_t, index: c_int) -> uint64_t; + + pub fn rocksdb_backup_engine_info_number_files(info: *const rocksdb_backup_engine_info_t, index: c_int) -> uint32_t; + pub fn rocksdb_backup_engine_info_destroy(info: *const rocksdb_backup_engine_info_t); + pub fn rocksdb_backup_engine_close(be: *mut rocksdb_backup_engine_t); - pub fn rocksdb_open_column_families(options: *const rocksdb_options_t, - name: *const c_char, - num_column_families: c_int, - column_family_names: *const *const c_char, - column_family_options: *const *mut rocksdb_options_t, - column_family_handles: *mut *mut rocksdb_column_family_handle_t, - errptr: *mut *mut c_char) -> *mut rocksdb_t; - pub fn rocksdb_open_for_read_only_column_families(options: *const rocksdb_options_t, - name: *const c_char, - num_column_families: c_int, - column_family_names: *const *const c_char, - column_family_options: *const *mut rocksdb_options_t, - column_family_handles: *mut *mut rocksdb_column_family_handle_t, - error_if_log_file_exist: c_uchar, - errptr: *mut *mut c_char) -> *mut rocksdb_t; - pub fn rocksdb_list_column_families(options: *const rocksdb_options_t, - name: *const c_char, - lencf: *mut size_t, - errptr: *mut *mut c_char) -> *mut *mut c_char; - pub fn rocksdb_list_column_families_destroy(list: *mut *mut c_char, - len: size_t); - pub fn rocksdb_create_column_family(db: *mut rocksdb_t, - column_family_options: *const rocksdb_options_t, - column_family_name: *const c_char, - errptr: *mut *mut c_char) -> *mut rocksdb_column_family_handle_t; - pub fn rocksdb_drop_column_family(db: *mut rocksdb_t, - handle: *mut rocksdb_column_family_handle_t, - errptr: *mut *mut c_char); - pub fn rocksdb_column_family_handle_destroy(arg1: *mut rocksdb_column_family_handle_t); + + pub fn rocksdb_open_column_families(options: *const rocksdb_options_t, name: *const c_char, num_column_families: c_int, column_family_names: *const *const c_char, column_family_options: *const *const rocksdb_options_t, column_family_handles: *mut *mut rocksdb_column_family_handle_t, errptr: *mut *mut c_char) -> *mut rocksdb_t; + + pub fn rocksdb_open_for_read_only_column_families(options: *const rocksdb_options_t, name: *const c_char, num_column_families: c_int, column_family_names: *const *const c_char, column_family_options: *const *const rocksdb_options_t, column_family_handles: *mut *mut rocksdb_column_family_handle_t, error_if_log_file_exist: c_uchar, errptr: *mut *mut c_char) -> *mut rocksdb_t; + + pub fn rocksdb_list_column_families(options: *const rocksdb_options_t, name: *const c_char, lencf: *mut size_t, errptr: *mut *mut c_char) -> *mut *mut c_char; + + pub fn rocksdb_list_column_families_destroy(list: *mut *mut c_char, len: size_t); + + pub fn rocksdb_create_column_family(db: *mut rocksdb_t, column_family_options: *const rocksdb_options_t, column_family_name: *const c_char, errptr: *mut *mut c_char) -> *mut rocksdb_column_family_handle_t; + + pub fn rocksdb_drop_column_family(db: *mut rocksdb_t, handle: *mut rocksdb_column_family_handle_t, errptr: *mut *mut c_char); + + pub fn rocksdb_column_family_handle_destroy(handle: *mut rocksdb_column_family_handle_t); + pub fn rocksdb_close(db: *mut rocksdb_t); - pub fn rocksdb_put(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - key: *const c_char, keylen: size_t, - val: *const c_char, vallen: size_t, - errptr: *mut *mut c_char); - pub fn rocksdb_put_cf(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, keylen: size_t, - val: *const c_char, vallen: size_t, - errptr: *mut *mut c_char); - pub fn rocksdb_delete(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - key: *const c_char, keylen: size_t, - errptr: *mut *mut c_char); - pub fn rocksdb_delete_cf(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, keylen: size_t, - errptr: *mut *mut c_char); - pub fn rocksdb_merge(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - key: *const c_char, keylen: size_t, - val: *const c_char, vallen: size_t, - errptr: *mut *mut c_char); - pub fn rocksdb_merge_cf(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, keylen: size_t, - val: *const c_char, vallen: size_t, - errptr: *mut *mut c_char); - pub fn rocksdb_write(db: *mut rocksdb_t, - options: *const rocksdb_writeoptions_t, - batch: *mut rocksdb_writebatch_t, - errptr: *mut *mut c_char); - pub fn rocksdb_get(db: *mut rocksdb_t, - options: *const rocksdb_readoptions_t, - key: *const c_char, keylen: size_t, - vallen: *mut size_t, errptr: *mut *mut c_char) -> *mut c_char; - pub fn rocksdb_get_cf(db: *mut rocksdb_t, - options: *const rocksdb_readoptions_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, keylen: size_t, - vallen: *mut size_t, - errptr: *mut *mut c_char) -> *mut c_char; - pub fn rocksdb_multi_get(db: *mut rocksdb_t, - options: *const rocksdb_readoptions_t, - num_keys: size_t, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t, - values_list: *mut *mut c_char, - values_list_sizes: *mut size_t, - errs: *mut *mut c_char); - pub fn rocksdb_multi_get_cf(db: *mut rocksdb_t, - options: *const rocksdb_readoptions_t, - column_families: *const *const rocksdb_column_family_handle_t, - num_keys: size_t, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t, - values_list: *mut *mut c_char, - values_list_sizes: *mut size_t, - errs: *mut *mut c_char); - pub fn rocksdb_create_iterator(db: *mut rocksdb_t, - options: *const rocksdb_readoptions_t) -> *mut rocksdb_iterator_t; - pub fn rocksdb_create_iterator_cf(db: *mut rocksdb_t, - options: *const rocksdb_readoptions_t, - column_family: *mut rocksdb_column_family_handle_t) -> *mut rocksdb_iterator_t; + + pub fn rocksdb_put(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_put_cf(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_delete(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, key: *const c_char, keylen: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_delete_cf(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, keylen: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_merge(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_merge_cf(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_write(db: *mut rocksdb_t, options: *const rocksdb_writeoptions_t, batch: *mut rocksdb_writebatch_t, errptr: *mut *mut c_char); + + pub fn rocksdb_get(db: *mut rocksdb_t, options: *const rocksdb_readoptions_t, key: *const c_char, keylen: size_t, vallen: *mut size_t, errptr: *mut *mut c_char) -> *mut c_char; + + pub fn rocksdb_get_cf(db: *mut rocksdb_t, options: *const rocksdb_readoptions_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, keylen: size_t, vallen: *mut size_t, errptr: *mut *mut c_char) -> *mut c_char; + + pub fn rocksdb_multi_get(db: *mut rocksdb_t, options: *const rocksdb_readoptions_t, num_keys: size_t, keys_list: *const *const c_char, keys_list_sizes: *const size_t, values_list: *mut *mut c_char, values_list_sizes: *mut size_t, errs: *mut *mut c_char); + + pub fn rocksdb_multi_get_cf(db: *mut rocksdb_t, options: *const rocksdb_readoptions_t, column_families: *const *const rocksdb_column_family_handle_t, num_keys: size_t, keys_list: *const *const c_char, keys_list_sizes: *const size_t, values_list: *mut *mut c_char, values_list_sizes: *mut size_t, errs: *mut *mut c_char); + + pub fn rocksdb_create_iterator(db: *mut rocksdb_t, options: *const rocksdb_readoptions_t) -> *mut rocksdb_iterator_t; + + pub fn rocksdb_create_iterator_cf(db: *mut rocksdb_t, options: *const rocksdb_readoptions_t, column_family: *mut rocksdb_column_family_handle_t) -> *mut rocksdb_iterator_t; + + pub fn rocksdb_create_iterators(db: *mut rocksdb_t, opts: *mut rocksdb_readoptions_t, column_families: *mut *mut rocksdb_column_family_handle_t, iterators: *mut *mut rocksdb_iterator_t, size: size_t, errptr: *mut *mut c_char); + pub fn rocksdb_create_snapshot(db: *mut rocksdb_t) -> *const rocksdb_snapshot_t; - pub fn rocksdb_release_snapshot(db: *mut rocksdb_t, - snapshot: *const rocksdb_snapshot_t); - pub fn rocksdb_property_value(db: *mut rocksdb_t, - propname: *const c_char) -> *mut c_char; - pub fn rocksdb_property_value_cf(db: *mut rocksdb_t, - column_family: *mut rocksdb_column_family_handle_t, - propname: *const c_char) -> *mut c_char; - pub fn rocksdb_approximate_sizes(db: *mut rocksdb_t, - num_ranges: c_int, - range_start_key: *const *const c_char, - range_start_key_len: *const size_t, - range_limit_key: *const *const c_char, - range_limit_key_len: *const size_t, - sizes: *mut uint64_t); - pub fn rocksdb_approximate_sizes_cf(db: *mut rocksdb_t, - column_family: *mut rocksdb_column_family_handle_t, - num_ranges: c_int, - range_start_key: *const *const c_char, - range_start_key_len: *const size_t, - range_limit_key: *const *const c_char, - range_limit_key_len: *const size_t, - sizes: *mut uint64_t); - pub fn rocksdb_compact_range(db: *mut rocksdb_t, - start_key: *const c_char, - start_key_len: size_t, - limit_key: *const c_char, - limit_key_len: size_t); - pub fn rocksdb_compact_range_cf(db: *mut rocksdb_t, - column_family: *mut rocksdb_column_family_handle_t, - start_key: *const c_char, - start_key_len: size_t, - limit_key: *const c_char, - limit_key_len: size_t); - pub fn rocksdb_delete_file(db: *mut rocksdb_t, - name: *const c_char); + + pub fn rocksdb_release_snapshot(db: *mut rocksdb_t, snapshot: *const rocksdb_snapshot_t); + + pub fn rocksdb_property_value(db: *mut rocksdb_t, propname: *const c_char) -> *mut c_char; + + pub fn rocksdb_property_value_cf(db: *mut rocksdb_t, column_family: *mut rocksdb_column_family_handle_t, propname: *const c_char) -> *mut c_char; + + pub fn rocksdb_approximate_sizes(db: *mut rocksdb_t, num_ranges: c_int, range_start_key: *const *const c_char, range_start_key_len: *const size_t, range_limit_key: *const *const c_char, range_limit_key_len: *const size_t, sizes: *mut uint64_t); + + pub fn rocksdb_approximate_sizes_cf(db: *mut rocksdb_t, column_family: *mut rocksdb_column_family_handle_t, num_ranges: c_int, range_start_key: *const *const c_char, range_start_key_len: *const size_t, range_limit_key: *const *const c_char, range_limit_key_len: *const size_t, sizes: *mut uint64_t); + + pub fn rocksdb_compact_range(db: *mut rocksdb_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t); + + pub fn rocksdb_compact_range_cf(db: *mut rocksdb_t, column_family: *mut rocksdb_column_family_handle_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t); + + pub fn rocksdb_delete_file(db: *mut rocksdb_t, name: *const c_char); + pub fn rocksdb_livefiles(db: *mut rocksdb_t) -> *const rocksdb_livefiles_t; - pub fn rocksdb_flush(db: *mut rocksdb_t, - options: *const rocksdb_flushoptions_t, - errptr: *mut *mut c_char); - pub fn rocksdb_disable_file_deletions(db: *mut rocksdb_t, - errptr: *mut *mut c_char); - pub fn rocksdb_enable_file_deletions(db: *mut rocksdb_t, - force: c_uchar, - errptr: *mut *mut c_char); - pub fn rocksdb_destroy_db(options: *const rocksdb_options_t, - name: *const c_char, - errptr: *mut *mut c_char); - pub fn rocksdb_repair_db(options: *const rocksdb_options_t, - name: *const c_char, - errptr: *mut *mut c_char); - pub fn rocksdb_iter_destroy(arg1: *mut rocksdb_iterator_t); - pub fn rocksdb_iter_valid(arg1: *const rocksdb_iterator_t) -> c_uchar; - pub fn rocksdb_iter_seek_to_first(arg1: *mut rocksdb_iterator_t); - pub fn rocksdb_iter_seek_to_last(arg1: *mut rocksdb_iterator_t); - pub fn rocksdb_iter_seek(arg1: *mut rocksdb_iterator_t, - k: *const c_char, klen: size_t); - pub fn rocksdb_iter_next(arg1: *mut rocksdb_iterator_t); - pub fn rocksdb_iter_prev(arg1: *mut rocksdb_iterator_t); - pub fn rocksdb_iter_key(arg1: *const rocksdb_iterator_t, - klen: *mut size_t) -> *const c_char; - pub fn rocksdb_iter_value(arg1: *const rocksdb_iterator_t, - vlen: *mut size_t) -> *const c_char; - pub fn rocksdb_iter_get_error(arg1: *const rocksdb_iterator_t, - errptr: *mut *mut c_char); + + pub fn rocksdb_flush(db: *mut rocksdb_t, options: *const rocksdb_flushoptions_t, errptr: *mut *mut c_char); + + pub fn rocksdb_disable_file_deletions(db: *mut rocksdb_t, errptr: *mut *mut c_char); + + pub fn rocksdb_enable_file_deletions(db: *mut rocksdb_t, force: c_uchar, errptr: *mut *mut c_char); + + pub fn rocksdb_destroy_db(options: *const rocksdb_options_t, name: *const c_char, errptr: *mut *mut c_char); + + pub fn rocksdb_repair_db(options: *const rocksdb_options_t, name: *const c_char, errptr: *mut *mut c_char); + + pub fn rocksdb_iter_destroy(iterator: *mut rocksdb_iterator_t); + + pub fn rocksdb_iter_valid(iterator: *const rocksdb_iterator_t) -> c_uchar; + + pub fn rocksdb_iter_seek_to_first(iterator: *mut rocksdb_iterator_t); + + pub fn rocksdb_iter_seek_to_last(iterator: *mut rocksdb_iterator_t); + + pub fn rocksdb_iter_seek(iterator: *mut rocksdb_iterator_t, k: *const c_char, klen: size_t); + + pub fn rocksdb_iter_next(iterator: *mut rocksdb_iterator_t); + + pub fn rocksdb_iter_prev(iterator: *mut rocksdb_iterator_t); + + pub fn rocksdb_iter_key(iterator: *const rocksdb_iterator_t, klen: *mut size_t) -> *const c_char; + + pub fn rocksdb_iter_value(iterator: *const rocksdb_iterator_t, vlen: *mut size_t) -> *const c_char; + + pub fn rocksdb_iter_get_error(iterator: *const rocksdb_iterator_t, errptr: *mut *mut c_char); + pub fn rocksdb_writebatch_create() -> *mut rocksdb_writebatch_t; - pub fn rocksdb_writebatch_create_from(rep: *const c_char, - size: size_t) -> *mut rocksdb_writebatch_t; - pub fn rocksdb_writebatch_destroy(arg1: *mut rocksdb_writebatch_t); - pub fn rocksdb_writebatch_clear(arg1: *mut rocksdb_writebatch_t); - pub fn rocksdb_writebatch_count(arg1: *mut rocksdb_writebatch_t) -> c_int; - pub fn rocksdb_writebatch_put(arg1: *mut rocksdb_writebatch_t, - key: *const c_char, klen: size_t, - val: *const c_char, vlen: size_t); - pub fn rocksdb_writebatch_put_cf(arg1: *mut rocksdb_writebatch_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, klen: size_t, - val: *const c_char, vlen: size_t); - pub fn rocksdb_writebatch_putv(b: *mut rocksdb_writebatch_t, - num_keys: c_int, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t, - num_values: c_int, - values_list: *const *const c_char, - values_list_sizes: *const size_t); - pub fn rocksdb_writebatch_putv_cf(b: *mut rocksdb_writebatch_t, - column_family: *mut rocksdb_column_family_handle_t, - num_keys: c_int, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t, - num_values: c_int, - values_list: *const *const c_char, - values_list_sizes: *const size_t); - pub fn rocksdb_writebatch_merge(arg1: *mut rocksdb_writebatch_t, - key: *const c_char, klen: size_t, - val: *const c_char, vlen: size_t); - pub fn rocksdb_writebatch_merge_cf(arg1: *mut rocksdb_writebatch_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, - klen: size_t, - val: *const c_char, - vlen: size_t); - pub fn rocksdb_writebatch_mergev(b: *mut rocksdb_writebatch_t, - num_keys: c_int, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t, - num_values: c_int, - values_list: *const *const c_char, - values_list_sizes: *const size_t); - pub fn rocksdb_writebatch_mergev_cf(b: *mut rocksdb_writebatch_t, - column_family: *mut rocksdb_column_family_handle_t, - num_keys: c_int, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t, - num_values: c_int, - values_list: *const *const c_char, - values_list_sizes: *const size_t); - pub fn rocksdb_writebatch_delete(arg1: *mut rocksdb_writebatch_t, - key: *const c_char, klen: size_t); - pub fn rocksdb_writebatch_delete_cf(arg1: *mut rocksdb_writebatch_t, - column_family: *mut rocksdb_column_family_handle_t, - key: *const c_char, - klen: size_t); - pub fn rocksdb_writebatch_deletev(b: *mut rocksdb_writebatch_t, - num_keys: c_int, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t); - pub fn rocksdb_writebatch_deletev_cf(b: *mut rocksdb_writebatch_t, - column_family: *mut rocksdb_column_family_handle_t, - num_keys: c_int, - keys_list: *const *const c_char, - keys_list_sizes: *const size_t); - pub fn rocksdb_writebatch_put_log_data(arg1: *mut rocksdb_writebatch_t, - blob: *const c_char, - len: size_t); - pub fn rocksdb_writebatch_iterate(arg1: *mut rocksdb_writebatch_t, - state: *mut c_void, - put: ::std::option::Option ()>, - deleted: ::std::option::Option ()>); - pub fn rocksdb_writebatch_data(arg1: *mut rocksdb_writebatch_t, - size: *mut size_t) -> *const c_char; + + pub fn rocksdb_writebatch_create_from(rep: *const c_char, size: size_t) -> *mut rocksdb_writebatch_t; + + pub fn rocksdb_writebatch_destroy(batch: *mut rocksdb_writebatch_t); + + pub fn rocksdb_writebatch_clear(batch: *mut rocksdb_writebatch_t); + + pub fn rocksdb_writebatch_count(batch: *mut rocksdb_writebatch_t) -> c_int; + + pub fn rocksdb_writebatch_put(batch: *mut rocksdb_writebatch_t, key: *const c_char, klen: size_t, val: *const c_char, vlen: size_t); + + pub fn rocksdb_writebatch_put_cf(batch: *mut rocksdb_writebatch_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, klen: size_t, val: *const c_char, vlen: size_t); + + pub fn rocksdb_writebatch_putv(b: *mut rocksdb_writebatch_t, num_keys: c_int, keys_list: *const *const c_char, keys_list_sizes: *const size_t, num_values: c_int, values_list: *const *const c_char, values_list_sizes: *const size_t); + + pub fn rocksdb_writebatch_putv_cf(b: *mut rocksdb_writebatch_t, column_family: *mut rocksdb_column_family_handle_t, num_keys: c_int, keys_list: *const *const c_char, keys_list_sizes: *const size_t, num_values: c_int, values_list: *const *const c_char, values_list_sizes: *const size_t); + + pub fn rocksdb_writebatch_merge(batch: *mut rocksdb_writebatch_t, key: *const c_char, klen: size_t, val: *const c_char, vlen: size_t); + + pub fn rocksdb_writebatch_merge_cf(batch: *mut rocksdb_writebatch_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, klen: size_t, val: *const c_char, vlen: size_t); + + pub fn rocksdb_writebatch_mergev(b: *mut rocksdb_writebatch_t, num_keys: c_int, keys_list: *const *const c_char, keys_list_sizes: *const size_t, num_values: c_int, values_list: *const *const c_char, values_list_sizes: *const size_t); + + pub fn rocksdb_writebatch_mergev_cf(b: *mut rocksdb_writebatch_t, column_family: *mut rocksdb_column_family_handle_t, num_keys: c_int, keys_list: *const *const c_char, keys_list_sizes: *const size_t, num_values: c_int, values_list: *const *const c_char, values_list_sizes: *const size_t); + + pub fn rocksdb_writebatch_delete(batch: *mut rocksdb_writebatch_t, key: *const c_char, klen: size_t); + + pub fn rocksdb_writebatch_delete_cf(batch: *mut rocksdb_writebatch_t, column_family: *mut rocksdb_column_family_handle_t, key: *const c_char, klen: size_t); + + pub fn rocksdb_writebatch_deletev(b: *mut rocksdb_writebatch_t, num_keys: c_int, keys_list: *const *const c_char, keys_list_sizes: *const size_t); + + pub fn rocksdb_writebatch_deletev_cf(b: *mut rocksdb_writebatch_t, column_family: *mut rocksdb_column_family_handle_t, num_keys: c_int, keys_list: *const *const c_char, keys_list_sizes: *const size_t); + + pub fn rocksdb_writebatch_put_log_data(batch: *mut rocksdb_writebatch_t, blob: *const c_char, len: size_t); + + pub fn rocksdb_writebatch_iterate(batch: *mut rocksdb_writebatch_t, state: *mut c_void, put: Option, deleted: Option); + + pub fn rocksdb_writebatch_data(batch: *mut rocksdb_writebatch_t, size: *mut size_t) -> *const c_char; + pub fn rocksdb_block_based_options_create() -> *mut rocksdb_block_based_table_options_t; + pub fn rocksdb_block_based_options_destroy(options: *mut rocksdb_block_based_table_options_t); - pub fn rocksdb_block_based_options_set_block_size(options: *mut rocksdb_block_based_table_options_t, - block_size: size_t); - pub fn rocksdb_block_based_options_set_block_size_deviation(options: *mut rocksdb_block_based_table_options_t, - block_size_deviation: c_int); - pub fn rocksdb_block_based_options_set_block_restart_interval(options: *mut rocksdb_block_based_table_options_t, - block_restart_interval: c_int); - pub fn rocksdb_block_based_options_set_filter_policy(options: *mut rocksdb_block_based_table_options_t, - filter_policy: *mut rocksdb_filterpolicy_t); - pub fn rocksdb_block_based_options_set_no_block_cache(options: *mut rocksdb_block_based_table_options_t, - no_block_cache: c_uchar); - pub fn rocksdb_block_based_options_set_block_cache(options: *mut rocksdb_block_based_table_options_t, - block_cache: *mut rocksdb_cache_t); - pub fn rocksdb_block_based_options_set_block_cache_compressed(options: *mut rocksdb_block_based_table_options_t, - block_cache_compressed: *mut rocksdb_cache_t); - pub fn rocksdb_block_based_options_set_whole_key_filtering(arg1: *mut rocksdb_block_based_table_options_t, - arg2: c_uchar); - pub fn rocksdb_block_based_options_set_format_version(arg1: *mut rocksdb_block_based_table_options_t, - arg2: c_int); - pub fn rocksdb_block_based_options_set_index_type(arg1: *mut rocksdb_block_based_table_options_t, - arg2: c_int); - pub fn rocksdb_block_based_options_set_hash_index_allow_collision(arg1: *mut rocksdb_block_based_table_options_t, - arg2: c_uchar); - pub fn rocksdb_block_based_options_set_cache_index_and_filter_blocks(arg1: *mut rocksdb_block_based_table_options_t, - arg2: c_uchar); - pub fn rocksdb_block_based_options_set_skip_table_builder_flush(arg1: *mut rocksdb_block_based_table_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_block_based_table_factory(opt: *mut rocksdb_options_t, - table_options: *mut rocksdb_block_based_table_options_t); + + pub fn rocksdb_block_based_options_set_block_size(options: *mut rocksdb_block_based_table_options_t, v: size_t); + + pub fn rocksdb_block_based_options_set_block_size_deviation(options: *mut rocksdb_block_based_table_options_t, v: c_int); + + pub fn rocksdb_block_based_options_set_block_restart_interval(options: *mut rocksdb_block_based_table_options_t, v: c_int); + + pub fn rocksdb_block_based_options_set_filter_policy(options: *mut rocksdb_block_based_table_options_t, v: *mut rocksdb_filterpolicy_t); + + pub fn rocksdb_block_based_options_set_no_block_cache(options: *mut rocksdb_block_based_table_options_t, v: c_uchar); + + pub fn rocksdb_block_based_options_set_block_cache(options: *mut rocksdb_block_based_table_options_t, v: *mut rocksdb_cache_t); + + pub fn rocksdb_block_based_options_set_block_cache_compressed(options: *mut rocksdb_block_based_table_options_t, v: *mut rocksdb_cache_t); + + pub fn rocksdb_block_based_options_set_whole_key_filtering(options: *mut rocksdb_block_based_table_options_t, v: c_uchar); + + pub fn rocksdb_block_based_options_set_format_version(options: *mut rocksdb_block_based_table_options_t, v: c_int); + + pub fn rocksdb_block_based_options_set_index_type(options: *mut rocksdb_block_based_table_options_t, v: rocksdb_block_based_table_index_type_t); + + pub fn rocksdb_block_based_options_set_hash_index_allow_collision(options: *mut rocksdb_block_based_table_options_t, v: c_uchar); + + pub fn rocksdb_block_based_options_set_cache_index_and_filter_blocks(options: *mut rocksdb_block_based_table_options_t, v: c_uchar); + + pub fn rocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache(options: *mut rocksdb_block_based_table_options_t, v: c_uchar); + + pub fn rocksdb_block_based_options_set_skip_table_builder_flush(options: *mut rocksdb_block_based_table_options_t, skip_table_builder_flush: c_uchar); + + pub fn rocksdb_options_set_block_based_table_factory(opt: *mut rocksdb_options_t, table_options: *mut rocksdb_block_based_table_options_t); + pub fn rocksdb_cuckoo_options_create() -> *mut rocksdb_cuckoo_table_options_t; + pub fn rocksdb_cuckoo_options_destroy(options: *mut rocksdb_cuckoo_table_options_t); - pub fn rocksdb_cuckoo_options_set_hash_ratio(options: *mut rocksdb_cuckoo_table_options_t, - v: c_double); - pub fn rocksdb_cuckoo_options_set_max_search_depth(options: *mut rocksdb_cuckoo_table_options_t, - v: uint32_t); - pub fn rocksdb_cuckoo_options_set_cuckoo_block_size(options: *mut rocksdb_cuckoo_table_options_t, - v: uint32_t); - pub fn rocksdb_cuckoo_options_set_identity_as_first_hash(options: *mut rocksdb_cuckoo_table_options_t, - v: c_uchar); - pub fn rocksdb_cuckoo_options_set_use_module_hash(options: *mut rocksdb_cuckoo_table_options_t, - v: c_uchar); - pub fn rocksdb_options_set_cuckoo_table_factory(opt: *mut rocksdb_options_t, - table_options: *mut rocksdb_cuckoo_table_options_t); + + pub fn rocksdb_cuckoo_options_set_hash_ratio(options: *mut rocksdb_cuckoo_table_options_t, v: f64); + + pub fn rocksdb_cuckoo_options_set_max_search_depth(options: *mut rocksdb_cuckoo_table_options_t, v: uint32_t); + + pub fn rocksdb_cuckoo_options_set_cuckoo_block_size(options: *mut rocksdb_cuckoo_table_options_t, v: uint32_t); + + pub fn rocksdb_cuckoo_options_set_identity_as_first_hash(options: *mut rocksdb_cuckoo_table_options_t, v: c_uchar); + + pub fn rocksdb_cuckoo_options_set_use_module_hash(options: *mut rocksdb_cuckoo_table_options_t, v: c_uchar); + + pub fn rocksdb_options_set_cuckoo_table_factory(opt: *mut rocksdb_options_t, table_options: *mut rocksdb_cuckoo_table_options_t); + pub fn rocksdb_options_create() -> *mut rocksdb_options_t; - pub fn rocksdb_options_destroy(arg1: *mut rocksdb_options_t); - pub fn rocksdb_options_increase_parallelism(opt: *mut rocksdb_options_t, - total_threads: c_int); - pub fn rocksdb_options_optimize_for_point_lookup(opt: *mut rocksdb_options_t, - block_cache_size_mb: uint64_t); - pub fn rocksdb_options_optimize_level_style_compaction(opt: *mut rocksdb_options_t, - memtable_memory_budget: uint64_t); - pub fn rocksdb_options_optimize_universal_style_compaction(opt: *mut rocksdb_options_t, - memtable_memory_budget: uint64_t); - pub fn rocksdb_options_set_compaction_filter(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_compactionfilter_t); - pub fn rocksdb_options_set_compaction_filter_factory(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_compactionfilterfactory_t); - pub fn rocksdb_options_set_comparator(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_comparator_t); - pub fn rocksdb_options_set_merge_operator(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_mergeoperator_t); - pub fn rocksdb_options_set_uint64add_merge_operator(arg1: *mut rocksdb_options_t); - pub fn rocksdb_options_set_compression_per_level(opt: *mut rocksdb_options_t, - level_values: *mut c_int, - num_levels: size_t); - pub fn rocksdb_options_set_create_if_missing(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_create_missing_column_families(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_error_if_exists(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_paranoid_checks(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_env(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_env_t); - pub fn rocksdb_options_set_info_log(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_logger_t); - pub fn rocksdb_options_set_info_log_level(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_write_buffer_size(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_max_open_files(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_total_wal_size(opt: *mut rocksdb_options_t, - n: uint64_t); - pub fn rocksdb_options_set_compression_options(arg1: *mut rocksdb_options_t, - arg2: c_int, - arg3: c_int, - arg4: c_int); - pub fn rocksdb_options_set_prefix_extractor(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_slicetransform_t); - pub fn rocksdb_options_set_num_levels(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_level0_file_num_compaction_trigger(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_level0_slowdown_writes_trigger(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_level0_stop_writes_trigger(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_mem_compaction_level(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_target_file_size_base(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_target_file_size_multiplier(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_bytes_for_level_base(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_max_bytes_for_level_multiplier(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_expanded_compaction_factor(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_grandparent_overlap_factor(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_bytes_for_level_multiplier_additional(arg1: *mut rocksdb_options_t, - level_values: *mut c_int, - num_levels: size_t); - pub fn rocksdb_options_enable_statistics(arg1: *mut rocksdb_options_t); + + pub fn rocksdb_options_destroy(opt: *mut rocksdb_options_t); + + pub fn rocksdb_options_increase_parallelism(opt: *mut rocksdb_options_t, total_threads: c_int); + + pub fn rocksdb_options_optimize_for_point_lookup(opt: *mut rocksdb_options_t, block_cache_size_mb: uint64_t); + + pub fn rocksdb_options_optimize_level_style_compaction(opt: *mut rocksdb_options_t, memtable_memory_budget: uint64_t); + + pub fn rocksdb_options_optimize_universal_style_compaction(opt: *mut rocksdb_options_t, memtable_memory_budget: uint64_t); + + pub fn rocksdb_options_set_compaction_filter(opt: *mut rocksdb_options_t, filter: *mut rocksdb_compactionfilter_t); + + pub fn rocksdb_options_set_compaction_filter_factory(opt: *mut rocksdb_options_t, factory: *mut rocksdb_compactionfilterfactory_t); + + pub fn rocksdb_options_compaction_readahead_size(opt: *mut rocksdb_options_t, s: size_t); + + pub fn rocksdb_options_set_comparator(opt: *mut rocksdb_options_t, cmp: *mut rocksdb_comparator_t); + + pub fn rocksdb_options_set_merge_operator(opt: *mut rocksdb_options_t, merge_operator: *mut rocksdb_mergeoperator_t); + + pub fn rocksdb_options_set_uint64add_merge_operator(opt: *mut rocksdb_options_t); + + pub fn rocksdb_options_set_compression_per_level(opt: *mut rocksdb_options_t, level_values: *mut rocksdb_compression_type_t, num_levels: size_t); + + pub fn rocksdb_options_set_create_if_missing(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_create_missing_column_families(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_error_if_exists(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_paranoid_checks(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_env(opt: *mut rocksdb_options_t, env: *mut rocksdb_env_t); + + pub fn rocksdb_options_set_info_log(opt: *mut rocksdb_options_t, l: *mut rocksdb_logger_t); + + pub fn rocksdb_options_set_info_log_level(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_write_buffer_size(opt: *mut rocksdb_options_t, s: size_t); + + pub fn rocksdb_options_set_db_write_buffer_size(opt: *mut rocksdb_options_t, s: size_t); + + pub fn rocksdb_options_set_max_open_files(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_total_wal_size(opt: *mut rocksdb_options_t, n: uint64_t); + + pub fn rocksdb_options_set_compression_options(opt: *mut rocksdb_options_t, w_bits: c_int, level: c_int, strategy: c_int, max_dict_bytes: c_int); + + pub fn rocksdb_options_set_prefix_extractor(opt: *mut rocksdb_options_t, prefix_extractor: *mut rocksdb_slicetransform_t); + + pub fn rocksdb_options_set_num_levels(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_level0_file_num_compaction_trigger(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_level0_slowdown_writes_trigger(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_level0_stop_writes_trigger(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_mem_compaction_level(opt: *mut rocksdb_options_t, n: rocksdb_compaction_style_t); + + pub fn rocksdb_options_set_target_file_size_base(opt: *mut rocksdb_options_t, n: uint64_t); + + pub fn rocksdb_options_set_target_file_size_multiplier(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_bytes_for_level_base(opt: *mut rocksdb_options_t, n: uint64_t); + + pub fn rocksdb_options_set_max_bytes_for_level_multiplier(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_expanded_compaction_factor(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_max_grandparent_overlap_factor(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_max_bytes_for_level_multiplier_additional(opt: *mut rocksdb_options_t, level_values: *mut rocksdb_compression_type_t, num_levels: size_t); + + pub fn rocksdb_options_enable_statistics(opt: *mut rocksdb_options_t); + pub fn rocksdb_options_statistics_get_string(opt: *mut rocksdb_options_t) -> *mut c_char; - pub fn rocksdb_options_set_max_write_buffer_number(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_min_write_buffer_number_to_merge(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_write_buffer_number_to_maintain(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_background_compactions(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_background_flushes(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_max_log_file_size(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_log_file_time_to_roll(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_keep_log_file_num(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_recycle_log_file_num(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_soft_rate_limit(arg1: *mut rocksdb_options_t, - arg2: c_double); - pub fn rocksdb_options_set_hard_rate_limit(arg1: *mut rocksdb_options_t, - arg2: c_double); - pub fn rocksdb_options_set_rate_limit_delay_max_milliseconds(arg1: *mut rocksdb_options_t, - arg2: c_uint); - pub fn rocksdb_options_set_max_manifest_file_size(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_table_cache_numshardbits(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_table_cache_remove_scan_count_limit(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_arena_block_size(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_use_fsync(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_db_log_dir(arg1: *mut rocksdb_options_t, - arg2: *const c_char); - pub fn rocksdb_options_set_wal_dir(arg1: *mut rocksdb_options_t, - arg2: *const c_char); - pub fn rocksdb_options_set_WAL_ttl_seconds(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_WAL_size_limit_MB(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_manifest_preallocation_size(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_purge_redundant_kvs_while_flush(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_allow_os_buffer(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_allow_mmap_reads(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_allow_mmap_writes(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_is_fd_close_on_exec(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_skip_log_error_on_recovery(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_stats_dump_period_sec(arg1: *mut rocksdb_options_t, - arg2: c_uint); - pub fn rocksdb_options_set_advise_random_on_open(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_access_hint_on_compaction_start(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_use_adaptive_mutex(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_bytes_per_sync(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_verify_checksums_in_compaction(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_filter_deletes(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_max_sequential_skip_in_iterations(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_disable_data_sync(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_disable_auto_compactions(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_delete_obsolete_files_period_micros(arg1: *mut rocksdb_options_t, - arg2: uint64_t); - pub fn rocksdb_options_set_source_compaction_factor(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_prepare_for_bulk_load(arg1: *mut rocksdb_options_t); - pub fn rocksdb_options_set_memtable_vector_rep(arg1: *mut rocksdb_options_t); - pub fn rocksdb_options_set_hash_skip_list_rep(arg1: *mut rocksdb_options_t, - arg2: size_t, arg3: int32_t, - arg4: int32_t); - pub fn rocksdb_options_set_hash_link_list_rep(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_plain_table_factory(arg1: *mut rocksdb_options_t, - arg2: uint32_t, - arg3: c_int, - arg4: c_double, - arg5: size_t); - pub fn rocksdb_options_set_min_level_to_compress(opt: *mut rocksdb_options_t, - level: c_int); - pub fn rocksdb_options_set_memtable_prefix_bloom_bits(arg1: *mut rocksdb_options_t, - arg2: uint32_t); - pub fn rocksdb_options_set_memtable_prefix_bloom_probes(arg1: *mut rocksdb_options_t, - arg2: uint32_t); - pub fn rocksdb_options_set_memtable_prefix_bloom_huge_page_tlb_size(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_max_successive_merges(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_min_partial_merge_operands(arg1: *mut rocksdb_options_t, - arg2: uint32_t); - pub fn rocksdb_options_set_bloom_locality(arg1: *mut rocksdb_options_t, - arg2: uint32_t); - pub fn rocksdb_options_set_inplace_update_support(arg1: *mut rocksdb_options_t, - arg2: c_uchar); - pub fn rocksdb_options_set_inplace_update_num_locks(arg1: *mut rocksdb_options_t, - arg2: size_t); - pub fn rocksdb_options_set_compression(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_compaction_style(arg1: *mut rocksdb_options_t, - arg2: c_int); - pub fn rocksdb_options_set_universal_compaction_options(arg1: *mut rocksdb_options_t, - arg2: *mut rocksdb_universal_compaction_options_t); - pub fn rocksdb_options_set_fifo_compaction_options(opt: *mut rocksdb_options_t, - fifo: *mut rocksdb_fifo_compaction_options_t); - pub fn rocksdb_compactionfilter_create(state: *mut c_void, - destructor: ::std::option::Option - ()>, - filter: ::std::option::Option - c_uchar>, - name: ::std::option::Option - *const c_char>) -> *mut rocksdb_compactionfilter_t; - pub fn rocksdb_compactionfilter_destroy(arg1: *mut rocksdb_compactionfilter_t); + + pub fn rocksdb_options_set_max_write_buffer_number(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_min_write_buffer_number_to_merge(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_write_buffer_number_to_maintain(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_background_compactions(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_background_flushes(opt: *mut rocksdb_options_t, n: c_int); + + pub fn rocksdb_options_set_max_log_file_size(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_log_file_time_to_roll(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_keep_log_file_num(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_recycle_log_file_num(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_soft_rate_limit(opt: *mut rocksdb_options_t, v: f64); + + pub fn rocksdb_options_set_hard_rate_limit(opt: *mut rocksdb_options_t, v: f64); + + pub fn rocksdb_options_set_rate_limit_delay_max_milliseconds(opt: *mut rocksdb_options_t, v: c_uint); + + pub fn rocksdb_options_set_max_manifest_file_size(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_table_cache_numshardbits(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_table_cache_remove_scan_count_limit(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_arena_block_size(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_use_fsync(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_db_log_dir(opt: *mut rocksdb_options_t, v: *const c_char); + + pub fn rocksdb_options_set_wal_dir(opt: *mut rocksdb_options_t, v: *const c_char); + + pub fn rocksdb_options_set_WAL_ttl_seconds(opt: *mut rocksdb_options_t, ttl: uint64_t); + + pub fn rocksdb_options_set_WAL_size_limit_MB(opt: *mut rocksdb_options_t, limit: uint64_t); + + pub fn rocksdb_options_set_manifest_preallocation_size(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_purge_redundant_kvs_while_flush(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_allow_os_buffer(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_allow_mmap_reads(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_allow_mmap_writes(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_is_fd_close_on_exec(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_skip_log_error_on_recovery(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_stats_dump_period_sec(opt: *mut rocksdb_options_t, v: c_uint); + + pub fn rocksdb_options_set_advise_random_on_open(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_access_hint_on_compaction_start(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_use_adaptive_mutex(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_bytes_per_sync(opt: *mut rocksdb_options_t, v: uint64_t); + + pub fn rocksdb_options_set_verify_checksums_in_compaction(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_filter_deletes(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_max_sequential_skip_in_iterations(opt: *mut rocksdb_options_t, v: uint64_t); + + pub fn rocksdb_options_set_disable_data_sync(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_disable_auto_compactions(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_delete_obsolete_files_period_micros(opt: *mut rocksdb_options_t, v: uint64_t); + + pub fn rocksdb_options_set_source_compaction_factor(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_prepare_for_bulk_load(opt: *mut rocksdb_options_t); + + pub fn rocksdb_options_set_memtable_vector_rep(opt: *mut rocksdb_options_t); + + pub fn rocksdb_options_set_hash_skip_list_rep(opt: *mut rocksdb_options_t, bucket_count: size_t, skiplist_height: int32_t, skiplist_branching_factor: int32_t); + + pub fn rocksdb_options_set_hash_link_list_rep(opt: *mut rocksdb_options_t, bucket_count: size_t); + + pub fn rocksdb_options_set_plain_table_factory(opt: *mut rocksdb_options_t, user_key_len: uint32_t, bloom_bits_per_key: c_int, hash_table_ratio: f64, index_sparseness: size_t); + + pub fn rocksdb_options_set_min_level_to_compress(opt: *mut rocksdb_options_t, level: c_int); + + pub fn rocksdb_options_set_memtable_prefix_bloom_bits(opt: *mut rocksdb_options_t, v: uint32_t); + + pub fn rocksdb_options_set_memtable_prefix_bloom_probes(opt: *mut rocksdb_options_t, v: uint32_t); + + pub fn rocksdb_options_set_memtable_huge_page_size(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_max_successive_merges(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_min_partial_merge_operands(opt: *mut rocksdb_options_t, v: uint32_t); + + pub fn rocksdb_options_set_bloom_locality(opt: *mut rocksdb_options_t, v: uint32_t); + + pub fn rocksdb_options_set_inplace_update_support(opt: *mut rocksdb_options_t, v: c_uchar); + + pub fn rocksdb_options_set_inplace_update_num_locks(opt: *mut rocksdb_options_t, v: size_t); + + pub fn rocksdb_options_set_report_bg_io_stats(opt: *mut rocksdb_options_t, v: c_int); + + pub fn rocksdb_options_set_compression(opt: *mut rocksdb_options_t, t: rocksdb_compression_type_t); + + pub fn rocksdb_options_set_compaction_style(opt: *mut rocksdb_options_t, style: rocksdb_compaction_style_t); + + pub fn rocksdb_options_set_universal_compaction_options(opt: *mut rocksdb_options_t, uco: *mut rocksdb_universal_compaction_options_t); + + pub fn rocksdb_options_set_fifo_compaction_options(opt: *mut rocksdb_options_t, fifo: *mut rocksdb_fifo_compaction_options_t); + + pub fn rocksdb_compactionfilter_create(state: *mut c_void, destructor: Option, filter: Option c_uchar>, name: Option *const c_char>) -> *mut rocksdb_compactionfilter_t; + + pub fn rocksdb_compactionfilter_destroy(filter: *mut rocksdb_compactionfilter_t); + pub fn rocksdb_compactionfiltercontext_is_full_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; + pub fn rocksdb_compactionfiltercontext_is_manual_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; - pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, - destructor: ::std::option::Option - ()>, - create_compaction_filter: ::std::option::Option - *mut rocksdb_compactionfilter_t>, - name: ::std::option::Option - *const c_char>) -> *mut rocksdb_compactionfilterfactory_t; - pub fn rocksdb_compactionfilterfactory_destroy(arg1: *mut rocksdb_compactionfilterfactory_t); - pub fn rocksdb_comparator_create(state: *mut c_void, - destructor: ::std::option::Option ()>, - compare: ::std::option::Option - c_int>, - name: ::std::option::Option - *const c_char>) -> *mut rocksdb_comparator_t; - pub fn rocksdb_comparator_destroy(arg1: *mut rocksdb_comparator_t); - pub fn rocksdb_filterpolicy_create(state: *mut c_void, - destructor: ::std::option::Option ()>, - create_filter: ::std::option::Option - *mut c_char>, - key_may_match: ::std::option::Option - c_uchar>, - delete_filter: ::std::option::Option ()>, - name: ::std::option::Option - *const c_char>) -> *mut rocksdb_filterpolicy_t; - pub fn rocksdb_filterpolicy_destroy(arg1: *mut rocksdb_filterpolicy_t); + + pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, destructor: Option, create_compaction_filter: Option *mut rocksdb_compactionfilter_t>, name: Option *const c_char>) -> *mut rocksdb_compactionfilterfactory_t; + + pub fn rocksdb_compactionfilterfactory_destroy(factory: *mut rocksdb_compactionfilterfactory_t); + + pub fn rocksdb_comparator_create(state: *mut c_void, destructor: Option, compare: Option c_int>, name: Option *const c_char>) -> *mut rocksdb_comparator_t; + + pub fn rocksdb_comparator_destroy(cmp: *mut rocksdb_comparator_t); + + pub fn rocksdb_filterpolicy_create(state: *mut c_void, destructor: Option, create_filter: Option *mut c_char>, key_may_match: Option c_uchar>, delete_filter: Option, name: Option *const c_char>) -> *mut rocksdb_filterpolicy_t; + + pub fn rocksdb_filterpolicy_destroy(filter: *mut rocksdb_filterpolicy_t); + pub fn rocksdb_filterpolicy_create_bloom(bits_per_key: c_int) -> *mut rocksdb_filterpolicy_t; + pub fn rocksdb_filterpolicy_create_bloom_full(bits_per_key: c_int) -> *mut rocksdb_filterpolicy_t; - pub fn rocksdb_mergeoperator_create(state: *mut c_void, - destructor: ::std::option::Option ()>, - full_merge: ::std::option::Option - *mut c_char>, - partial_merge: ::std::option::Option - *mut c_char>, - delete_value: ::std::option::Option ()>, - name: ::std::option::Option - *const c_char>) -> *mut rocksdb_mergeoperator_t; - pub fn rocksdb_mergeoperator_destroy(arg1: *mut rocksdb_mergeoperator_t); + + pub fn rocksdb_mergeoperator_create(state: *mut c_void, destructor: Option, full_merge: Option *mut c_char>, partial_merge: Option *mut c_char>, delete_value: Option, name: Option *const c_char>) -> *mut rocksdb_mergeoperator_t; + + pub fn rocksdb_mergeoperator_destroy(merge_operator: *mut rocksdb_mergeoperator_t); + pub fn rocksdb_readoptions_create() -> *mut rocksdb_readoptions_t; - pub fn rocksdb_readoptions_destroy(arg1: *mut rocksdb_readoptions_t); - pub fn rocksdb_readoptions_set_verify_checksums(arg1: *mut rocksdb_readoptions_t, - arg2: c_uchar); - pub fn rocksdb_readoptions_set_fill_cache(arg1: *mut rocksdb_readoptions_t, - arg2: c_uchar); - pub fn rocksdb_readoptions_set_snapshot(arg1: *mut rocksdb_readoptions_t, - arg2: *const rocksdb_snapshot_t); - pub fn rocksdb_readoptions_set_iterate_upper_bound(arg1: *mut rocksdb_readoptions_t, - key: *const c_char, - keylen: size_t); - pub fn rocksdb_readoptions_set_read_tier(arg1: *mut rocksdb_readoptions_t, - arg2: c_int); - pub fn rocksdb_readoptions_set_tailing(arg1: *mut rocksdb_readoptions_t, - arg2: c_uchar); + + pub fn rocksdb_readoptions_destroy(opt: *mut rocksdb_readoptions_t); + + pub fn rocksdb_readoptions_set_verify_checksums(opt: *mut rocksdb_readoptions_t, v: c_uchar); + + pub fn rocksdb_readoptions_set_fill_cache(opt: *mut rocksdb_readoptions_t, v: c_uchar); + + pub fn rocksdb_readoptions_set_snapshot(opt: *mut rocksdb_readoptions_t, v: *const rocksdb_snapshot_t); + + pub fn rocksdb_readoptions_set_iterate_upper_bound(opt: *mut rocksdb_readoptions_t, key: *const c_char, keylen: size_t); + + pub fn rocksdb_readoptions_set_read_tier(opt: *mut rocksdb_readoptions_t, v: c_int); + + pub fn rocksdb_readoptions_set_tailing(opt: *mut rocksdb_readoptions_t, v: c_uchar); + + pub fn rocksdb_readoptions_set_readahead_size(opt: *mut rocksdb_readoptions_t, v: size_t); + pub fn rocksdb_writeoptions_create() -> *mut rocksdb_writeoptions_t; - pub fn rocksdb_writeoptions_destroy(arg1: *mut rocksdb_writeoptions_t); - pub fn rocksdb_writeoptions_set_sync(arg1: *mut rocksdb_writeoptions_t, - arg2: c_uchar); - pub fn rocksdb_writeoptions_disable_WAL(opt: *mut rocksdb_writeoptions_t, - disable: c_int); + + pub fn rocksdb_writeoptions_destroy(opt: *mut rocksdb_writeoptions_t); + + pub fn rocksdb_writeoptions_set_sync(opt: *mut rocksdb_writeoptions_t, v: c_uchar); + + pub fn rocksdb_writeoptions_disable_WAL(opt: *mut rocksdb_writeoptions_t, disable: c_int); + pub fn rocksdb_flushoptions_create() -> *mut rocksdb_flushoptions_t; - pub fn rocksdb_flushoptions_destroy(arg1: *mut rocksdb_flushoptions_t); - pub fn rocksdb_flushoptions_set_wait(arg1: *mut rocksdb_flushoptions_t, - arg2: c_uchar); + + pub fn rocksdb_flushoptions_destroy(opt: *mut rocksdb_flushoptions_t); + + pub fn rocksdb_flushoptions_set_wait(opt: *mut rocksdb_flushoptions_t, v: c_uchar); + pub fn rocksdb_cache_create_lru(capacity: size_t) -> *mut rocksdb_cache_t; + pub fn rocksdb_cache_destroy(cache: *mut rocksdb_cache_t); + + pub fn rocksdb_cache_set_capacity(cache: *mut rocksdb_cache_t, capacity: size_t); + pub fn rocksdb_create_default_env() -> *mut rocksdb_env_t; - pub fn rocksdb_env_set_background_threads(env: *mut rocksdb_env_t, - n: c_int); - pub fn rocksdb_env_set_high_priority_background_threads(env: *mut rocksdb_env_t, - n: c_int); + + pub fn rocksdb_create_mem_env() -> *mut rocksdb_env_t; + + pub fn rocksdb_env_set_background_threads(env: *mut rocksdb_env_t, n: c_int); + + pub fn rocksdb_env_set_high_priority_background_threads(env: *mut rocksdb_env_t, n: c_int); + pub fn rocksdb_env_join_all_threads(env: *mut rocksdb_env_t); - pub fn rocksdb_env_destroy(arg1: *mut rocksdb_env_t); - pub fn rocksdb_slicetransform_create(state: *mut c_void, - destructor: ::std::option::Option ()>, - transform: ::std::option::Option - *mut c_char>, - in_domain: ::std::option::Option - c_uchar>, - in_range: ::std::option::Option - c_uchar>, - name: ::std::option::Option - *const c_char>) -> *mut rocksdb_slicetransform_t; - pub fn rocksdb_slicetransform_create_fixed_prefix(arg1: size_t) -> *mut rocksdb_slicetransform_t; + + pub fn rocksdb_env_destroy(env: *mut rocksdb_env_t); + + pub fn rocksdb_slicetransform_create(state: *mut c_void, destructor: Option, transform: Option *mut c_char>, in_domain: Option c_uchar>, in_range: Option c_uchar>, name: Option *const c_char>) -> *mut rocksdb_slicetransform_t; + + pub fn rocksdb_slicetransform_create_fixed_prefix(len: size_t) -> *mut rocksdb_slicetransform_t; + pub fn rocksdb_slicetransform_create_noop() -> *mut rocksdb_slicetransform_t; - pub fn rocksdb_slicetransform_destroy(arg1: *mut rocksdb_slicetransform_t); + + pub fn rocksdb_slicetransform_destroy(st: *mut rocksdb_slicetransform_t); + pub fn rocksdb_universal_compaction_options_create() -> *mut rocksdb_universal_compaction_options_t; - pub fn rocksdb_universal_compaction_options_set_size_ratio(arg1: *mut rocksdb_universal_compaction_options_t, - arg2: c_int); - pub fn rocksdb_universal_compaction_options_set_min_merge_width(arg1: *mut rocksdb_universal_compaction_options_t, - arg2: c_int); - pub fn rocksdb_universal_compaction_options_set_max_merge_width(arg1: *mut rocksdb_universal_compaction_options_t, - arg2: c_int); - pub fn rocksdb_universal_compaction_options_set_max_size_amplification_percent(arg1: *mut rocksdb_universal_compaction_options_t, - arg2: c_int); - pub fn rocksdb_universal_compaction_options_set_compression_size_percent(arg1: *mut rocksdb_universal_compaction_options_t, - arg2: c_int); - pub fn rocksdb_universal_compaction_options_set_stop_style(arg1: *mut rocksdb_universal_compaction_options_t, - arg2: c_int); - pub fn rocksdb_universal_compaction_options_destroy(arg1: *mut rocksdb_universal_compaction_options_t); + + pub fn rocksdb_universal_compaction_options_set_size_ratio(uco: *mut rocksdb_universal_compaction_options_t, ratio: c_int); + + pub fn rocksdb_universal_compaction_options_set_min_merge_width(uco: *mut rocksdb_universal_compaction_options_t, w: c_int); + + pub fn rocksdb_universal_compaction_options_set_max_merge_width(uco: *mut rocksdb_universal_compaction_options_t, w: c_int); + + pub fn rocksdb_universal_compaction_options_set_max_size_amplification_percent(uco: *mut rocksdb_universal_compaction_options_t, p: c_int); + + pub fn rocksdb_universal_compaction_options_set_compression_size_percent(uco: *mut rocksdb_universal_compaction_options_t, p: c_int); + + pub fn rocksdb_universal_compaction_options_set_stop_style(uco: *mut rocksdb_universal_compaction_options_t, style: rocksdb_compaction_stop_style_t); + + pub fn rocksdb_universal_compaction_options_destroy(uco: *mut rocksdb_universal_compaction_options_t); + pub fn rocksdb_fifo_compaction_options_create() -> *mut rocksdb_fifo_compaction_options_t; - pub fn rocksdb_fifo_compaction_options_set_max_table_files_size(fifo_opts: *mut rocksdb_fifo_compaction_options_t, - size: uint64_t); + + pub fn rocksdb_fifo_compaction_options_set_max_table_files_size(fifo_opts: *mut rocksdb_fifo_compaction_options_t, size: uint64_t); + pub fn rocksdb_fifo_compaction_options_destroy(fifo_opts: *mut rocksdb_fifo_compaction_options_t); - pub fn rocksdb_livefiles_count(arg1: *const rocksdb_livefiles_t) -> c_int; - pub fn rocksdb_livefiles_name(arg1: *const rocksdb_livefiles_t, - index: c_int) -> *const c_char; - pub fn rocksdb_livefiles_level(arg1: *const rocksdb_livefiles_t, - index: c_int) -> c_int; - pub fn rocksdb_livefiles_size(arg1: *const rocksdb_livefiles_t, - index: c_int) -> size_t; - pub fn rocksdb_livefiles_smallestkey(arg1: *const rocksdb_livefiles_t, - index: c_int, - size: *mut size_t) -> *const c_char; - pub fn rocksdb_livefiles_largestkey(arg1: *const rocksdb_livefiles_t, - index: c_int, - size: *mut size_t) -> *const c_char; - pub fn rocksdb_livefiles_destroy(arg1: *const rocksdb_livefiles_t); - pub fn rocksdb_get_options_from_string(base_options: *const rocksdb_options_t, - opts_str: *const c_char, - new_options: *mut rocksdb_options_t, - errptr: *mut *mut c_char); + + pub fn rocksdb_livefiles_count(files: *const rocksdb_livefiles_t) -> c_int; + + pub fn rocksdb_livefiles_name(files: *const rocksdb_livefiles_t, index: c_int) -> *const c_char; + + pub fn rocksdb_livefiles_level(files: *const rocksdb_livefiles_t, index: c_int) -> c_int; + + pub fn rocksdb_livefiles_size(files: *const rocksdb_livefiles_t, index: c_int) -> size_t; + + pub fn rocksdb_livefiles_smallestkey(files: *const rocksdb_livefiles_t, index: c_int, size: *mut size_t) -> *const c_char; + + pub fn rocksdb_livefiles_largestkey(files: *const rocksdb_livefiles_t, index: c_int, size: *mut size_t) -> *const c_char; + + pub fn rocksdb_livefiles_destroy(files: *const rocksdb_livefiles_t); + + pub fn rocksdb_get_options_from_string(base_options: *const rocksdb_options_t, opts_str: *const c_char, new_options: *mut rocksdb_options_t, errptr: *mut *mut c_char); + + pub fn rocksdb_delete_file_in_range(db: *mut rocksdb_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t, errptr: *mut *mut c_char); + + pub fn rocksdb_delete_file_in_range_cf(db: *mut rocksdb_t, column_family: *mut rocksdb_column_family_handle_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t, errptr: *mut *mut c_char); + pub fn rocksdb_free(ptr: *mut c_void); } + +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub enum rocksdb_block_based_table_index_type_t { + binary_search = 0, + hash_search = 1, +} + +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub enum rocksdb_compression_type_t { + no = 0, + snappy = 1, + zlib = 2, + bz2 = 3, + lz4 = 4, + lz4hc = 5, +} + +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub enum rocksdb_compaction_style_t { + level = 0, + universal = 1, + fifo = 2, +} + +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub enum rocksdb_compaction_stop_style_t { + similar_size = 0, + total_size = 1, +} + +pub enum rocksdb_t { } + +pub enum rocksdb_backup_engine_t { } + +pub enum rocksdb_backup_engine_info_t { } + +pub enum rocksdb_restore_options_t { } + +pub enum rocksdb_cache_t { } + +pub enum rocksdb_compactionfilter_t { } + +pub enum rocksdb_compactionfiltercontext_t { } + +pub enum rocksdb_compactionfilterfactory_t { } + +pub enum rocksdb_comparator_t { } + +pub enum rocksdb_env_t { } + +pub enum rocksdb_fifo_compaction_options_t { } + +pub enum rocksdb_filelock_t { } + +pub enum rocksdb_filterpolicy_t { } + +pub enum rocksdb_flushoptions_t { } + +pub enum rocksdb_iterator_t { } + +pub enum rocksdb_logger_t { } + +pub enum rocksdb_mergeoperator_t { } + +pub enum rocksdb_options_t { } + +pub enum rocksdb_block_based_table_options_t { } + +pub enum rocksdb_cuckoo_table_options_t { } + +pub enum rocksdb_randomfile_t { } + +pub enum rocksdb_readoptions_t { } + +pub enum rocksdb_seqfile_t { } + +pub enum rocksdb_slicetransform_t { } + +pub enum rocksdb_snapshot_t { } + +pub enum rocksdb_writablefile_t { } + +pub enum rocksdb_writebatch_t { } + +pub enum rocksdb_writeoptions_t { } + +pub enum rocksdb_universal_compaction_options_t { } + +pub enum rocksdb_livefiles_t { } + +pub enum rocksdb_column_family_handle_t { } diff --git a/src/test.rs b/src/test.rs index 04d715b..4971057 100644 --- a/src/test.rs +++ b/src/test.rs @@ -1,7 +1,8 @@ -use super::*; use std::ffi::CString; use std::ptr; +use super::*; + #[test] fn simple() { unsafe { diff --git a/tests/c_test.rs b/tests/c_test.rs index a345cf7..517a61a 100644 --- a/tests/c_test.rs +++ b/tests/c_test.rs @@ -1,8 +1,3 @@ -/* - Copyright (c) 2011 The LevelDB Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. See the AUTHORS file for names of contributors. -*/ #![allow(dead_code)] #![allow(non_snake_case)] #![allow(non_upper_case_globals)] @@ -13,14 +8,14 @@ extern crate libc; extern crate rocksdb_sys as ffi; -use self::libc::{c_char, c_int, c_void, uint64_t, size_t}; - use std::{env, mem, ptr, slice}; use std::ffi::{CStr, CString}; use std::path::PathBuf; use ffi::*; +use self::libc::{c_char, c_int, c_void, uint64_t, size_t}; + fn cstr(s: &str) -> CString { CString::new(s).unwrap() } @@ -38,10 +33,12 @@ unsafe fn rstr(s: *const c_char) -> String { } rstr_(s) } + #[cfg(feature = "cstr_to_str")] unsafe fn rstr_(s: *const c_char) -> String { CStr::from_ptr(s).to_string_lossy().into_owned() } + #[cfg(not(feature = "cstr_to_str"))] unsafe fn rstr_(s: *const c_char) -> String { String::from(std::str::from_utf8( @@ -84,11 +81,17 @@ macro_rules! CheckCondition { } fn CheckEqual(expected: *const c_char, v: *const c_char, n: size_t) { + unsafe { + if !expected.is_null() && !v.is_null() { + println!("INFO: {} {}", n, libc::strlen(expected)); + } + } if expected.is_null() && v.is_null() { // ok } else if !expected.is_null() && !v.is_null() && unsafe { n == libc::strlen(expected) && - libc::memcmp(expected as *const c_void, v as *const c_void, n) == 0 } { + libc::memcmp(expected as *const c_void, v as *const c_void, n) == 0 + } { // ok } else { unsafe { panic!("{} <> {}", rvstr(expected, n), rvstr(v, n)) }; @@ -118,9 +121,15 @@ fn CheckGet<'a, 'b>( &mut val_len, &mut err) }; CheckCondition!(err.is_null()); + unsafe { + let foo1: &[u8] = slice::from_raw_parts(val as *const u8, val_len); + let foo2 = std::str::from_utf8(foo1).unwrap(); + println!("{:?}", foo2); + } let oexp = expected.map_or(None, |s| Some(cstr(s))); - let cexp = oexp.map_or(ptr::null(), |s| s.as_ptr()); + let cexp = oexp.as_ref().map_or(ptr::null(), |s| s.as_ptr()); CheckEqual(cexp, val, val_len); + println!("EQUAL"); Free(&mut val); } @@ -138,50 +147,46 @@ fn CheckGetCF<'a, 'b>( k.as_ptr(), key.len() as size_t, &mut val_len, &mut err); CheckNoError!(err); let oexp = expected.map_or(None, |s| Some(cstr(s))); - let cexp = oexp.map_or(ptr::null(), |s| s.as_ptr()); + let cexp = oexp.as_ref().map_or(ptr::null(), |s| s.as_ptr()); CheckEqual(cexp, val, val_len); Free(&mut val); } } -fn CheckIter<'a, 'b>(iter: *mut rocksdb_iterator_t, - key: &'a str, val: &'b str) { - let mut len: size_t = 0; - let mut str: *const c_char; - str = unsafe { rocksdb_iter_key(iter, &mut len) }; - { let k = cstr(key); CheckEqual(k.as_ptr(), str, len) }; - str = unsafe { rocksdb_iter_value(iter, &mut len) }; - { let v = cstr(val); CheckEqual(v.as_ptr(), str, len) }; +fn CheckIter<'a, 'b>(iter: *mut rocksdb_iterator_t, key: &'a str, val: &'b str) { + let mut len: size_t = 0; + let mut str: *const c_char; + str = unsafe { rocksdb_iter_key(iter, &mut len) }; + { let k = cstr(key); CheckEqual(k.as_ptr(), str, len) }; + str = unsafe { rocksdb_iter_value(iter, &mut len) }; + { let v = cstr(val); CheckEqual(v.as_ptr(), str, len) }; } // Callback from rocksdb_writebatch_iterate() -extern "C" fn CheckPut(ptr: *mut c_void, - k: *const c_char, klen: size_t, - v: *const c_char, vlen: size_t) { - let mut state: *mut c_int = ptr as *mut c_int; - unsafe { - CheckCondition!(*state < 2); - match *state { - 0 => { - let l = cstr("bar"); let b = cstr("b"); - CheckEqual(l.as_ptr(), k, klen); - CheckEqual(b.as_ptr(), v, vlen); - } - 1 => { - let l = cstr("box"); let b = cstr("c"); - CheckEqual(l.as_ptr(), k, klen); - CheckEqual(b.as_ptr(), v, vlen); +unsafe extern "C" fn CheckPut(ptr: *mut c_void, k: *const c_char, klen: size_t, v: *const c_char, vlen: size_t) { + let mut state: *mut c_int = ptr as *mut c_int; + unsafe { + CheckCondition!(*state < 2); + match *state { + 0 => { + let l = cstr("bar"); let b = cstr("b"); + CheckEqual(l.as_ptr(), k, klen); + CheckEqual(b.as_ptr(), v, vlen); + } + 1 => { + let l = cstr("box"); let b = cstr("c"); + CheckEqual(l.as_ptr(), k, klen); + CheckEqual(b.as_ptr(), v, vlen); + } + _ => {} } - _ => {} + (*state) += 1; } - (*state) += 1; - } } // Callback from rocksdb_writebatch_iterate() -extern "C" fn CheckDel(ptr: *mut c_void, - k: *const c_char, klen: size_t) { +unsafe extern "C" fn CheckDel(ptr: *mut c_void, k: *const c_char, klen: size_t) { let mut state: *mut c_int = ptr as *mut c_int; CheckCondition!(unsafe { *state == 2 }); let v = cstr("bar"); @@ -189,10 +194,9 @@ extern "C" fn CheckDel(ptr: *mut c_void, unsafe { (*state) += 1 }; } -extern "C" fn cmp_destroy(arg: *mut c_void) {} +unsafe extern "C" fn cmp_destroy(arg: *mut c_void) {} -extern "C" fn cmp_compare(arg: *mut c_void, a: *const c_char, alen: size_t, - b: *const c_char, blen: size_t) -> c_int { +unsafe extern "C" fn cmp_compare(arg: *mut c_void, a: *const c_char, alen: size_t, b: *const c_char, blen: size_t) -> c_int { let n = if alen < blen { alen } else { blen }; let mut r = unsafe { libc::memcmp(a as *const c_void, b as *const c_void, n) @@ -207,19 +211,19 @@ extern "C" fn cmp_compare(arg: *mut c_void, a: *const c_char, alen: size_t, return r; } -extern "C" fn cmp_name(arg: *mut c_void) -> *const c_char { +unsafe extern "C" fn cmp_name(arg: *mut c_void) -> *const c_char { const name: &'static [u8] = b"foo\0"; name.as_ptr() as *const c_char } // Custom filter policy static mut fake_filter_result: u8 = 1; -extern "C" fn FilterDestroy(arg: *mut c_void) { } -extern "C" fn FilterName(arg: *mut c_void) -> *const c_char { +unsafe extern "C" fn FilterDestroy(arg: *mut c_void) { } +unsafe extern "C" fn FilterName(arg: *mut c_void) -> *const c_char { const name: &'static [u8] = b"TestFilter\0"; name.as_ptr() as *const c_char } -extern "C" fn FilterCreate( +unsafe extern "C" fn FilterCreate( arg: *mut c_void, key_array: *const *const c_char, key_length_array: *const size_t, @@ -231,7 +235,7 @@ extern "C" fn FilterCreate( cstrm("fake") as *mut c_char } } -extern "C" fn FilterKeyMatch( +unsafe extern "C" fn FilterKeyMatch( arg: *mut c_void, key: *const c_char, length: size_t, filter: *const c_char, filter_length: size_t @@ -248,12 +252,12 @@ extern "C" fn FilterKeyMatch( } // Custom compaction filter -extern "C" fn CFilterDestroy(arg: *mut c_void) {} -extern "C" fn CFilterName(arg: *mut c_void) -> *const c_char { +unsafe extern "C" fn CFilterDestroy(arg: *mut c_void) {} +unsafe extern "C" fn CFilterName(arg: *mut c_void) -> *const c_char { const name: &'static [u8] = b"foo\0"; name.as_ptr() as *const c_char } -extern "C" fn CFilterFilter( +unsafe extern "C" fn CFilterFilter( arg: *mut c_void, level: c_int, key: *const c_char, @@ -285,12 +289,12 @@ extern "C" fn CFilterFilter( return 0; } -extern "C" fn CFilterFactoryDestroy(arg: *mut c_void) {} -extern "C" fn CFilterFactoryName(arg: *mut c_void) -> *const c_char { +unsafe extern "C" fn CFilterFactoryDestroy(arg: *mut c_void) {} +unsafe extern "C" fn CFilterFactoryName(arg: *mut c_void) -> *const c_char { const name: &'static [u8] = b"foo\0"; name.as_ptr() as *const c_char } -extern "C" fn CFilterCreate( +unsafe extern "C" fn CFilterCreate( arg: *mut c_void, context: *mut rocksdb_compactionfiltercontext_t) -> *mut rocksdb_compactionfilter_t { unsafe { @@ -299,7 +303,7 @@ extern "C" fn CFilterCreate( } } -fn CheckCompaction(db: *mut rocksdb_t, +unsafe fn CheckCompaction(db: *mut rocksdb_t, roptions: *mut rocksdb_readoptions_t, woptions: *mut rocksdb_writeoptions_t) -> *mut rocksdb_t { unsafe { @@ -335,12 +339,12 @@ fn CheckCompaction(db: *mut rocksdb_t, } // Custom merge operator -extern "C" fn MergeOperatorDestroy(arg: *mut c_void) { } -extern "C" fn MergeOperatorName(arg: *mut c_void) -> *const c_char { +unsafe extern "C" fn MergeOperatorDestroy(arg: *mut c_void) { } +unsafe extern "C" fn MergeOperatorName(arg: *mut c_void) -> *const c_char { const name: &'static [u8] = b"TestMergeOperator\0"; name.as_ptr() as *const c_char } -extern "C" fn MergeOperatorFullMerge( +unsafe extern "C" fn MergeOperatorFullMerge( arg: *mut c_void, key: *const c_char, key_length: size_t, @@ -358,7 +362,7 @@ extern "C" fn MergeOperatorFullMerge( cstrm("fake") as *mut c_char } } -extern "C" fn MergeOperatorPartialMerge( +unsafe extern "C" fn MergeOperatorPartialMerge( arg: *mut c_void, key: *const c_char, key_length: size_t, @@ -419,9 +423,9 @@ fn test_ffi() { rocksdb_block_based_options_set_block_cache(table_options, cache); rocksdb_options_set_block_based_table_factory(options, table_options); - let no_compression = rocksdb_no_compression as c_int; + let no_compression = rocksdb_compression_type_t::no; rocksdb_options_set_compression(options, no_compression); - rocksdb_options_set_compression_options(options, -14, -1, 0); + rocksdb_options_set_compression_options(options, -14, -1, 0, 0); let compression_levels = vec![ no_compression, no_compression, @@ -908,7 +912,7 @@ fn test_ffi() { let cf_namesm = vec![cstr("default"), cstr("cf1")]; let cf_names: Vec<*const c_char> = cf_namesm.iter().map(|s| s.as_ptr()).collect(); - let cf_opts: Vec<*mut rocksdb_options_t> = vec![cf_options, cf_options]; + let cf_opts: Vec<*const rocksdb_options_t> = vec![cf_options, cf_options]; let mut handles: [*mut rocksdb_column_family_handle_t; 2] = [ptr::null_mut(), ptr::null_mut()]; db = rocksdb_open_column_families(db_options, dbname.as_ptr(), 2, cf_names.as_ptr(), cf_opts.as_ptr(), handles.as_mut_ptr(), &mut err); From f6e8de1ec6f232024f185c019afae5173c5e0ca8 Mon Sep 17 00:00:00 2001 From: Alexander Regueiro Date: Wed, 26 Oct 2016 02:38:45 +0100 Subject: [PATCH 2/6] Removed Option<_> wrappers around function types. --- src/lib.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b804857..945071b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -172,7 +172,7 @@ extern "C" { pub fn rocksdb_writebatch_put_log_data(batch: *mut rocksdb_writebatch_t, blob: *const c_char, len: size_t); - pub fn rocksdb_writebatch_iterate(batch: *mut rocksdb_writebatch_t, state: *mut c_void, put: Option, deleted: Option); + pub fn rocksdb_writebatch_iterate(batch: *mut rocksdb_writebatch_t, state: *mut c_void, put: unsafe extern "C" fn(state: *mut c_void, k: *const c_char, klen: size_t, v: *const c_char, vlen: size_t), deleted: unsafe extern "C" fn(state: *mut c_void, k: *const c_char, klen: size_t)); pub fn rocksdb_writebatch_data(batch: *mut rocksdb_writebatch_t, size: *mut size_t) -> *const c_char; @@ -424,7 +424,7 @@ extern "C" { pub fn rocksdb_options_set_fifo_compaction_options(opt: *mut rocksdb_options_t, fifo: *mut rocksdb_fifo_compaction_options_t); - pub fn rocksdb_compactionfilter_create(state: *mut c_void, destructor: Option, filter: Option c_uchar>, name: Option *const c_char>) -> *mut rocksdb_compactionfilter_t; + pub fn rocksdb_compactionfilter_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), filter: unsafe extern "C" fn(state: *mut c_void, level: c_int, key: *const c_char, key_length: size_t, existing_value: *const c_char, value_length: size_t, new_value: *mut *mut c_char, new_value_length: *mut size_t, value_changed: *mut c_uchar) -> c_uchar, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_compactionfilter_t; pub fn rocksdb_compactionfilter_destroy(filter: *mut rocksdb_compactionfilter_t); @@ -432,15 +432,15 @@ extern "C" { pub fn rocksdb_compactionfiltercontext_is_manual_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; - pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, destructor: Option, create_compaction_filter: Option *mut rocksdb_compactionfilter_t>, name: Option *const c_char>) -> *mut rocksdb_compactionfilterfactory_t; + pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), create_compaction_filter: unsafe extern "C" fn(state: *mut c_void, context: *mut rocksdb_compactionfiltercontext_t) -> *mut rocksdb_compactionfilter_t, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_compactionfilterfactory_t; pub fn rocksdb_compactionfilterfactory_destroy(factory: *mut rocksdb_compactionfilterfactory_t); - pub fn rocksdb_comparator_create(state: *mut c_void, destructor: Option, compare: Option c_int>, name: Option *const c_char>) -> *mut rocksdb_comparator_t; + pub fn rocksdb_comparator_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), compare: unsafe extern "C" fn(state: *mut c_void, a: *const c_char, alen: size_t, b: *const c_char, blen: size_t) -> c_int, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_comparator_t; pub fn rocksdb_comparator_destroy(cmp: *mut rocksdb_comparator_t); - pub fn rocksdb_filterpolicy_create(state: *mut c_void, destructor: Option, create_filter: Option *mut c_char>, key_may_match: Option c_uchar>, delete_filter: Option, name: Option *const c_char>) -> *mut rocksdb_filterpolicy_t; + pub fn rocksdb_filterpolicy_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), create_filter: unsafe extern "C" fn(state: *mut c_void, key_array: *const *const c_char, key_length_array: *const size_t, num_keys: c_int, filter_length: *mut size_t) -> *mut c_char, key_may_match: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t, filter: *const c_char, filter_length: size_t) -> c_uchar, delete_filter: unsafe extern "C" fn(state: *mut c_void, filter: *const c_char, filter_length: size_t), name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_filterpolicy_t; pub fn rocksdb_filterpolicy_destroy(filter: *mut rocksdb_filterpolicy_t); @@ -448,7 +448,7 @@ extern "C" { pub fn rocksdb_filterpolicy_create_bloom_full(bits_per_key: c_int) -> *mut rocksdb_filterpolicy_t; - pub fn rocksdb_mergeoperator_create(state: *mut c_void, destructor: Option, full_merge: Option *mut c_char>, partial_merge: Option *mut c_char>, delete_value: Option, name: Option *const c_char>) -> *mut rocksdb_mergeoperator_t; + pub fn rocksdb_mergeoperator_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), full_merge: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, key_length: size_t, existing_value: *const c_char, existing_value_length: size_t, operands_list: *const *const c_char, operands_list_length: *const size_t, num_operands: c_int, success: *mut c_uchar, new_value_length: *mut size_t) -> *mut c_char, partial_merge: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, key_length: size_t, operands_list: *const *const c_char, operands_list_length: *const size_t, num_operands: c_int, success: *mut c_uchar, new_value_length: *mut size_t) -> *mut c_char, delete_value: unsafe extern "C" fn(state: *mut c_void, value: *const c_char, value_length: size_t), name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_mergeoperator_t; pub fn rocksdb_mergeoperator_destroy(merge_operator: *mut rocksdb_mergeoperator_t); @@ -502,7 +502,7 @@ extern "C" { pub fn rocksdb_env_destroy(env: *mut rocksdb_env_t); - pub fn rocksdb_slicetransform_create(state: *mut c_void, destructor: Option, transform: Option *mut c_char>, in_domain: Option c_uchar>, in_range: Option c_uchar>, name: Option *const c_char>) -> *mut rocksdb_slicetransform_t; + pub fn rocksdb_slicetransform_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), transform: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t, dst_length: *mut size_t) -> *mut c_char, in_domain: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t) -> c_uchar, in_range: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t) -> c_uchar, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_slicetransform_t; pub fn rocksdb_slicetransform_create_fixed_prefix(len: size_t) -> *mut rocksdb_slicetransform_t; From 113e7ecd2f0bd4456119981e1ca132bed567c5ec Mon Sep 17 00:00:00 2001 From: Alexander Regueiro Date: Wed, 26 Oct 2016 02:53:36 +0100 Subject: [PATCH 3/6] Enum variants now have CamelCase style. --- src/lib.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 945071b..fa8d45f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -558,34 +558,34 @@ extern "C" { #[derive(Copy, Clone, Debug)] #[repr(C)] pub enum rocksdb_block_based_table_index_type_t { - binary_search = 0, - hash_search = 1, + BinarySearch = 0, + HashSearch = 1, } #[derive(Copy, Clone, Debug)] #[repr(C)] pub enum rocksdb_compression_type_t { - no = 0, - snappy = 1, - zlib = 2, - bz2 = 3, - lz4 = 4, - lz4hc = 5, + None = 0, + Snappy = 1, + Zlib = 2, + Bz2 = 3, + Lz4 = 4, + Lz4hc = 5, } #[derive(Copy, Clone, Debug)] #[repr(C)] pub enum rocksdb_compaction_style_t { - level = 0, - universal = 1, - fifo = 2, + Level = 0, + Yniversal = 1, + Fifo = 2, } #[derive(Copy, Clone, Debug)] #[repr(C)] pub enum rocksdb_compaction_stop_style_t { - similar_size = 0, - total_size = 1, + SimilarSize = 0, + TotalSize = 1, } pub enum rocksdb_t { } From bfecf0cc5e62b4821c6421b8b6147935d6c5158f Mon Sep 17 00:00:00 2001 From: Alexander Regueiro Date: Wed, 26 Oct 2016 16:48:06 +0100 Subject: [PATCH 4/6] Added comments for various sections of functions. Added missing `rocksdb_compactionfilter_set_ignore_snapshots` function. --- src/lib.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index fa8d45f..ff0ee73 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,8 @@ mod test; use libc::*; extern "C" { + // Database operations + pub fn rocksdb_open(options: *const rocksdb_options_t, name: *const c_char, errptr: *mut *mut c_char) -> *mut rocksdb_t; pub fn rocksdb_open_for_read_only(options: *const rocksdb_options_t, name: *const c_char, error_if_log_file_exist: c_uchar, errptr: *mut *mut c_char) -> *mut rocksdb_t; @@ -112,10 +114,14 @@ extern "C" { pub fn rocksdb_enable_file_deletions(db: *mut rocksdb_t, force: c_uchar, errptr: *mut *mut c_char); + // Management operations + pub fn rocksdb_destroy_db(options: *const rocksdb_options_t, name: *const c_char, errptr: *mut *mut c_char); pub fn rocksdb_repair_db(options: *const rocksdb_options_t, name: *const c_char, errptr: *mut *mut c_char); + // Iterator + pub fn rocksdb_iter_destroy(iterator: *mut rocksdb_iterator_t); pub fn rocksdb_iter_valid(iterator: *const rocksdb_iterator_t) -> c_uchar; @@ -136,6 +142,8 @@ extern "C" { pub fn rocksdb_iter_get_error(iterator: *const rocksdb_iterator_t, errptr: *mut *mut c_char); + // Write batch + pub fn rocksdb_writebatch_create() -> *mut rocksdb_writebatch_t; pub fn rocksdb_writebatch_create_from(rep: *const c_char, size: size_t) -> *mut rocksdb_writebatch_t; @@ -176,6 +184,8 @@ extern "C" { pub fn rocksdb_writebatch_data(batch: *mut rocksdb_writebatch_t, size: *mut size_t) -> *const c_char; + // Block-based table options + pub fn rocksdb_block_based_options_create() -> *mut rocksdb_block_based_table_options_t; pub fn rocksdb_block_based_options_destroy(options: *mut rocksdb_block_based_table_options_t); @@ -210,6 +220,8 @@ extern "C" { pub fn rocksdb_options_set_block_based_table_factory(opt: *mut rocksdb_options_t, table_options: *mut rocksdb_block_based_table_options_t); + // Cuckoo table options + pub fn rocksdb_cuckoo_options_create() -> *mut rocksdb_cuckoo_table_options_t; pub fn rocksdb_cuckoo_options_destroy(options: *mut rocksdb_cuckoo_table_options_t); @@ -226,6 +238,8 @@ extern "C" { pub fn rocksdb_options_set_cuckoo_table_factory(opt: *mut rocksdb_options_t, table_options: *mut rocksdb_cuckoo_table_options_t); + // Options + pub fn rocksdb_options_create() -> *mut rocksdb_options_t; pub fn rocksdb_options_destroy(opt: *mut rocksdb_options_t); @@ -424,22 +438,34 @@ extern "C" { pub fn rocksdb_options_set_fifo_compaction_options(opt: *mut rocksdb_options_t, fifo: *mut rocksdb_fifo_compaction_options_t); + // Compaction filter + pub fn rocksdb_compactionfilter_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), filter: unsafe extern "C" fn(state: *mut c_void, level: c_int, key: *const c_char, key_length: size_t, existing_value: *const c_char, value_length: size_t, new_value: *mut *mut c_char, new_value_length: *mut size_t, value_changed: *mut c_uchar) -> c_uchar, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_compactionfilter_t; + pub fn rocksdb_compactionfilter_set_ignore_snapshots(filter: *mut rocksdb_compactionfilter_t, v: c_uchar); + pub fn rocksdb_compactionfilter_destroy(filter: *mut rocksdb_compactionfilter_t); + // Compaction filter context + pub fn rocksdb_compactionfiltercontext_is_full_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; pub fn rocksdb_compactionfiltercontext_is_manual_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; + // Compaction filter factory + pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), create_compaction_filter: unsafe extern "C" fn(state: *mut c_void, context: *mut rocksdb_compactionfiltercontext_t) -> *mut rocksdb_compactionfilter_t, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_compactionfilterfactory_t; pub fn rocksdb_compactionfilterfactory_destroy(factory: *mut rocksdb_compactionfilterfactory_t); + // Comparator + pub fn rocksdb_comparator_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), compare: unsafe extern "C" fn(state: *mut c_void, a: *const c_char, alen: size_t, b: *const c_char, blen: size_t) -> c_int, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_comparator_t; pub fn rocksdb_comparator_destroy(cmp: *mut rocksdb_comparator_t); + // Filter policy + pub fn rocksdb_filterpolicy_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), create_filter: unsafe extern "C" fn(state: *mut c_void, key_array: *const *const c_char, key_length_array: *const size_t, num_keys: c_int, filter_length: *mut size_t) -> *mut c_char, key_may_match: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t, filter: *const c_char, filter_length: size_t) -> c_uchar, delete_filter: unsafe extern "C" fn(state: *mut c_void, filter: *const c_char, filter_length: size_t), name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_filterpolicy_t; pub fn rocksdb_filterpolicy_destroy(filter: *mut rocksdb_filterpolicy_t); @@ -448,10 +474,14 @@ extern "C" { pub fn rocksdb_filterpolicy_create_bloom_full(bits_per_key: c_int) -> *mut rocksdb_filterpolicy_t; + // Merge operator + pub fn rocksdb_mergeoperator_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), full_merge: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, key_length: size_t, existing_value: *const c_char, existing_value_length: size_t, operands_list: *const *const c_char, operands_list_length: *const size_t, num_operands: c_int, success: *mut c_uchar, new_value_length: *mut size_t) -> *mut c_char, partial_merge: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, key_length: size_t, operands_list: *const *const c_char, operands_list_length: *const size_t, num_operands: c_int, success: *mut c_uchar, new_value_length: *mut size_t) -> *mut c_char, delete_value: unsafe extern "C" fn(state: *mut c_void, value: *const c_char, value_length: size_t), name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_mergeoperator_t; pub fn rocksdb_mergeoperator_destroy(merge_operator: *mut rocksdb_mergeoperator_t); + // Read options + pub fn rocksdb_readoptions_create() -> *mut rocksdb_readoptions_t; pub fn rocksdb_readoptions_destroy(opt: *mut rocksdb_readoptions_t); @@ -470,6 +500,8 @@ extern "C" { pub fn rocksdb_readoptions_set_readahead_size(opt: *mut rocksdb_readoptions_t, v: size_t); + // Write options + pub fn rocksdb_writeoptions_create() -> *mut rocksdb_writeoptions_t; pub fn rocksdb_writeoptions_destroy(opt: *mut rocksdb_writeoptions_t); @@ -478,18 +510,24 @@ extern "C" { pub fn rocksdb_writeoptions_disable_WAL(opt: *mut rocksdb_writeoptions_t, disable: c_int); + // Flush options + pub fn rocksdb_flushoptions_create() -> *mut rocksdb_flushoptions_t; pub fn rocksdb_flushoptions_destroy(opt: *mut rocksdb_flushoptions_t); pub fn rocksdb_flushoptions_set_wait(opt: *mut rocksdb_flushoptions_t, v: c_uchar); + // Cache + pub fn rocksdb_cache_create_lru(capacity: size_t) -> *mut rocksdb_cache_t; pub fn rocksdb_cache_destroy(cache: *mut rocksdb_cache_t); pub fn rocksdb_cache_set_capacity(cache: *mut rocksdb_cache_t, capacity: size_t); + // Environment + pub fn rocksdb_create_default_env() -> *mut rocksdb_env_t; pub fn rocksdb_create_mem_env() -> *mut rocksdb_env_t; @@ -502,6 +540,8 @@ extern "C" { pub fn rocksdb_env_destroy(env: *mut rocksdb_env_t); + // Slice Transform + pub fn rocksdb_slicetransform_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), transform: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t, dst_length: *mut size_t) -> *mut c_char, in_domain: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t) -> c_uchar, in_range: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t) -> c_uchar, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_slicetransform_t; pub fn rocksdb_slicetransform_create_fixed_prefix(len: size_t) -> *mut rocksdb_slicetransform_t; @@ -510,6 +550,8 @@ extern "C" { pub fn rocksdb_slicetransform_destroy(st: *mut rocksdb_slicetransform_t); + // Universal Compaction options + pub fn rocksdb_universal_compaction_options_create() -> *mut rocksdb_universal_compaction_options_t; pub fn rocksdb_universal_compaction_options_set_size_ratio(uco: *mut rocksdb_universal_compaction_options_t, ratio: c_int); @@ -546,6 +588,8 @@ extern "C" { pub fn rocksdb_livefiles_destroy(files: *const rocksdb_livefiles_t); + // Utilities + pub fn rocksdb_get_options_from_string(base_options: *const rocksdb_options_t, opts_str: *const c_char, new_options: *mut rocksdb_options_t, errptr: *mut *mut c_char); pub fn rocksdb_delete_file_in_range(db: *mut rocksdb_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t, errptr: *mut *mut c_char); From 5edcb4a222c3cf23ce8e7fb0d6eb7ddf37c0b5d0 Mon Sep 17 00:00:00 2001 From: Alexander Regueiro Date: Thu, 27 Oct 2016 02:04:01 +0100 Subject: [PATCH 5/6] Reverted to Option<_> types for function pointers. --- build.rs | 2 +- src/lib.rs | 76 +++++++++++++++++++------------------------------ tests/c_test.rs | 2 +- 3 files changed, 32 insertions(+), 48 deletions(-) diff --git a/build.rs b/build.rs index 182c34b..3c43a8a 100644 --- a/build.rs +++ b/build.rs @@ -13,7 +13,7 @@ fn main() { cmd.current_dir(Path::new("rocksdb")) .arg("EXTRA_CFLAGS=-fPIC") - .arg("EXTRA_CXXFLAGS=-fPIC") // -std=c++11 -stdlib=libstdc++ + .arg("EXTRA_CXXFLAGS=-fPIC") .arg(format!("INSTALL_PATH={}", out_dir)); if let Ok(jobs) = num_jobs { diff --git a/src/lib.rs b/src/lib.rs index ff0ee73..8acb41d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -180,7 +180,7 @@ extern "C" { pub fn rocksdb_writebatch_put_log_data(batch: *mut rocksdb_writebatch_t, blob: *const c_char, len: size_t); - pub fn rocksdb_writebatch_iterate(batch: *mut rocksdb_writebatch_t, state: *mut c_void, put: unsafe extern "C" fn(state: *mut c_void, k: *const c_char, klen: size_t, v: *const c_char, vlen: size_t), deleted: unsafe extern "C" fn(state: *mut c_void, k: *const c_char, klen: size_t)); + pub fn rocksdb_writebatch_iterate(batch: *mut rocksdb_writebatch_t, state: *mut c_void, put: Option, deleted: Option); pub fn rocksdb_writebatch_data(batch: *mut rocksdb_writebatch_t, size: *mut size_t) -> *const c_char; @@ -208,7 +208,7 @@ extern "C" { pub fn rocksdb_block_based_options_set_format_version(options: *mut rocksdb_block_based_table_options_t, v: c_int); - pub fn rocksdb_block_based_options_set_index_type(options: *mut rocksdb_block_based_table_options_t, v: rocksdb_block_based_table_index_type_t); + pub fn rocksdb_block_based_options_set_index_type(options: *mut rocksdb_block_based_table_options_t, v: c_int); pub fn rocksdb_block_based_options_set_hash_index_allow_collision(options: *mut rocksdb_block_based_table_options_t, v: c_uchar); @@ -264,7 +264,7 @@ extern "C" { pub fn rocksdb_options_set_uint64add_merge_operator(opt: *mut rocksdb_options_t); - pub fn rocksdb_options_set_compression_per_level(opt: *mut rocksdb_options_t, level_values: *mut rocksdb_compression_type_t, num_levels: size_t); + pub fn rocksdb_options_set_compression_per_level(opt: *mut rocksdb_options_t, level_values: *mut c_int, num_levels: size_t); pub fn rocksdb_options_set_create_if_missing(opt: *mut rocksdb_options_t, v: c_uchar); @@ -300,7 +300,7 @@ extern "C" { pub fn rocksdb_options_set_level0_stop_writes_trigger(opt: *mut rocksdb_options_t, n: c_int); - pub fn rocksdb_options_set_max_mem_compaction_level(opt: *mut rocksdb_options_t, n: rocksdb_compaction_style_t); + pub fn rocksdb_options_set_max_mem_compaction_level(opt: *mut rocksdb_options_t, n: c_int); pub fn rocksdb_options_set_target_file_size_base(opt: *mut rocksdb_options_t, n: uint64_t); @@ -314,7 +314,7 @@ extern "C" { pub fn rocksdb_options_set_max_grandparent_overlap_factor(opt: *mut rocksdb_options_t, v: c_int); - pub fn rocksdb_options_set_max_bytes_for_level_multiplier_additional(opt: *mut rocksdb_options_t, level_values: *mut rocksdb_compression_type_t, num_levels: size_t); + pub fn rocksdb_options_set_max_bytes_for_level_multiplier_additional(opt: *mut rocksdb_options_t, level_values: *mut c_int, num_levels: size_t); pub fn rocksdb_options_enable_statistics(opt: *mut rocksdb_options_t); @@ -430,9 +430,9 @@ extern "C" { pub fn rocksdb_options_set_report_bg_io_stats(opt: *mut rocksdb_options_t, v: c_int); - pub fn rocksdb_options_set_compression(opt: *mut rocksdb_options_t, t: rocksdb_compression_type_t); + pub fn rocksdb_options_set_compression(opt: *mut rocksdb_options_t, t: c_int); - pub fn rocksdb_options_set_compaction_style(opt: *mut rocksdb_options_t, style: rocksdb_compaction_style_t); + pub fn rocksdb_options_set_compaction_style(opt: *mut rocksdb_options_t, style: c_int); pub fn rocksdb_options_set_universal_compaction_options(opt: *mut rocksdb_options_t, uco: *mut rocksdb_universal_compaction_options_t); @@ -440,33 +440,33 @@ extern "C" { // Compaction filter - pub fn rocksdb_compactionfilter_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), filter: unsafe extern "C" fn(state: *mut c_void, level: c_int, key: *const c_char, key_length: size_t, existing_value: *const c_char, value_length: size_t, new_value: *mut *mut c_char, new_value_length: *mut size_t, value_changed: *mut c_uchar) -> c_uchar, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_compactionfilter_t; + pub fn rocksdb_compactionfilter_create(state: *mut c_void, destructor: Option, filter: Option c_uchar>, name: Option *const c_char>) -> *mut rocksdb_compactionfilter_t; pub fn rocksdb_compactionfilter_set_ignore_snapshots(filter: *mut rocksdb_compactionfilter_t, v: c_uchar); pub fn rocksdb_compactionfilter_destroy(filter: *mut rocksdb_compactionfilter_t); - // Compaction filter context + // Compaction Filter context pub fn rocksdb_compactionfiltercontext_is_full_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; pub fn rocksdb_compactionfiltercontext_is_manual_compaction(context: *mut rocksdb_compactionfiltercontext_t) -> c_uchar; - // Compaction filter factory + // Compaction Filter factory - pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), create_compaction_filter: unsafe extern "C" fn(state: *mut c_void, context: *mut rocksdb_compactionfiltercontext_t) -> *mut rocksdb_compactionfilter_t, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_compactionfilterfactory_t; + pub fn rocksdb_compactionfilterfactory_create(state: *mut c_void, destructor: Option, create_compaction_filter: Option *mut rocksdb_compactionfilter_t>, name: Option *const c_char>) -> *mut rocksdb_compactionfilterfactory_t; pub fn rocksdb_compactionfilterfactory_destroy(factory: *mut rocksdb_compactionfilterfactory_t); // Comparator - pub fn rocksdb_comparator_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), compare: unsafe extern "C" fn(state: *mut c_void, a: *const c_char, alen: size_t, b: *const c_char, blen: size_t) -> c_int, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_comparator_t; + pub fn rocksdb_comparator_create(state: *mut c_void, destructor: Option, compare: Option c_int>, name: Option *const c_char>) -> *mut rocksdb_comparator_t; pub fn rocksdb_comparator_destroy(cmp: *mut rocksdb_comparator_t); // Filter policy - pub fn rocksdb_filterpolicy_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), create_filter: unsafe extern "C" fn(state: *mut c_void, key_array: *const *const c_char, key_length_array: *const size_t, num_keys: c_int, filter_length: *mut size_t) -> *mut c_char, key_may_match: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t, filter: *const c_char, filter_length: size_t) -> c_uchar, delete_filter: unsafe extern "C" fn(state: *mut c_void, filter: *const c_char, filter_length: size_t), name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_filterpolicy_t; + pub fn rocksdb_filterpolicy_create(state: *mut c_void, destructor: Option, create_filter: Option *mut c_char>, key_may_match: Option c_uchar>, delete_filter: Option, name: Option *const c_char>) -> *mut rocksdb_filterpolicy_t; pub fn rocksdb_filterpolicy_destroy(filter: *mut rocksdb_filterpolicy_t); @@ -474,9 +474,9 @@ extern "C" { pub fn rocksdb_filterpolicy_create_bloom_full(bits_per_key: c_int) -> *mut rocksdb_filterpolicy_t; - // Merge operator + // Merge Operator - pub fn rocksdb_mergeoperator_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), full_merge: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, key_length: size_t, existing_value: *const c_char, existing_value_length: size_t, operands_list: *const *const c_char, operands_list_length: *const size_t, num_operands: c_int, success: *mut c_uchar, new_value_length: *mut size_t) -> *mut c_char, partial_merge: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, key_length: size_t, operands_list: *const *const c_char, operands_list_length: *const size_t, num_operands: c_int, success: *mut c_uchar, new_value_length: *mut size_t) -> *mut c_char, delete_value: unsafe extern "C" fn(state: *mut c_void, value: *const c_char, value_length: size_t), name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_mergeoperator_t; + pub fn rocksdb_mergeoperator_create(state: *mut c_void, destructor: Option, full_merge: Option *mut c_char>, partial_merge: Option *mut c_char>, delete_value: Option, name: Option *const c_char>) -> *mut rocksdb_mergeoperator_t; pub fn rocksdb_mergeoperator_destroy(merge_operator: *mut rocksdb_mergeoperator_t); @@ -542,7 +542,7 @@ extern "C" { // Slice Transform - pub fn rocksdb_slicetransform_create(state: *mut c_void, destructor: unsafe extern "C" fn(state: *mut c_void), transform: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t, dst_length: *mut size_t) -> *mut c_char, in_domain: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t) -> c_uchar, in_range: unsafe extern "C" fn(state: *mut c_void, key: *const c_char, length: size_t) -> c_uchar, name: unsafe extern "C" fn(state: *mut c_void) -> *const c_char) -> *mut rocksdb_slicetransform_t; + pub fn rocksdb_slicetransform_create(state: *mut c_void, destructor: Option, transform: Option *mut c_char>, in_domain: Option c_uchar>, in_range: Option c_uchar>, name: Option *const c_char>) -> *mut rocksdb_slicetransform_t; pub fn rocksdb_slicetransform_create_fixed_prefix(len: size_t) -> *mut rocksdb_slicetransform_t; @@ -564,7 +564,7 @@ extern "C" { pub fn rocksdb_universal_compaction_options_set_compression_size_percent(uco: *mut rocksdb_universal_compaction_options_t, p: c_int); - pub fn rocksdb_universal_compaction_options_set_stop_style(uco: *mut rocksdb_universal_compaction_options_t, style: rocksdb_compaction_stop_style_t); + pub fn rocksdb_universal_compaction_options_set_stop_style(uco: *mut rocksdb_universal_compaction_options_t, style: c_int); pub fn rocksdb_universal_compaction_options_destroy(uco: *mut rocksdb_universal_compaction_options_t); @@ -599,38 +599,22 @@ extern "C" { pub fn rocksdb_free(ptr: *mut c_void); } -#[derive(Copy, Clone, Debug)] -#[repr(C)] -pub enum rocksdb_block_based_table_index_type_t { - BinarySearch = 0, - HashSearch = 1, -} +pub const rocksdb_block_based_table_index_type_binary_search: c_int = 0; +pub const rocksdb_block_based_table_index_type_hash_search: c_int = 1; -#[derive(Copy, Clone, Debug)] -#[repr(C)] -pub enum rocksdb_compression_type_t { - None = 0, - Snappy = 1, - Zlib = 2, - Bz2 = 3, - Lz4 = 4, - Lz4hc = 5, -} +pub const rocksdb_no_compression: c_int = 0; +pub const rocksdb_snappy_compression: c_int = 1; +pub const rocksdb_zlib_compression: c_int = 2; +pub const rocksdb_bz2_compression: c_int = 3; +pub const rocksdb_lz4_compression: c_int = 4; +pub const rocksdb_lz4hc_compression: c_int = 5; -#[derive(Copy, Clone, Debug)] -#[repr(C)] -pub enum rocksdb_compaction_style_t { - Level = 0, - Yniversal = 1, - Fifo = 2, -} +pub const rocksdb_level_compaction: c_int = 0; +pub const rocksdb_universal_compaction: c_int = 1; +pub const rocksdb_fifo_compaction: c_int = 2; -#[derive(Copy, Clone, Debug)] -#[repr(C)] -pub enum rocksdb_compaction_stop_style_t { - SimilarSize = 0, - TotalSize = 1, -} +pub const rocksdb_similar_size_compaction_stop_style: c_int = 0; +pub const rocksdb_total_size_compaction_stop_style: c_int = 1; pub enum rocksdb_t { } diff --git a/tests/c_test.rs b/tests/c_test.rs index 517a61a..bf3d21b 100644 --- a/tests/c_test.rs +++ b/tests/c_test.rs @@ -423,7 +423,7 @@ fn test_ffi() { rocksdb_block_based_options_set_block_cache(table_options, cache); rocksdb_options_set_block_based_table_factory(options, table_options); - let no_compression = rocksdb_compression_type_t::no; + let no_compression = rocksdb_no_compression; rocksdb_options_set_compression(options, no_compression); rocksdb_options_set_compression_options(options, -14, -1, 0, 0); let compression_levels = vec![ From ba1a11b496b979984f062d17489d09109cbf81d0 Mon Sep 17 00:00:00 2001 From: Alexander Regueiro Date: Fri, 28 Oct 2016 16:04:48 +0100 Subject: [PATCH 6/6] Added module documentation. --- src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 8acb41d..3b0d184 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,7 @@ +//! Raw bindings for RocksDB. +//! +//! This is simply a raw interface to the RocksDB C API. It is intended to underpin a higher-level library rather than for direct use. + #![allow(dead_code, non_camel_case_types, non_upper_case_globals, non_snake_case)] extern crate libc;