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_