1#![crate_name = "mtbl_sys"]
67#![crate_type = "lib"]
68#![allow(dead_code,improper_ctypes)]
69
70extern crate libc;
71use libc::{c_char, c_int, c_uint, c_void, size_t};
72
73#[derive(Clone,Copy,Debug,PartialEq)]
75#[repr(C)]
76pub enum CompressionType {
77 MTBL_COMPRESSION_NONE = 0,
78 MTBL_COMPRESSION_SNAPPY = 1,
79 MTBL_COMPRESSION_ZLIB = 2,
80 MTBL_COMPRESSION_LZ4 = 3,
81 MTBL_COMPRESSION_LZ4HC = 4,
82}
83
84#[derive(Clone,Copy,Debug,PartialEq)]
85#[repr(C)]
86pub enum MtblRes {
87 mtbl_res_failure = 0,
88 mtbl_res_success = 1,
89}
90
91#[repr(C)]
92pub struct mtbl_iter;
93#[repr(C)]
94pub struct mtbl_source;
95
96#[repr(C)]
97pub struct mtbl_reader;
98#[repr(C)]
99pub struct mtbl_reader_options;
100#[repr(C)]
101pub struct mtbl_metadata;
102#[repr(C)]
103pub struct mtbl_writer;
104#[repr(C)]
105pub struct mtbl_writer_options;
106
107#[repr(C)]
108pub struct mtbl_merger;
109#[repr(C)]
110pub struct mtbl_merger_options;
111#[repr(C)]
112pub struct mtbl_fileset;
113#[repr(C)]
114pub struct mtbl_fileset_options;
115#[repr(C)]
116pub struct mtbl_sorter;
117#[repr(C)]
118pub struct mtbl_sorter_options;
119
120#[link(name="mtbl")]
121extern "C" {
122
123 pub fn mtbl_iter_destroy(iter: *mut *mut mtbl_iter);
126
127 pub fn mtbl_iter_next(iter: *mut mtbl_iter,
128 key: *mut *const u8,
129 len_key: *mut size_t,
130 val: *mut *const u8,
131 len_val: *mut size_t)
132 -> MtblRes;
133
134 pub fn mtbl_source_iter(source: *const mtbl_source) -> *mut mtbl_iter;
137
138 pub fn mtbl_source_get(source: *const mtbl_source,
139 key: *const u8,
140 len_key: size_t)
141 -> *mut mtbl_iter;
142
143 pub fn mtbl_source_get_prefix(source: *const mtbl_source,
144 key: *const u8,
145 len_key: size_t)
146 -> *mut mtbl_iter;
147
148 pub fn mtbl_source_get_range(source: *const mtbl_source,
149 key0: *const u8,
150 len_key0: size_t,
151 key1: *const u8,
152 len_key1: size_t)
153 -> *mut mtbl_iter;
154
155 fn mtbl_source_write(source: *const mtbl_source, writer: *mut mtbl_writer) -> MtblRes;
156
157 pub fn mtbl_writer_init(fname: *const c_char,
160 options: *const mtbl_writer_options)
161 -> *mut mtbl_writer;
162
163 pub fn mtbl_writer_init_fd(fd: c_int, options: *const mtbl_writer_options) -> *mut mtbl_writer;
164
165 pub fn mtbl_writer_destroy(writer: *mut *mut mtbl_writer);
166
167 pub fn mtbl_writer_add(writer: *mut mtbl_writer,
168 key: *const u8,
169 len_key: size_t,
170 val: *const u8,
171 len_val: size_t)
172 -> MtblRes;
173
174 pub fn mtbl_writer_options_init() -> *mut mtbl_writer_options;
177
178 pub fn mtbl_writer_options_destroy(options: *mut *mut mtbl_writer_options);
179
180 pub fn mtbl_writer_options_set_compression(options: *mut mtbl_writer_options,
181 compression: CompressionType);
182
183 pub fn mtbl_writer_options_set_block_size(options: *mut mtbl_writer_options, size: size_t);
184
185 pub fn mtbl_writer_options_set_block_restart_interval(options: *mut mtbl_writer_options,
186 size: size_t);
187
188 pub fn mtbl_reader_init(fname: *const c_char,
191 options: *const mtbl_reader_options)
192 -> *mut mtbl_reader;
193
194 pub fn mtbl_reader_init_fd(fd: c_int, options: *const mtbl_reader_options) -> *mut mtbl_reader;
195
196 pub fn mtbl_reader_destroy(reader: *mut *mut mtbl_reader);
197
198 pub fn mtbl_reader_source(reader: *mut mtbl_reader) -> *const mtbl_source;
199
200 pub fn mtbl_reader_metadata(reader: *mut mtbl_reader) -> *const mtbl_metadata;
201
202 pub fn mtbl_reader_options_init() -> *mut mtbl_reader_options;
205
206 pub fn mtbl_reader_options_destroy(options: *mut *mut mtbl_reader_options);
207
208 pub fn mtbl_reader_options_set_verify_checksums(options: *mut mtbl_reader_options,
210 verify_checksums: bool);
211
212 pub fn mtbl_reader_options_set_madvise_random(options: *mut mtbl_reader_options,
214 madvise_random: bool);
215
216 pub fn mtbl_metadata_index_block_offset(m: *const mtbl_metadata) -> u64;
220
221 pub fn mtbl_metadata_data_block_size(m: *const mtbl_metadata) -> u64;
223
224 pub fn mtbl_metadata_compression_algorithm(m: *const mtbl_metadata) -> CompressionType;
226
227 pub fn mtbl_metadata_count_entries(m: *const mtbl_metadata) -> u64;
229
230 pub fn mtbl_metadata_count_data_blocks(m: *const mtbl_metadata) -> u64;
232
233 pub fn mtbl_metadata_bytes_data_blocks(m: *const mtbl_metadata) -> u64;
235
236 pub fn mtbl_metadata_bytes_index_block(m: *const mtbl_metadata) -> u64;
238
239 pub fn mtbl_metadata_bytes_keys(m: *const mtbl_metadata) -> u64;
241
242 pub fn mtbl_metadata_bytes_values(m: *const mtbl_metadata) -> u64;
244
245 pub fn mtbl_merger_init(options: *const mtbl_merger_options) -> *mut mtbl_merger;
248
249 pub fn mtbl_merger_destroy(merger: *mut *mut mtbl_merger);
250
251 pub fn mtbl_merger_add_source(merger: *mut mtbl_merger, source: *const mtbl_source);
252
253 pub fn mtbl_merger_source(merger: *const mtbl_merger) -> *const mtbl_source;
254
255 pub fn mtbl_merger_options_init() -> *mut mtbl_merger_options;
258
259 pub fn mtbl_merger_options_destroy(options: *mut *mut mtbl_merger_options);
260
261 pub fn mtbl_merger_options_set_merge_func(
262 options: *mut mtbl_merger_options,
263 merge_func: extern "C" fn(clos: *mut c_void,
264 key: *const u8, len_key: size_t,
265 val0: *const u8, len_val0: size_t,
266 val1: *const u8, len_val1: size_t,
267 merged_val: *mut *mut u8, len_merged_val: *mut size_t),
268 clos: *mut c_void);
269
270 pub fn mtbl_fileset_init(fname: *const c_char,
273 options: *const mtbl_fileset_options)
274 -> *mut mtbl_fileset;
275
276 pub fn mtbl_fileset_destroy(fileset: *mut *mut mtbl_fileset);
277
278 pub fn mtbl_fileset_reload(fileset: *mut mtbl_fileset);
279
280 pub fn mtbl_fileset_reload_now(fileset: *mut mtbl_fileset);
281
282 pub fn mtbl_fileset_source(fileset: *mut mtbl_fileset) -> *const mtbl_source;
283
284 pub fn mtbl_fileset_options_init() -> *mut mtbl_fileset_options;
287
288 pub fn mtbl_fileset_options_destroy(options: *mut *mut mtbl_fileset_options);
289
290 pub fn mtbl_fileset_options_set_merge_func(
291 options: *mut mtbl_fileset_options,
292 merge_func: extern "C" fn(clos: *mut c_void,
293 key: *const u8, len_key: size_t,
294 val0: *const u8, len_val0: size_t,
295 val1: *const u8, len_val1: size_t,
296 merged_val: *mut *mut u8, len_merged_val: *mut size_t),
297 clos: *mut c_void);
298
299 pub fn mtbl_fileset_options_set_reload_interval(options: *mut mtbl_fileset_options,
300 reload_interval: u32);
301
302 pub fn mtbl_sorter_init(options: *const mtbl_sorter_options) -> *mut mtbl_sorter;
305
306 pub fn mtbl_sorter_destroy(sorter: *mut *mut mtbl_sorter);
307
308 pub fn mtbl_sorter_add(sorter: *mut mtbl_sorter,
309 key: *const u8,
310 len_key: size_t,
311 val: *const u8,
312 len_val: size_t)
313 -> MtblRes;
314
315 pub fn mtbl_sorter_write(sorter: *mut mtbl_sorter, writer: *mut mtbl_writer) -> MtblRes;
316
317 pub fn mtbl_sorter_iter(sorter: *mut mtbl_sorter) -> *mut mtbl_iter;
318
319 pub fn mtbl_sorter_options_init() -> *mut mtbl_sorter_options;
322
323 pub fn mtbl_sorter_options_destroy(options: *mut *mut mtbl_sorter_options);
324
325 pub fn mtbl_sorter_options_set_merge_func(options: *mut mtbl_sorter_options,
326 merge_fp: extern "C" fn(clos: *mut c_void,
327 key: *const u8,
328 len_key: size_t,
329 val0: *const u8,
330 len_val0: size_t,
331 val1: *const u8,
332 len_val1: size_t,
333 merged_val: *mut *mut u8,
334 len_merged_val: *mut size_t)
335 ,
336 clos: *mut c_void);
337
338 pub fn mtbl_sorter_options_set_temp_dir(options: *mut mtbl_sorter_options,
339 path: *const c_char);
340
341 pub fn mtbl_sorter_options_set_max_memory(options: *mut mtbl_sorter_options, size: size_t);
342
343 pub fn mtbl_crc32c(buffer: *const u8, length: size_t) -> u32;
346
347 pub fn mtbl_fixed_encode32(dst: *mut u8, value: u32) -> size_t;
350
351 pub fn mtbl_fixed_encode64(dst: *mut u8, value: u64) -> size_t;
352
353 pub fn mtbl_fixed_decode32(ptr: *const u8) -> u32;
354
355 pub fn mtbl_fixed_decode64(ptr: *const u8) -> u64;
356
357 pub fn mtbl_varint_length(v: u64) -> c_uint;
360
361 pub fn mtbl_varint_length_packed(buf: *const u8, len_buf: size_t) -> c_uint;
362
363 pub fn mtbl_varint_encode32(ptr: *mut u8, value: u32) -> size_t;
364
365 pub fn mtbl_varint_encode64(ptr: *mut u8, value: u64) -> size_t;
366
367 pub fn mtbl_varint_decode32(ptr: *const u8, value: *mut u32) -> size_t;
368
369 pub fn mtbl_varint_decode64(ptr: *const u8, value: *mut u64) -> size_t;
370
371}