Kouhei Sutou
null+****@clear*****
Tue Jan 12 12:47:59 JST 2016
Kouhei Sutou 2016-01-12 12:47:59 +0900 (Tue, 12 Jan 2016) New Revision: 3ce41a8a282a9d2e041d7cd1040f004a0cd69bb9 https://github.com/groonga/groonga/commit/3ce41a8a282a9d2e041d7cd1040f004a0cd69bb9 Message: Split table headers Added files: include/groonga/array.h include/groonga/dat.h include/groonga/hash.h include/groonga/pat.h Modified files: include/groonga.h include/groonga/Makefile.am include/groonga/groonga.h Modified: include/groonga.h (+4 -0) =================================================================== --- include/groonga.h 2016-01-12 12:41:38 +0900 (0013cd5) +++ include/groonga.h 2016-01-12 12:47:59 +0900 (634d647) @@ -21,13 +21,17 @@ #include "groonga/portability.h" #include "groonga/groonga.h" +#include "groonga/array.h" #include "groonga/conf.h" +#include "groonga/dat.h" #include "groonga/expr.h" #include "groonga/file_reader.h" #include "groonga/geo.h" +#include "groonga/hash.h" #include "groonga/ii.h" #include "groonga/obj.h" #include "groonga/output.h" +#include "groonga/pat.h" #include "groonga/request_canceler.h" #include "groonga/thread.h" #include "groonga/type.h" Modified: include/groonga/Makefile.am (+4 -0) =================================================================== --- include/groonga/Makefile.am 2016-01-12 12:41:38 +0900 (d466dcb) +++ include/groonga/Makefile.am 2016-01-12 12:47:59 +0900 (632cc9a) @@ -1,14 +1,18 @@ groonga_includedir = $(pkgincludedir)/groonga groonga_include_HEADERS = \ + array.h \ command.h \ conf.h \ + dat.h \ expr.h \ file_reader.h \ + hash.h \ geo.h \ groonga.h \ ii.h \ obj.h \ output.h \ + pat.h \ plugin.h \ portability.h \ request_canceler.h \ Added: include/groonga/array.h (+76 -0) 100644 =================================================================== --- /dev/null +++ include/groonga/array.h 2016-01-12 12:47:59 +0900 (cec1374) @@ -0,0 +1,76 @@ +/* + Copyright(C) 2009-2016 Brazil + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _grn_array grn_array; +typedef struct _grn_array_cursor grn_array_cursor; + +GRN_API grn_array *grn_array_create(grn_ctx *ctx, const char *path, + unsigned int value_size, unsigned int flags); +GRN_API grn_array *grn_array_open(grn_ctx *ctx, const char *path); +GRN_API grn_rc grn_array_close(grn_ctx *ctx, grn_array *array); +GRN_API grn_id grn_array_add(grn_ctx *ctx, grn_array *array, void **value); +GRN_API grn_id grn_array_push(grn_ctx *ctx, grn_array *array, + void (*func)(grn_ctx *ctx, grn_array *array, + grn_id id, void *func_arg), + void *func_arg); +GRN_API grn_id grn_array_pull(grn_ctx *ctx, grn_array *array, grn_bool blockp, + void (*func)(grn_ctx *ctx, grn_array *array, + grn_id id, void *func_arg), + void *func_arg); +GRN_API void grn_array_unblock(grn_ctx *ctx, grn_array *array); +GRN_API int grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id, void *valuebuf); +GRN_API grn_rc grn_array_set_value(grn_ctx *ctx, grn_array *array, grn_id id, + const void *value, int flags); +GRN_API grn_array_cursor *grn_array_cursor_open(grn_ctx *ctx, grn_array *array, + grn_id min, grn_id max, + int offset, int limit, int flags); +GRN_API grn_id grn_array_cursor_next(grn_ctx *ctx, grn_array_cursor *cursor); +GRN_API int grn_array_cursor_get_value(grn_ctx *ctx, grn_array_cursor *cursor, void **value); +GRN_API grn_rc grn_array_cursor_set_value(grn_ctx *ctx, grn_array_cursor *cursor, + const void *value, int flags); +GRN_API grn_rc grn_array_cursor_delete(grn_ctx *ctx, grn_array_cursor *cursor, + grn_table_delete_optarg *optarg); +GRN_API void grn_array_cursor_close(grn_ctx *ctx, grn_array_cursor *cursor); +GRN_API grn_rc grn_array_delete_by_id(grn_ctx *ctx, grn_array *array, grn_id id, + grn_table_delete_optarg *optarg); + +GRN_API grn_id grn_array_next(grn_ctx *ctx, grn_array *array, grn_id id); + +GRN_API void *_grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id); + +#define GRN_ARRAY_EACH(ctx,array,head,tail,id,value,block) do {\ + grn_array_cursor *_sc = grn_array_cursor_open(ctx, array, head, tail, 0, -1, 0); \ + if (_sc) {\ + grn_id id;\ + while ((id = grn_array_cursor_next(ctx, _sc))) {\ + grn_array_cursor_get_value(ctx, _sc, (void **)(value));\ + block\ + }\ + grn_array_cursor_close(ctx, _sc); \ + }\ +} while (0) + +#ifdef __cplusplus +} +#endif Added: include/groonga/dat.h (+100 -0) 100644 =================================================================== --- /dev/null +++ include/groonga/dat.h 2016-01-12 12:47:59 +0900 (164c7e7) @@ -0,0 +1,100 @@ +/* + Copyright(C) 2009-2016 Brazil + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _grn_dat grn_dat; +typedef struct _grn_dat_cursor grn_dat_cursor; +typedef struct _grn_table_scan_hit grn_dat_scan_hit; + +GRN_API int grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str, + unsigned int str_size, grn_dat_scan_hit *scan_hits, + unsigned int max_num_scan_hits, const char **str_rest); + +GRN_API grn_id grn_dat_lcp_search(grn_ctx *ctx, grn_dat *dat, + const void *key, unsigned int key_size); + +GRN_API grn_dat *grn_dat_create(grn_ctx *ctx, const char *path, unsigned int key_size, + unsigned int value_size, unsigned int flags); + +GRN_API grn_dat *grn_dat_open(grn_ctx *ctx, const char *path); + +GRN_API grn_rc grn_dat_close(grn_ctx *ctx, grn_dat *dat); + +GRN_API grn_rc grn_dat_remove(grn_ctx *ctx, const char *path); + +GRN_API grn_id grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key, + unsigned int key_size, void **value); +GRN_API grn_id grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key, + unsigned int key_size, void **value, int *added); + +GRN_API int grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize); +GRN_API int grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk); + +GRN_API grn_rc grn_dat_delete_by_id(grn_ctx *ctx, grn_dat *dat, grn_id id, + grn_table_delete_optarg *optarg); +GRN_API grn_rc grn_dat_delete(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_size, + grn_table_delete_optarg *optarg); + +GRN_API grn_rc grn_dat_update_by_id(grn_ctx *ctx, grn_dat *dat, grn_id src_key_id, + const void *dest_key, unsigned int dest_key_size); +GRN_API grn_rc grn_dat_update(grn_ctx *ctx, grn_dat *dat, + const void *src_key, unsigned int src_key_size, + const void *dest_key, unsigned int dest_key_size); + +GRN_API unsigned int grn_dat_size(grn_ctx *ctx, grn_dat *dat); + +GRN_API grn_dat_cursor *grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat, + const void *min, unsigned int min_size, + const void *max, unsigned int max_size, + int offset, int limit, int flags); +GRN_API grn_id grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c); +GRN_API void grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c); + +GRN_API int grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key); +GRN_API grn_rc grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c, + grn_table_delete_optarg *optarg); + +#define GRN_DAT_EACH(ctx,dat,id,key,key_size,block) do {\ + grn_dat_cursor *_sc = grn_dat_cursor_open(ctx, dat, NULL, 0, NULL, 0, 0, -1, 0);\ + if (_sc) {\ + grn_id id;\ + unsigned int *_ks = (key_size);\ + if (_ks) {\ + while ((id = grn_dat_cursor_next(ctx, _sc))) {\ + int _ks_raw = grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\ + *(_ks) = (unsigned int)_ks_raw;\ + block\ + }\ + } else {\ + while ((id = grn_dat_cursor_next(ctx, _sc))) {\ + grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\ + block\ + }\ + }\ + grn_dat_cursor_close(ctx, _sc);\ + }\ +} while (0) + +#ifdef __cplusplus +} +#endif Modified: include/groonga/groonga.h (+0 -261) =================================================================== --- include/groonga/groonga.h 2016-01-12 12:41:38 +0900 (aa15684) +++ include/groonga/groonga.h 2016-01-12 12:47:59 +0900 (0c56ac2) @@ -1762,28 +1762,6 @@ GRN_API grn_rc grn_set_segv_handler(void); GRN_API grn_rc grn_set_int_handler(void); GRN_API grn_rc grn_set_term_handler(void); -/* hash */ - -typedef struct _grn_hash grn_hash; -typedef struct _grn_hash_cursor grn_hash_cursor; - -GRN_API grn_hash *grn_hash_create(grn_ctx *ctx, const char *path, unsigned int key_size, - unsigned int value_size, unsigned int flags); - -GRN_API grn_hash *grn_hash_open(grn_ctx *ctx, const char *path); - -GRN_API grn_rc grn_hash_close(grn_ctx *ctx, grn_hash *hash); - -GRN_API grn_id grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key, - unsigned int key_size, void **value, int *added); -GRN_API grn_id grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key, - unsigned int key_size, void **value); - -GRN_API int grn_hash_get_key(grn_ctx *ctx, grn_hash *hash, grn_id id, void *keybuf, int bufsize); -GRN_API int grn_hash_get_key2(grn_ctx *ctx, grn_hash *hash, grn_id id, grn_obj *bulk); -GRN_API int grn_hash_get_value(grn_ctx *ctx, grn_hash *hash, grn_id id, void *valuebuf); -GRN_API grn_rc grn_hash_set_value(grn_ctx *ctx, grn_hash *hash, grn_id id, - const void *value, int flags); typedef struct _grn_table_delete_optarg grn_table_delete_optarg; @@ -1793,251 +1771,12 @@ struct _grn_table_delete_optarg { void *func_arg; }; -GRN_API grn_rc grn_hash_delete_by_id(grn_ctx *ctx, grn_hash *hash, grn_id id, - grn_table_delete_optarg *optarg); -GRN_API grn_rc grn_hash_delete(grn_ctx *ctx, grn_hash *hash, - const void *key, unsigned int key_size, - grn_table_delete_optarg *optarg); - -GRN_API grn_hash_cursor *grn_hash_cursor_open(grn_ctx *ctx, grn_hash *hash, - const void *min, unsigned int min_size, - const void *max, unsigned int max_size, - int offset, int limit, int flags); -GRN_API grn_id grn_hash_cursor_next(grn_ctx *ctx, grn_hash_cursor *c); -GRN_API void grn_hash_cursor_close(grn_ctx *ctx, grn_hash_cursor *c); - -GRN_API int grn_hash_cursor_get_key(grn_ctx *ctx, grn_hash_cursor *c, void **key); -GRN_API int grn_hash_cursor_get_value(grn_ctx *ctx, grn_hash_cursor *c, void **value); -GRN_API grn_rc grn_hash_cursor_set_value(grn_ctx *ctx, grn_hash_cursor *c, - const void *value, int flags); - -GRN_API int grn_hash_cursor_get_key_value(grn_ctx *ctx, grn_hash_cursor *c, - void **key, unsigned int *key_size, void **value); - -GRN_API grn_rc grn_hash_cursor_delete(grn_ctx *ctx, grn_hash_cursor *c, - grn_table_delete_optarg *optarg); - -#define GRN_HASH_EACH(ctx,hash,id,key,key_size,value,block) do {\ - grn_hash_cursor *_sc = grn_hash_cursor_open(ctx, hash, NULL, 0, NULL, 0, 0, -1, 0); \ - if (_sc) {\ - grn_id id;\ - while ((id = grn_hash_cursor_next(ctx, _sc))) {\ - grn_hash_cursor_get_key_value(ctx, _sc, (void **)(key),\ - (key_size), (void **)(value));\ - block\ - }\ - grn_hash_cursor_close(ctx, _sc);\ - }\ -} while (0) - -/* array */ - -typedef struct _grn_array grn_array; -typedef struct _grn_array_cursor grn_array_cursor; - -GRN_API grn_array *grn_array_create(grn_ctx *ctx, const char *path, - unsigned int value_size, unsigned int flags); -GRN_API grn_array *grn_array_open(grn_ctx *ctx, const char *path); -GRN_API grn_rc grn_array_close(grn_ctx *ctx, grn_array *array); -GRN_API grn_id grn_array_add(grn_ctx *ctx, grn_array *array, void **value); -GRN_API grn_id grn_array_push(grn_ctx *ctx, grn_array *array, - void (*func)(grn_ctx *ctx, grn_array *array, - grn_id id, void *func_arg), - void *func_arg); -GRN_API grn_id grn_array_pull(grn_ctx *ctx, grn_array *array, grn_bool blockp, - void (*func)(grn_ctx *ctx, grn_array *array, - grn_id id, void *func_arg), - void *func_arg); -GRN_API void grn_array_unblock(grn_ctx *ctx, grn_array *array); -GRN_API int grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id, void *valuebuf); -GRN_API grn_rc grn_array_set_value(grn_ctx *ctx, grn_array *array, grn_id id, - const void *value, int flags); -GRN_API grn_array_cursor *grn_array_cursor_open(grn_ctx *ctx, grn_array *array, - grn_id min, grn_id max, - int offset, int limit, int flags); -GRN_API grn_id grn_array_cursor_next(grn_ctx *ctx, grn_array_cursor *cursor); -GRN_API int grn_array_cursor_get_value(grn_ctx *ctx, grn_array_cursor *cursor, void **value); -GRN_API grn_rc grn_array_cursor_set_value(grn_ctx *ctx, grn_array_cursor *cursor, - const void *value, int flags); -GRN_API grn_rc grn_array_cursor_delete(grn_ctx *ctx, grn_array_cursor *cursor, - grn_table_delete_optarg *optarg); -GRN_API void grn_array_cursor_close(grn_ctx *ctx, grn_array_cursor *cursor); -GRN_API grn_rc grn_array_delete_by_id(grn_ctx *ctx, grn_array *array, grn_id id, - grn_table_delete_optarg *optarg); - -GRN_API grn_id grn_array_next(grn_ctx *ctx, grn_array *array, grn_id id); - -GRN_API void *_grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id); - -#define GRN_ARRAY_EACH(ctx,array,head,tail,id,value,block) do {\ - grn_array_cursor *_sc = grn_array_cursor_open(ctx, array, head, tail, 0, -1, 0); \ - if (_sc) {\ - grn_id id;\ - while ((id = grn_array_cursor_next(ctx, _sc))) {\ - grn_array_cursor_get_value(ctx, _sc, (void **)(value));\ - block\ - }\ - grn_array_cursor_close(ctx, _sc); \ - }\ -} while (0) - -/* pat */ - -typedef struct _grn_pat grn_pat; -typedef struct _grn_pat_cursor grn_pat_cursor; - -GRN_API grn_pat *grn_pat_create(grn_ctx *ctx, const char *path, unsigned int key_size, - unsigned int value_size, unsigned int flags); - -GRN_API grn_pat *grn_pat_open(grn_ctx *ctx, const char *path); - -GRN_API grn_rc grn_pat_close(grn_ctx *ctx, grn_pat *pat); - -GRN_API grn_rc grn_pat_remove(grn_ctx *ctx, const char *path); - -GRN_API grn_id grn_pat_get(grn_ctx *ctx, grn_pat *pat, const void *key, - unsigned int key_size, void **value); -GRN_API grn_id grn_pat_add(grn_ctx *ctx, grn_pat *pat, const void *key, - unsigned int key_size, void **value, int *added); - -GRN_API int grn_pat_get_key(grn_ctx *ctx, grn_pat *pat, grn_id id, void *keybuf, int bufsize); -GRN_API int grn_pat_get_key2(grn_ctx *ctx, grn_pat *pat, grn_id id, grn_obj *bulk); -GRN_API int grn_pat_get_value(grn_ctx *ctx, grn_pat *pat, grn_id id, void *valuebuf); -GRN_API grn_rc grn_pat_set_value(grn_ctx *ctx, grn_pat *pat, grn_id id, - const void *value, int flags); - -GRN_API grn_rc grn_pat_delete_by_id(grn_ctx *ctx, grn_pat *pat, grn_id id, - grn_table_delete_optarg *optarg); -GRN_API grn_rc grn_pat_delete(grn_ctx *ctx, grn_pat *pat, const void *key, unsigned int key_size, - grn_table_delete_optarg *optarg); -GRN_API int grn_pat_delete_with_sis(grn_ctx *ctx, grn_pat *pat, grn_id id, - grn_table_delete_optarg *optarg); - -typedef struct _grn_table_scan_hit grn_pat_scan_hit; -typedef struct _grn_table_scan_hit grn_dat_scan_hit; - struct _grn_table_scan_hit { grn_id id; unsigned int offset; unsigned int length; }; -GRN_API int grn_pat_scan(grn_ctx *ctx, grn_pat *pat, const char *str, unsigned int str_len, - grn_pat_scan_hit *sh, unsigned int sh_size, const char **rest); - -GRN_API grn_rc grn_pat_prefix_search(grn_ctx *ctx, grn_pat *pat, - const void *key, unsigned int key_size, grn_hash *h); -GRN_API grn_rc grn_pat_suffix_search(grn_ctx *ctx, grn_pat *pat, - const void *key, unsigned int key_size, grn_hash *h); -GRN_API grn_id grn_pat_lcp_search(grn_ctx *ctx, grn_pat *pat, - const void *key, unsigned int key_size); - -GRN_API unsigned int grn_pat_size(grn_ctx *ctx, grn_pat *pat); - -GRN_API grn_pat_cursor *grn_pat_cursor_open(grn_ctx *ctx, grn_pat *pat, - const void *min, unsigned int min_size, - const void *max, unsigned int max_size, - int offset, int limit, int flags); -GRN_API grn_id grn_pat_cursor_next(grn_ctx *ctx, grn_pat_cursor *c); -GRN_API void grn_pat_cursor_close(grn_ctx *ctx, grn_pat_cursor *c); - -GRN_API int grn_pat_cursor_get_key(grn_ctx *ctx, grn_pat_cursor *c, void **key); -GRN_API int grn_pat_cursor_get_value(grn_ctx *ctx, grn_pat_cursor *c, void **value); - -GRN_API int grn_pat_cursor_get_key_value(grn_ctx *ctx, grn_pat_cursor *c, - void **key, unsigned int *key_size, void **value); -GRN_API grn_rc grn_pat_cursor_set_value(grn_ctx *ctx, grn_pat_cursor *c, - const void *value, int flags); -GRN_API grn_rc grn_pat_cursor_delete(grn_ctx *ctx, grn_pat_cursor *c, - grn_table_delete_optarg *optarg); - -#define GRN_PAT_EACH(ctx,pat,id,key,key_size,value,block) do { \ - grn_pat_cursor *_sc = grn_pat_cursor_open(ctx, pat, NULL, 0, NULL, 0, 0, -1, 0); \ - if (_sc) {\ - grn_id id;\ - while ((id = grn_pat_cursor_next(ctx, _sc))) {\ - grn_pat_cursor_get_key_value(ctx, _sc, (void **)(key),\ - (key_size), (void **)(value));\ - block\ - }\ - grn_pat_cursor_close(ctx, _sc);\ - }\ -} while (0) - -/* dat */ - -typedef struct _grn_dat grn_dat; -typedef struct _grn_dat_cursor grn_dat_cursor; - -GRN_API int grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str, - unsigned int str_size, grn_dat_scan_hit *scan_hits, - unsigned int max_num_scan_hits, const char **str_rest); - -GRN_API grn_id grn_dat_lcp_search(grn_ctx *ctx, grn_dat *dat, - const void *key, unsigned int key_size); - -GRN_API grn_dat *grn_dat_create(grn_ctx *ctx, const char *path, unsigned int key_size, - unsigned int value_size, unsigned int flags); - -GRN_API grn_dat *grn_dat_open(grn_ctx *ctx, const char *path); - -GRN_API grn_rc grn_dat_close(grn_ctx *ctx, grn_dat *dat); - -GRN_API grn_rc grn_dat_remove(grn_ctx *ctx, const char *path); - -GRN_API grn_id grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key, - unsigned int key_size, void **value); -GRN_API grn_id grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key, - unsigned int key_size, void **value, int *added); - -GRN_API int grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize); -GRN_API int grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk); - -GRN_API grn_rc grn_dat_delete_by_id(grn_ctx *ctx, grn_dat *dat, grn_id id, - grn_table_delete_optarg *optarg); -GRN_API grn_rc grn_dat_delete(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_size, - grn_table_delete_optarg *optarg); - -GRN_API grn_rc grn_dat_update_by_id(grn_ctx *ctx, grn_dat *dat, grn_id src_key_id, - const void *dest_key, unsigned int dest_key_size); -GRN_API grn_rc grn_dat_update(grn_ctx *ctx, grn_dat *dat, - const void *src_key, unsigned int src_key_size, - const void *dest_key, unsigned int dest_key_size); - -GRN_API unsigned int grn_dat_size(grn_ctx *ctx, grn_dat *dat); - -GRN_API grn_dat_cursor *grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat, - const void *min, unsigned int min_size, - const void *max, unsigned int max_size, - int offset, int limit, int flags); -GRN_API grn_id grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c); -GRN_API void grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c); - -GRN_API int grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key); -GRN_API grn_rc grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c, - grn_table_delete_optarg *optarg); - -#define GRN_DAT_EACH(ctx,dat,id,key,key_size,block) do {\ - grn_dat_cursor *_sc = grn_dat_cursor_open(ctx, dat, NULL, 0, NULL, 0, 0, -1, 0);\ - if (_sc) {\ - grn_id id;\ - unsigned int *_ks = (key_size);\ - if (_ks) {\ - while ((id = grn_dat_cursor_next(ctx, _sc))) {\ - int _ks_raw = grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\ - *(_ks) = (unsigned int)_ks_raw;\ - block\ - }\ - } else {\ - while ((id = grn_dat_cursor_next(ctx, _sc))) {\ - grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\ - block\ - }\ - }\ - grn_dat_cursor_close(ctx, _sc);\ - }\ -} while (0) - #ifdef __cplusplus } #endif Added: include/groonga/hash.h (+85 -0) 100644 =================================================================== --- /dev/null +++ include/groonga/hash.h 2016-01-12 12:47:59 +0900 (aa9cb92) @@ -0,0 +1,85 @@ +/* + Copyright(C) 2009-2016 Brazil + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _grn_hash grn_hash; +typedef struct _grn_hash_cursor grn_hash_cursor; + +GRN_API grn_hash *grn_hash_create(grn_ctx *ctx, const char *path, unsigned int key_size, + unsigned int value_size, unsigned int flags); + +GRN_API grn_hash *grn_hash_open(grn_ctx *ctx, const char *path); + +GRN_API grn_rc grn_hash_close(grn_ctx *ctx, grn_hash *hash); + +GRN_API grn_id grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key, + unsigned int key_size, void **value, int *added); +GRN_API grn_id grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key, + unsigned int key_size, void **value); + +GRN_API int grn_hash_get_key(grn_ctx *ctx, grn_hash *hash, grn_id id, void *keybuf, int bufsize); +GRN_API int grn_hash_get_key2(grn_ctx *ctx, grn_hash *hash, grn_id id, grn_obj *bulk); +GRN_API int grn_hash_get_value(grn_ctx *ctx, grn_hash *hash, grn_id id, void *valuebuf); +GRN_API grn_rc grn_hash_set_value(grn_ctx *ctx, grn_hash *hash, grn_id id, + const void *value, int flags); + +GRN_API grn_rc grn_hash_delete_by_id(grn_ctx *ctx, grn_hash *hash, grn_id id, + grn_table_delete_optarg *optarg); +GRN_API grn_rc grn_hash_delete(grn_ctx *ctx, grn_hash *hash, + const void *key, unsigned int key_size, + grn_table_delete_optarg *optarg); + +GRN_API grn_hash_cursor *grn_hash_cursor_open(grn_ctx *ctx, grn_hash *hash, + const void *min, unsigned int min_size, + const void *max, unsigned int max_size, + int offset, int limit, int flags); +GRN_API grn_id grn_hash_cursor_next(grn_ctx *ctx, grn_hash_cursor *c); +GRN_API void grn_hash_cursor_close(grn_ctx *ctx, grn_hash_cursor *c); + +GRN_API int grn_hash_cursor_get_key(grn_ctx *ctx, grn_hash_cursor *c, void **key); +GRN_API int grn_hash_cursor_get_value(grn_ctx *ctx, grn_hash_cursor *c, void **value); +GRN_API grn_rc grn_hash_cursor_set_value(grn_ctx *ctx, grn_hash_cursor *c, + const void *value, int flags); + +GRN_API int grn_hash_cursor_get_key_value(grn_ctx *ctx, grn_hash_cursor *c, + void **key, unsigned int *key_size, void **value); + +GRN_API grn_rc grn_hash_cursor_delete(grn_ctx *ctx, grn_hash_cursor *c, + grn_table_delete_optarg *optarg); + +#define GRN_HASH_EACH(ctx,hash,id,key,key_size,value,block) do {\ + grn_hash_cursor *_sc = grn_hash_cursor_open(ctx, hash, NULL, 0, NULL, 0, 0, -1, 0); \ + if (_sc) {\ + grn_id id;\ + while ((id = grn_hash_cursor_next(ctx, _sc))) {\ + grn_hash_cursor_get_key_value(ctx, _sc, (void **)(key),\ + (key_size), (void **)(value));\ + block\ + }\ + grn_hash_cursor_close(ctx, _sc);\ + }\ +} while (0) + +#ifdef __cplusplus +} +#endif Added: include/groonga/pat.h (+102 -0) 100644 =================================================================== --- /dev/null +++ include/groonga/pat.h 2016-01-12 12:47:59 +0900 (27f45c0) @@ -0,0 +1,102 @@ +/* + Copyright(C) 2009-2016 Brazil + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#include "hash.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _grn_pat grn_pat; +typedef struct _grn_pat_cursor grn_pat_cursor; +typedef struct _grn_table_scan_hit grn_pat_scan_hit; + +GRN_API grn_pat *grn_pat_create(grn_ctx *ctx, const char *path, unsigned int key_size, + unsigned int value_size, unsigned int flags); + +GRN_API grn_pat *grn_pat_open(grn_ctx *ctx, const char *path); + +GRN_API grn_rc grn_pat_close(grn_ctx *ctx, grn_pat *pat); + +GRN_API grn_rc grn_pat_remove(grn_ctx *ctx, const char *path); + +GRN_API grn_id grn_pat_get(grn_ctx *ctx, grn_pat *pat, const void *key, + unsigned int key_size, void **value); +GRN_API grn_id grn_pat_add(grn_ctx *ctx, grn_pat *pat, const void *key, + unsigned int key_size, void **value, int *added); + +GRN_API int grn_pat_get_key(grn_ctx *ctx, grn_pat *pat, grn_id id, void *keybuf, int bufsize); +GRN_API int grn_pat_get_key2(grn_ctx *ctx, grn_pat *pat, grn_id id, grn_obj *bulk); +GRN_API int grn_pat_get_value(grn_ctx *ctx, grn_pat *pat, grn_id id, void *valuebuf); +GRN_API grn_rc grn_pat_set_value(grn_ctx *ctx, grn_pat *pat, grn_id id, + const void *value, int flags); + +GRN_API grn_rc grn_pat_delete_by_id(grn_ctx *ctx, grn_pat *pat, grn_id id, + grn_table_delete_optarg *optarg); +GRN_API grn_rc grn_pat_delete(grn_ctx *ctx, grn_pat *pat, const void *key, unsigned int key_size, + grn_table_delete_optarg *optarg); +GRN_API int grn_pat_delete_with_sis(grn_ctx *ctx, grn_pat *pat, grn_id id, + grn_table_delete_optarg *optarg); + +GRN_API int grn_pat_scan(grn_ctx *ctx, grn_pat *pat, const char *str, unsigned int str_len, + grn_pat_scan_hit *sh, unsigned int sh_size, const char **rest); + +GRN_API grn_rc grn_pat_prefix_search(grn_ctx *ctx, grn_pat *pat, + const void *key, unsigned int key_size, grn_hash *h); +GRN_API grn_rc grn_pat_suffix_search(grn_ctx *ctx, grn_pat *pat, + const void *key, unsigned int key_size, grn_hash *h); +GRN_API grn_id grn_pat_lcp_search(grn_ctx *ctx, grn_pat *pat, + const void *key, unsigned int key_size); + +GRN_API unsigned int grn_pat_size(grn_ctx *ctx, grn_pat *pat); + +GRN_API grn_pat_cursor *grn_pat_cursor_open(grn_ctx *ctx, grn_pat *pat, + const void *min, unsigned int min_size, + const void *max, unsigned int max_size, + int offset, int limit, int flags); +GRN_API grn_id grn_pat_cursor_next(grn_ctx *ctx, grn_pat_cursor *c); +GRN_API void grn_pat_cursor_close(grn_ctx *ctx, grn_pat_cursor *c); + +GRN_API int grn_pat_cursor_get_key(grn_ctx *ctx, grn_pat_cursor *c, void **key); +GRN_API int grn_pat_cursor_get_value(grn_ctx *ctx, grn_pat_cursor *c, void **value); + +GRN_API int grn_pat_cursor_get_key_value(grn_ctx *ctx, grn_pat_cursor *c, + void **key, unsigned int *key_size, void **value); +GRN_API grn_rc grn_pat_cursor_set_value(grn_ctx *ctx, grn_pat_cursor *c, + const void *value, int flags); +GRN_API grn_rc grn_pat_cursor_delete(grn_ctx *ctx, grn_pat_cursor *c, + grn_table_delete_optarg *optarg); + +#define GRN_PAT_EACH(ctx,pat,id,key,key_size,value,block) do { \ + grn_pat_cursor *_sc = grn_pat_cursor_open(ctx, pat, NULL, 0, NULL, 0, 0, -1, 0); \ + if (_sc) {\ + grn_id id;\ + while ((id = grn_pat_cursor_next(ctx, _sc))) {\ + grn_pat_cursor_get_key_value(ctx, _sc, (void **)(key),\ + (key_size), (void **)(value));\ + block\ + }\ + grn_pat_cursor_close(ctx, _sc);\ + }\ +} while (0) + +#ifdef __cplusplus +} +#endif -------------- next part -------------- HTML����������������������������...Download