github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/capi_helper.c (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 #include "capi_helper.h" 6 7 #ifdef __cplusplus 8 extern "C" { 9 # include "_cgo_export.h" 10 } 11 #else 12 # include "_cgo_export.h" 13 #endif 14 15 // ---------------------------------------------------------------------------- 16 // WriteBatch 17 // ---------------------------------------------------------------------------- 18 19 static void _leveldb_writebatch_iterate_put( 20 void* state, 21 const leveldb_slice_t* key, 22 const leveldb_slice_t* val 23 ) { 24 go_leveldb_writebatch_iterater_put(state, 25 (leveldb_slice_t*)(key), 26 (leveldb_slice_t*)(val) 27 ); 28 } 29 30 static void _leveldb_writebatch_iterate_delete( 31 void* state, 32 const leveldb_slice_t* key 33 ) { 34 go_leveldb_writebatch_iterater_delete(state, 35 (leveldb_slice_t*)(key) 36 ); 37 } 38 39 void leveldb_writebatch_iterate_helper(leveldb_writebatch_t* batch, void* state) { 40 leveldb_writebatch_iterate(batch, state, 41 _leveldb_writebatch_iterate_put, 42 _leveldb_writebatch_iterate_delete 43 ); 44 } 45 46 // ---------------------------------------------------------------------------- 47 // Comparator 48 // ---------------------------------------------------------------------------- 49 50 static void _leveldb_comparator_destructor(void* state) { 51 // Empty 52 } 53 54 static int32_t _leveldb_comparator_compare(void* state, 55 const leveldb_slice_t* a, 56 const leveldb_slice_t* b 57 ) { 58 return go_leveldb_comparator_compare(state, 59 (leveldb_slice_t*)(a), 60 (leveldb_slice_t*)(b) 61 ); 62 } 63 64 static const char* _leveldb_comparator_name(void* state) { 65 return go_leveldb_comparator_name(state); 66 } 67 68 leveldb_comparator_t* leveldb_comparator_create_helper(void* state) { 69 return leveldb_comparator_create( 70 state, 71 _leveldb_comparator_destructor, 72 _leveldb_comparator_compare, 73 _leveldb_comparator_name 74 ); 75 } 76 77 // ---------------------------------------------------------------------------- 78 // FilterPolicy 79 // ---------------------------------------------------------------------------- 80 81 static void _leveldb_filterpolicy_destructor(void* state) { 82 // Empty 83 } 84 85 static leveldb_value_t* _leveldb_filterpolicy_create_filter(void* state, 86 const leveldb_slice_t** keys, 87 int32_t num_keys 88 ) { 89 return (leveldb_value_t*)go_leveldb_filterpolicy_create_filter(state, 90 (leveldb_slice_t**)keys, num_keys 91 ); 92 } 93 94 static leveldb_bool_t _leveldb_filterpolicy_key_may_match(void* state, 95 const leveldb_slice_t* key, 96 const leveldb_slice_t* filter 97 ) { 98 return go_leveldb_filterpolicy_key_may_match(state, 99 (leveldb_slice_t*)(key), 100 (leveldb_slice_t*)(filter) 101 ); 102 } 103 104 static const char* _leveldb_filterpolicy_name(void* state) { 105 return go_leveldb_filterpolicy_name(state); 106 } 107 108 leveldb_filterpolicy_t* leveldb_filterpolicy_create_helper(void* state) { 109 return leveldb_filterpolicy_create( 110 state, 111 _leveldb_filterpolicy_destructor, 112 _leveldb_filterpolicy_create_filter, 113 _leveldb_filterpolicy_key_may_match, 114 _leveldb_filterpolicy_name 115 ); 116 } 117 118 // ---------------------------------------------------------------------------- 119 // END 120 // ---------------------------------------------------------------------------- 121