github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/capi/leveldb_c.h (about) 1 // Copyright 2013 <chaishushan{AT}gmail.com>. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #ifndef LEVELDB_C_H_ 6 #define LEVELDB_C_H_ 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 #include <stdarg.h> 13 #include <stddef.h> 14 #include <stdint.h> 15 16 // ---------------------------------------------------------------------------- 17 // Exported types 18 // ---------------------------------------------------------------------------- 19 20 struct leveldb_slice_t { 21 const char* data; 22 int32_t size; 23 }; 24 25 enum leveldb_status_t { 26 leveldb_status_ok = 0, 27 leveldb_status_invalid_argument = 1, 28 leveldb_status_not_found = 2, 29 leveldb_status_corruption = 3, 30 leveldb_status_io_error = 4, 31 leveldb_status_unknown = 5, 32 leveldb_status_max = 6, 33 }; 34 35 enum leveldb_compression_t { 36 leveldb_compression_nil = 0, 37 leveldb_compression_snappy = 1, 38 leveldb_compression_max = 2, 39 }; 40 41 // -------------------------------------------------------- 42 43 typedef unsigned char leveldb_bool_t; 44 typedef struct leveldb_slice_t leveldb_slice_t; 45 typedef struct leveldb_value_t leveldb_value_t; 46 typedef enum leveldb_compression_t leveldb_compression_t; 47 typedef enum leveldb_status_t leveldb_status_t; 48 49 typedef struct leveldb_t leveldb_t; 50 typedef struct leveldb_options_t leveldb_options_t; 51 typedef struct leveldb_readoptions_t leveldb_readoptions_t; 52 typedef struct leveldb_writeoptions_t leveldb_writeoptions_t; 53 54 typedef struct leveldb_cache_t leveldb_cache_t; 55 typedef struct leveldb_writebatch_t leveldb_writebatch_t; 56 typedef struct leveldb_iterator_t leveldb_iterator_t; 57 typedef struct leveldb_filterpolicy_t leveldb_filterpolicy_t; 58 typedef struct leveldb_comparator_t leveldb_comparator_t; 59 typedef struct leveldb_snapshot_t leveldb_snapshot_t; 60 61 // ---------------------------------------------------------------------------- 62 // Version 63 // ---------------------------------------------------------------------------- 64 65 int32_t leveldb_major_version(); 66 int32_t leveldb_minor_version(); 67 68 // ---------------------------------------------------------------------------- 69 // Slice 70 // ---------------------------------------------------------------------------- 71 72 leveldb_slice_t leveldb_slice( 73 const char* data, int32_t size 74 ); 75 76 // ---------------------------------------------------------------------------- 77 // Value 78 // ---------------------------------------------------------------------------- 79 80 leveldb_value_t* leveldb_value_create( 81 const char* data, int32_t size 82 ); 83 leveldb_value_t* leveldb_value_create_copy( 84 leveldb_value_t* value 85 ); 86 void leveldb_value_destroy( 87 leveldb_value_t* value 88 ); 89 90 int32_t leveldb_value_size( 91 const leveldb_value_t* value 92 ); 93 const char* leveldb_value_data( 94 const leveldb_value_t* value 95 ); 96 const char* leveldb_value_cstr( 97 const leveldb_value_t* value 98 ); 99 100 // ---------------------------------------------------------------------------- 101 // Options 102 // ---------------------------------------------------------------------------- 103 104 leveldb_options_t* leveldb_options_create(); 105 void leveldb_options_destroy(leveldb_options_t* opt); 106 107 void leveldb_options_set_comparator( 108 leveldb_options_t* opt, 109 leveldb_comparator_t* cmp 110 ); 111 leveldb_comparator_t* leveldb_options_get_comparator( 112 leveldb_options_t* opt 113 ); 114 115 void leveldb_options_set_filter_policy( 116 leveldb_options_t* opt, 117 leveldb_filterpolicy_t* filter 118 ); 119 leveldb_filterpolicy_t* leveldb_options_get_filter_policy( 120 leveldb_options_t* opt 121 ); 122 123 void leveldb_options_set_create_if_missing( 124 leveldb_options_t* opt, leveldb_bool_t value 125 ); 126 leveldb_bool_t leveldb_options_get_create_if_missing( 127 leveldb_options_t* opt 128 ); 129 130 void leveldb_options_set_error_if_exists( 131 leveldb_options_t* opt, leveldb_bool_t value 132 ); 133 leveldb_bool_t leveldb_options_get_error_if_exists( 134 leveldb_options_t* opt 135 ); 136 137 void leveldb_options_set_paranoid_checks( 138 leveldb_options_t* opt, leveldb_bool_t value 139 ); 140 leveldb_bool_t leveldb_options_get_paranoid_checks( 141 leveldb_options_t* opt 142 ); 143 144 void leveldb_options_set_write_buffer_size( 145 leveldb_options_t* opt, int32_t size 146 ); 147 int32_t leveldb_options_get_write_buffer_size( 148 leveldb_options_t* opt 149 ); 150 151 void leveldb_options_set_max_open_files( 152 leveldb_options_t* opt, int32_t num 153 ); 154 int32_t leveldb_options_get_max_open_files( 155 leveldb_options_t* opt 156 ); 157 158 void leveldb_options_set_cache( 159 leveldb_options_t* opt, leveldb_cache_t* cache 160 ); 161 leveldb_cache_t* leveldb_options_get_cache( 162 leveldb_options_t* opt 163 ); 164 165 void leveldb_options_set_block_size( 166 leveldb_options_t* opt, int32_t size 167 ); 168 int32_t leveldb_options_get_block_size( 169 leveldb_options_t* opt 170 ); 171 172 void leveldb_options_set_block_restart_interval( 173 leveldb_options_t* opt, int32_t size 174 ); 175 int32_t leveldb_options_get_block_restart_interval( 176 leveldb_options_t* opt 177 ); 178 179 void leveldb_options_set_compression( 180 leveldb_options_t* opt, leveldb_compression_t type 181 ); 182 leveldb_compression_t leveldb_options_get_compression( 183 leveldb_options_t* opt 184 ); 185 186 // ---------------------------------------------------------------------------- 187 // ReadOptions 188 // ---------------------------------------------------------------------------- 189 190 leveldb_readoptions_t* leveldb_readoptions_create(); 191 void leveldb_readoptions_destroy( 192 leveldb_readoptions_t* opt 193 ); 194 195 void leveldb_readoptions_set_verify_checksums( 196 leveldb_readoptions_t* opt, 197 leveldb_bool_t value 198 ); 199 leveldb_bool_t leveldb_readoptions_get_verify_checksums( 200 leveldb_readoptions_t* opt 201 ); 202 203 void leveldb_readoptions_set_fill_cache( 204 leveldb_readoptions_t* opt, 205 leveldb_bool_t value 206 ); 207 leveldb_bool_t leveldb_readoptions_get_fill_cache( 208 leveldb_readoptions_t* opt 209 ); 210 211 void leveldb_readoptions_set_snapshot( 212 leveldb_readoptions_t* opt, 213 const leveldb_snapshot_t* snap 214 ); 215 leveldb_snapshot_t* leveldb_readoptions_get_snapshot( 216 leveldb_readoptions_t* opt 217 ); 218 219 // ---------------------------------------------------------------------------- 220 // WriteOptions 221 // ---------------------------------------------------------------------------- 222 223 leveldb_writeoptions_t* leveldb_writeoptions_create(); 224 void leveldb_writeoptions_destroy(leveldb_writeoptions_t*); 225 226 void leveldb_writeoptions_set_sync( 227 leveldb_writeoptions_t* opt, 228 leveldb_bool_t value 229 ); 230 leveldb_bool_t leveldb_writeoptions_get_sync( 231 leveldb_writeoptions_t* opt 232 ); 233 234 // ---------------------------------------------------------------------------- 235 // DB 236 // ---------------------------------------------------------------------------- 237 238 leveldb_status_t leveldb_repair_db( 239 const leveldb_options_t* options, 240 const char* name, 241 leveldb_value_t** errptr 242 ); 243 244 leveldb_status_t leveldb_destroy_db( 245 const leveldb_options_t* options, 246 const char* name, 247 leveldb_value_t** errptr 248 ); 249 250 leveldb_status_t leveldb_open( 251 const leveldb_options_t* options, 252 const char* name, 253 leveldb_t** db, 254 leveldb_value_t** errptr 255 ); 256 257 void leveldb_close(leveldb_t* db); 258 259 leveldb_status_t leveldb_get( 260 leveldb_t* db, 261 const leveldb_readoptions_t* options, 262 const leveldb_slice_t* key, 263 leveldb_value_t** val, 264 leveldb_value_t** errptr 265 ); 266 267 leveldb_status_t leveldb_put( 268 leveldb_t* db, 269 const leveldb_writeoptions_t* options, 270 const leveldb_slice_t* key, 271 const leveldb_slice_t* val, 272 leveldb_value_t** errptr 273 ); 274 275 leveldb_status_t leveldb_delete( 276 leveldb_t* db, 277 const leveldb_writeoptions_t* options, 278 const leveldb_slice_t* key, 279 leveldb_value_t** errptr 280 ); 281 282 leveldb_status_t leveldb_write( 283 leveldb_t* db, 284 const leveldb_writeoptions_t* options, 285 leveldb_writebatch_t* batch, 286 leveldb_value_t** errptr 287 ); 288 289 leveldb_bool_t leveldb_property_value( 290 leveldb_t* db, 291 const char* propname, 292 leveldb_value_t** value 293 ); 294 295 void leveldb_approximate_sizes( 296 leveldb_t* db, 297 int32_t num_ranges, 298 const leveldb_slice_t* range_start_key[], 299 const leveldb_slice_t* range_limit_key[], 300 uint64_t sizes[] 301 ); 302 303 void leveldb_compact_range( 304 leveldb_t* db, 305 const leveldb_slice_t* range_start_key, 306 const leveldb_slice_t* range_limit_key 307 ); 308 309 const leveldb_snapshot_t* leveldb_create_snapshot( 310 leveldb_t* db 311 ); 312 313 void leveldb_release_snapshot( 314 leveldb_t* db, 315 const leveldb_snapshot_t* snapshot 316 ); 317 318 // ---------------------------------------------------------------------------- 319 // Iterator 320 // ---------------------------------------------------------------------------- 321 322 leveldb_iterator_t* leveldb_create_iterator( 323 leveldb_t* db, 324 const leveldb_readoptions_t* options 325 ); 326 void leveldb_iter_destroy( 327 leveldb_iterator_t* it 328 ); 329 330 leveldb_bool_t leveldb_iter_valid( 331 const leveldb_iterator_t* it 332 ); 333 334 void leveldb_iter_seek_to_first( 335 leveldb_iterator_t* it 336 ); 337 void leveldb_iter_seek_to_last( 338 leveldb_iterator_t* it 339 ); 340 void leveldb_iter_seek( 341 leveldb_iterator_t* it, 342 const leveldb_slice_t* key 343 ); 344 345 void leveldb_iter_next(leveldb_iterator_t* it); 346 void leveldb_iter_prev(leveldb_iterator_t* it); 347 348 leveldb_slice_t leveldb_iter_key( 349 const leveldb_iterator_t* it 350 ); 351 leveldb_slice_t leveldb_iter_value( 352 const leveldb_iterator_t* it 353 ); 354 355 leveldb_status_t leveldb_iter_get_error(const leveldb_iterator_t* it, 356 leveldb_value_t** errptr 357 ); 358 359 // ---------------------------------------------------------------------------- 360 // WriteBatch 361 // ---------------------------------------------------------------------------- 362 363 leveldb_writebatch_t* leveldb_writebatch_create(); 364 void leveldb_writebatch_destroy(leveldb_writebatch_t*); 365 366 void leveldb_writebatch_put( 367 leveldb_writebatch_t* batch, 368 const leveldb_slice_t* key, 369 const leveldb_slice_t* val 370 ); 371 void leveldb_writebatch_delete( 372 leveldb_writebatch_t* batch, 373 const leveldb_slice_t* key 374 ); 375 void leveldb_writebatch_clear( 376 leveldb_writebatch_t* batch 377 ); 378 379 void leveldb_writebatch_iterate( 380 leveldb_writebatch_t* batch, 381 void* state, 382 void (*put)( 383 void* state, 384 const leveldb_slice_t* key, 385 const leveldb_slice_t* value 386 ), 387 void (*deleted)( 388 void* state, 389 const leveldb_slice_t* key 390 ) 391 ); 392 393 // ---------------------------------------------------------------------------- 394 // Comparator 395 // ---------------------------------------------------------------------------- 396 397 leveldb_comparator_t* leveldb_comparator_create( 398 void* state, 399 void (*destructor)(void*), 400 int32_t (*compare)( 401 void* state, 402 const leveldb_slice_t* a, 403 const leveldb_slice_t* b 404 ), 405 const char* (*name)(void*) 406 ); 407 void leveldb_comparator_destroy(leveldb_comparator_t* cmp); 408 409 int32_t leveldb_comparator_compare( 410 leveldb_comparator_t* cmp, 411 const leveldb_slice_t* a, 412 const leveldb_slice_t* b 413 ); 414 const char* leveldb_comparator_name( 415 leveldb_comparator_t* cmp 416 ); 417 418 // ---------------------------------------------------------------------------- 419 // FilterPolicy 420 // ---------------------------------------------------------------------------- 421 422 leveldb_filterpolicy_t* leveldb_filterpolicy_create( 423 void* state, 424 void (*destructor)(void* state), 425 leveldb_value_t* (*create_filter)( 426 void* state, 427 const leveldb_slice_t** keys, 428 int32_t num_keys 429 ), 430 leveldb_bool_t (*key_may_match)( 431 void* state, 432 const leveldb_slice_t* key, 433 const leveldb_slice_t* filter 434 ), 435 const char* (*name)(void* state) 436 ); 437 leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom( 438 int32_t bits_per_key 439 ); 440 void leveldb_filterpolicy_destroy( 441 leveldb_filterpolicy_t* filterpolicy 442 ); 443 444 leveldb_value_t* leveldb_filterpolicy_create_filter( 445 leveldb_filterpolicy_t* filterpolicy, 446 const leveldb_slice_t** keys, 447 int32_t num_keys 448 ); 449 leveldb_bool_t leveldb_filterpolicy_key_may_match( 450 leveldb_filterpolicy_t* filterpolicy, 451 const leveldb_slice_t* key, 452 const leveldb_slice_t* filter 453 ); 454 const char* leveldb_filterpolicy_name( 455 leveldb_filterpolicy_t* filterpolicy 456 ); 457 458 // ---------------------------------------------------------------------------- 459 // Cache 460 // ---------------------------------------------------------------------------- 461 462 leveldb_cache_t* leveldb_cache_create_lru(int64_t capacity); 463 void leveldb_cache_destroy(leveldb_cache_t* cache); 464 465 void leveldb_cache_insert( 466 leveldb_cache_t* cache, 467 const leveldb_slice_t* key, 468 const leveldb_slice_t* val 469 ); 470 leveldb_value_t* leveldb_cache_lookup( 471 leveldb_cache_t* cache, 472 const leveldb_slice_t* key 473 ); 474 void leveldb_cache_erase( 475 leveldb_cache_t* cache, 476 const leveldb_slice_t* key 477 ); 478 479 // ---------------------------------------------------------------------------- 480 // END 481 // ---------------------------------------------------------------------------- 482 483 #ifdef __cplusplus 484 } // extern "C" 485 #endif 486 #endif // LEVELDB_C_H_