* Senna API

SennaƤεǽAPIؿ̤󶡤ޤ

APIϡbasic API, advanced API, low-level API3फ鹽ޤ
basic APIȤäƥǥåκΰ̤εǽѤǤޤ
advanced APIѤ뤳Ȥˤäơ٤κ٤ʥ塼˥󥰤椹뤳Ȥǽˤʤޤ
low-level APIѤ뤳ȤˤäSennaΥǡ¤˥ʣʥǡ両Ԥޤ

* basic API

basic APIϡ2ĤΥǡȤؿsenna饤֥ؿȤǹޤ2ĤΥǡȤϡǥåեбsen_indexȡ
̤бsen_recordsǤ

** Sennaؿ

 sen_rc sen_init(void);

SennaεǽѤ˽ؿsen_init()ץ˰٤ƤӽФɬפޤ
(ޥåɥץꥱξ硢줫Υåɤǰ٤¹ԤнʬǤ)

** sen_index 

ʸ󤫤ʸ®˸뤿ž֥ǥå()եбǡǤ
ʸIDʸ(ʸ)ΥڥʤʸϿȡ
ʸ򥭡ȤơޤʸIDν®˼ФȤǤޤ
sen_indexΥ󥹥󥹤ϥե륷ƥΥեбƤꡢǼ줿ʸϱ³Ū¸ޤ
sen_indexѤơʸIDбʸƤФȤϤǤޤ

ʸIDˤϸĹΥХʥǡnulǽüĹʸ󤬻ѤǤޤ

ʣʸʸIDʣƤϤޤ

ʸIDĹ8191ХȤǤ

ͤˤnulǽüĹʸꤷޤ

ͤˤϺĹ¤Ϥޤ

ͤ˻ꤹʸΥ󥳡ǥ󥰤ϡSHIFT-JIS, EUC-japan, utf-8Τ
줫Ǥޤ

ͤ˻ꤹʸʬϡǲ, N-gramΤɤ餫Ǥޤ

N-gram򤷤硢ѿʸ󤪤ӵʸʸǤʬ䤹뤫/ʤ
Ǥޤ

ͤ˻ꤹʸФơʸʸ/ʸʸ/Ⱦʸ
Ԥ/ԤʤǤޤ

Ĥsen_index󥹥󥹤ʣΥåɤǶͭ뤳ȤǤޤ

Ĥž֥ǥåեʣΥץƱopen뤳ȤǤޤ

¾ʤ˹μ¹ԤƱ˻˼¹Ԥ뤳ȤǤޤ
(ȥ󥶥Υ¸Ƥ櫓ǤϤʤ̤ߥåȤΥǡ
Ȥ礬ޤ)

ʣΥץʤåɤĤΥǥåФƱ˹
Ԥ뤳ȤϤǤޤ(¾椬ɬפˤʤޤ)

 sen_index *sen_index_create(const char *path, int key_size, int flags, int initial_n_segments, sen_encoding encoding);

pathͿ줿ž֥ǥåե
бsen_index󥹥󥹤֤ޤ
ԤNULL֤ޤ

key_sizeʸIDĹ(ХĹ)Ϳޤ
key_size0ꤵ줿ϲĹ(nulüʸ)ꤵ줿Ȥߤʤޤ

flagsˤϡʲflagȤ߹碌ƻꤷޤ

: SEN_INDEX_NORMALIZE : ʸʸ/ʸʸ/ȾʸƥǥåϿ
: SEN_INDEX_SPLIT_ALPHA : ʸʸǤʬ䤹
: SEN_INDEX_SPLIT_DIGIT : ʸʸǤʬ䤹
: SEN_INDEX_SPLIT_SYMBOL : ʸʸǤʬ䤹
: SEN_INDEX_NGRAM : (ǲϤǤϤʤ)n-gramѤ

initial_n_segmentsϡХåեͿޤ
initial_n_segments * 256Kbytesʬ̤ǥåȤƳݤޤ
οͤ(¥ꥵۤʤϰϤ)礭ۤɹ®ˤʤޤ

encodingˤϡsen_enc_default, sen_enc_none, sen_enc_euc_jp,
sen_enc_utf8, sen_enc_sjis Τ줫ꤷޤ

 sen_index *sen_index_open(const char *path);

pathͿ줿˺Ѥž֥ǥåե򳫤
бsen_index󥹥󥹤֤ޤ
ԤNULL֤ޤ

 sen_rc sen_index_close(sen_index *index);

indexбž֥ǥåեĤ
sen_index󥹥󥹤ޤ
 sen_success ԤХ顼ɤ֤ޤ

 sen_rc sen_index_remove(const char *path);

pathͿ줿ž֥ǥåեޤ
 sen_success ԤХ顼ɤ֤ޤ

 sen_rc sen_index_upd(sen_index *index, const void *key, const char *oldvalue, const char *newvalue);

indexkeyбʸͤoldvaluenewvalue˹ޤ

ʸǤoldvalueNULLꤷޤ

ʸnewvalueNULLꤷޤ

oldvalueˤindexϿͤꤹɬפޤ

 sen_records *sen_index_sel(sen_index *index, const char *string);

indexͤstringޤʸФsen_records󥹥󥹤Ȥ
֤ޤ

** sen_records 

̤Ȥ֤쥳ɤν˰Ū˳Ǽ뤿ΥǡǤ

쥳ɽΰĤΥ쥳ɤ򥫥ȥ쥳ɤȤƻȤƤޤ

 int sen_records_curr_key(sen_records *records, void *keybuf, int bufsize);

ȥ쥳ɤkeyĹ֤ޤ
ȥ쥳ɤ¸ߤʤ0֤ޤ

sen_index_sel(), sen_index_select(), sen_records_rewind()¹ľ
ȥ쥳ɤ¸ߤޤsen_records_next¹Ԥɬפޤ

records֥Ȥ˳indexkey_size0ʳǤС
ȥ쥳ɤ¸ߤͤϾkey_sizeȰפޤ

keybufNULLʳͤϤ졢bufsizeȥ쥳ɤkeyĹʾǤС
keybuf˥ȥ쥳ɤkeyԡޤ

 int sen_records_curr_score(sen_records *records);

ȥ쥳ɤΥ(꡼ФŬ)֤ޤ

 int sen_records_next(sen_records *r, void *keybuf, int bufsize, int *score);

ǽǤХȥ쥳ɤĿʤޤ
ϥȥ쥳ɤkeyĹ򡢼Ԥ0֤ޤ
ϡ
keybufꤵ졢bufsizekeyĹʾǤС
ȥ쥳ɤkeykeybuf˥ԡ
scoreNULLʳͤꤵ줿ϥȥ쥳ɤΥ*score˥åȤޤ

 sen_rc sen_records_rewind(sen_records *records);

ȥ쥳ɤ򥯥ꥢޤsen_records_rewind()¹Ը
sen_records_next()¹ԤС
ǽΥ쥳ɤ֤˥쥳ɤɤ߽ФȤǤޤ

 int sen_records_nhits(sen_records *records);

records˴ޤޤ쥳ɤο֤ޤ

 int sen_records_find(sen_records *records, const void *key);

recordskeyб쥳ɤޤޤƤ뤫ɤĴ٤ޤ
쥳ɤ¸ߤСΥ쥳ɤΥ֤ޤ

 sen_rc sen_records_close(sen_records *records);

records󥹥󥹤ޤ

* advanced API

٤٤κ٤Ԥ advanced API Ѥޤ
advanced APIǤsen_indexsen_records˲äơǥå
ϿʸǼsen_valuesѤޤ

** sen_values 

sen_valuesϡǥåϿʸƤ˰Ū˳Ǽ뤿ΥǡǤ
basic APIǤϡʸͤϥեåȤñʸȤưޤadvanced APIǤϡĤʸʣνȤưȤǤޤޤ줾ϡۤʤŤߤʸΥꥹȤȤƴǤޤŤߤȤϡʸǤʸ󤬶ĴƤٹ򼨤ͤǡ븡ɤФơŤߤ礭ꤵ줿ʬʸ˥ޥåʸŬ٤⤤ΤȤߤʤƽդԤȤǤޤ

 sen_values *sen_values_open(void);

sen_values󥹥󥹤ޤ

 sen_rc sen_values_close(sen_values *values);

sen_values󥹥󥹤ޤ

 sen_rc sen_values_add(sen_values *values, const char *str, unsigned int weight);

values˽Ťweightʸstrɲäޤ

** sen_index 

advance APIǤϡsen_index Фʣؿ󶡤ޤ

 sen_rc sen_index_update(sen_index *index, const void *key, unsigned int section, sen_values *oldvalue, sen_values *newvalue);

key˳ʸsectionܤƤoldvaluenewvalue˹ޤ

 sen_index *sen_index_create_with_keys(const char *path, sen_sym *keys,
			     int flags, int initial_n_segments, sen_encoding encoding);

sen_index_createƱͤpathͿ줿ž֥ǥåեбsen_index󥹥󥹤֤ޤʸID륷ܥɽkeys˴¸sen_sym󥹥󥹤ꤹ뤳ȤǤޤ

 sen_index *sen_index_open_with_keys(const char *path, sen_sym *keys);

sen_index_openƱͤpathͿ줿˺Ѥž֥ǥåե򳫤бsen_index󥹥󥹤֤ޤʸID륷ܥɽkeys˴¸sen_sym󥹥󥹤ꤹ뤳ȤǤޤ

 sen_rc sen_index_select(sen_index *index, const char *string, sen_records *records, sen_sel_operator op, sen_select_optarg *optarg);

indexstring˥ޥåʸ򸡺黻op˽ärecords˷̤ȿǤޤ
黻opϰʲΤ줫ꤷޤ

: sen_sel_or : string˥ޥå쥳ɤrecordsɲäޤ
: sen_sel_and : string˥ޥåʤ쥳ɤrecordsޤ
: sen_sel_but : string˥ޥå쥳ɤrecordsޤ
: sen_sel_adjust : string˥ޥå쥳ɤrecords˸ޤޤƤˤΥͤûޤ

ޤoptargꤹ뤳Ȥˤꡢindexstring˥ޥå쥳ɤ򸡺ưǤޤsen_select_optargι¤ʲ˼ޤ

 struct _sen_select_optarg {
   sen_sel_mode mode;
   int similarity_threshold;
   int max_interval;
   int *weight_vector;
   int vector_size;
   int (*func)(sen_records *, const void *, int, void *);
   void *func_arg;
 };

modeˤϰʲΤ줫ꤷޤ

: sen_sel_exact : string춭ȰפƸ쥳ɤΤߤ򸡺ޤ
: sen_sel_partial : stringΰʬפ쥳ɤ򸡺ޤ
: sen_sel_unsplit : string狼񤭤˸ΰ˰פ쥳ɤ򸡺ޤ
: sen_sel_near : string狼񤭤Ƹ줬max_intervalϰ˸쥳ɤ򸡺ޤ
: sen_sel_similar : string狼񤭤Τidfͤ礭similarity_thresholdĤθΤ줫ޤ쥳ɤ򸡺ޤ

optargNULLꤵ줿ϡsen_sel_exactꤵ줿Ȥߤʤޤ

ʸʣ鹽硢򸡺оݤȤꡢ夲ꤹ뤿ˡweight_vectorѤޤweight_vectorintꤷ礭vector_size˻ꤹȡstring줿(1١)бǤͤ򥹥ͤ˾軻ޤͤ0Ǥäϡбϸоݤޤ

ʸˤäweightۤʤˤϡХåؿfuncꤷޤ
string˥ޥå쥳ɤĤ٤ˡrecords, ʸID, ֹ, func_arg
ȤƥХåؿfuncƤӽФ졢ͤweightȤƥͤ򻻽Фޤ

 sen_rc sen_index_info(sen_index *index, int *key_size, int *flags, int *initial_n_segments, sen_encoding *encoding);

indexcreate줿˻ꤵ줿key_size, flags, initial_n_segments,
encodingͤ줾ΰλȤ륢ɥ쥹˳Ǽޤ
軰͡ްNULLꤵ줿ϡΰ̵뤷ͤǼޤ

sen_set * sen_index_related_terms(sen_index *index, const char *string,	const char *(*fetcher)(void *, void *), void *fetcher_arg);

string˻ꤵ줿ʸȴϢñФindex->lexiconid򥭡Ȥsen_set֥Ȥ˳Ǽ֤ޤfetcherϡindexΥfetcher_argꤷƸƤФȡʸƤʸȤ֤ؿꤷʤФʤޤ

** sen_records 

advance APIǤϡsen_records Фʣؿ󶡤ޤ

 sen_records *sen_records_open(sen_rec_unit record_unit, sen_rec_unit subrec_unit, unsigned int max_n_subrecs);

records󥹥󥹤ޤbasic APIǤϸ̤ʸǤadvanced APIǤrecord_unitꤹ뤳Ȥˤäƥ쥳ɤñ̤Ǥޤޤ쥳ˡβ̤ñ̤ͭ¸ĤΥ֥쥳ɤǼ뤳ȤǤޤ֥쥳ɤñ̤ϡsubrec_unitǻꤷޤ
record_unit, subrec_unitϰʲΤ줫ꤷޤ

: sen_rec_document : ʸñ
: sen_rec_section : ñ
: sen_rec_position : иñ
: sen_rec_userdef : 桼ñ(groupȤΤͭǤ)
: sen_rec_none : ֥쥳ɤǼʤȤؼޤ

max_n_subrecsϡ쥳˳Ǽ륵֥쥳ɤκꤷޤ

 const sen_recordh *sen_records_at(sen_records *records, const void *key, unsigned section, unsigned pos, int *score, int *n_subrecs);

records椫顢ʸIDkeyֹ椬sectionǽи֤posǤ쥳ɤ򸡺Υ쥳ɥϥɥ֤ޤscore, n_subrecsꤵ줿ϡ쥳ɤΥ֥쥳ɿ֤ޤ

 sen_rc sen_record_info(sen_records *r, const sen_recordh *rh,
		        void *keybuf, int bufsize, int *keysize,
		        int *section, int *pos, int *score, int *n_subrecs);

recordsΥ쥳rh˳°Ф
keybufꤵ졢bufsizekeyĹʾǤkeybufkey򥳥ԡ
section, pos, score, n_subrecsꤵƤС
ֹ桢֥֡쥳ɿ򤽤줾쥻åȤޤ

 sen_rc sen_record_subrec_info(sen_records *r, const sen_recordh *rh, int index,
			       void *keybuf, int bufsize, int *keysize,
			       int *section, int *pos, int *score);

recordsΥ쥳rhΡindexܤΥ֥쥳ɤ°Ф
keybufꤵ졢bufsizekeyĹʾǤkeybufkey򥳥ԡ
section, pos, scoreꤵƤС
ֹ桢֡򤽤줾쥻åȤޤ

 sen_rc sen_records_sort(sen_records *records, int limit, sen_sort_optarg *optarg);

recordsΥ쥳ɤ򥽡ȤlimitĤǤsen_records_next()ǽ缡Ф褦ˤޤ
optargꤹ뤳ȤˤꡢȤˡǤޤsen_sort_optargι¤ʲ˼ޤ

 struct _sen_sort_optarg {
   sen_sort_mode mode;
   int (*compar)(sen_records *, sen_recordh *, sen_recordh *, void *);
   void *compar_arg;
 };

modeˤϰʲΤ줫ꤷޤ

: sen_sort_descending : ߽
: sen_sort_ascending : 

Хåؿcomparϡsen_records_sort()˻ꤵ줿records
軰оݤȤʤĤΥ쥳ɥϥɥ뤬
Ͱcompar_argϤޤӴؿϡΰ軰ΰФơ 1)2)3)礭ʤС 1)̤2)3)礭Τ줫֤ʤ ʤޤĤǤȤ¤ؤrecordsˤ롢Ĥν̤Ǥ

comparNULLꤵ줿ϡƥ쥳ɤΥͤˤäƥȤޤ

optargNULLꤵ줿ϡmodesen_sort_descendingcomparNULLꤵ줿ΤȤߤʤޤ

 sen_rc sen_records_group(sen_records *records, int limit, sen_group_optarg *optarg);

recordsrecord_unit礭γ٤礭ñ̤ѹޤrecord_unitͤƱǤʣΥ쥳ɤϰĤˤޤȤ졢֥쥳ɤȤƳǼޤlimitˤϿʥ쥳Υ֥쥳ɤκͤꤷޤ
optargꤹ뤳Ȥˤꡢ롼ײˡǤޤsen_group_optargι¤ʲ˼ޤ

 struct _sen_group_optarg {
   sen_sort_mode mode;
   int (*func)(sen_records *, const sen_recordh *, void **, void *);
   void *func_arg;
   int key_size;
 };

modeϡlimitİʾΤΥ֥쥳ɤ¸ߤˡ¸оݤȤ륵֥쥳ɤӽФꤷޤ

Хåؿfuncꤹ뤳Ȥˤäơʸñ̡ñ̡иñ̤ΤǤʤ桼륰롼ײñ̤ǥ쥳ɤޤȤ뤳ȤǤޤfuncϡsen_records_group()˻ꤵ줿records˥쥳ɥϥɥ뤬軰˥롼ײΥǼХåեͰfunc_argϤޤfuncͤ0ʳǤС쥳ɤϼΤƤޤfuncϥ쥳ɤƤ˴Ťkey_sizeХȤΥ롼ײ򻻽ФХåե˳ǼʤФʤޤ

 sen_records *sen_records_union(sen_records *a, sen_records *b);

records arecords b½Ǥrecords֤ޤab˲ޤ
abƱΥܥɽʸIDȤ륤ǥåθ̤Ǥꡢ
record_unitƱǤʤФʤޤ

 sen_records *sen_records_subtract(sen_records *a, sen_records *b);

records arecords bκǤrecords֤ޤab˲ޤ
abƱΥܥɽʸIDȤ륤ǥåθ̤Ǥꡢ
record_unitƱǤʤФʤޤ

 sen_records *sen_records_intersect(sen_records *a, sen_records *b);

records arecords bζ̽Ǥrecords֤ޤab˲ޤ
abƱΥܥɽʸIDȤ륤ǥåθ̤Ǥꡢ
record_unitƱǤʤФʤޤ

 int sen_records_difference(sen_records *a, sen_records *b);

records arecords b鶦̤˴ޤޤ쥳ɤޤ̤˴ޤޤƤ쥳ɤο֤ޤ
abƱΥܥɽʸIDȤ륤ǥåθ̤Ǥꡢ
record_unitƱǤʤФʤޤ

* low-level API

low-level APIѤ뤳ȤˤäSennaΥǡ¤˥ʣʥǡ両¸Ǥޤ
low-level APIǤϡ³Ūʥܥɽ

** sen_set

ͤΥڥʤ쥳ɤνǹ®뤿ΥǡǤ
̤ν䡢äνΤ˻Ѥޤ(sen_recordssen_setǡǤ)
sen_setϥʣʣΥ쥳ɤǼ뤳ȤϤǤޤ

 sen_set *sen_set_open(unsigned key_size, unsigned value_size, unsigned index_size);

sen_set󥹥󥹤ޤ
key_size˥Ĺvalue_sizeͤĹꤷޤ
index_sizeˤϽ֤ǤΥХåեΥꤷޤ
key_size0ꤵ줿ϲĹ(nulüʸ)ꤵ줿Ȥߤʤޤ
value_size0ꤵ줿ϡͤǼΰݤޤ

 sen_rc sen_set_close(sen_set *set);

sen_set󥹥󥹤ޤ

 sen_rc sen_set_info(sen_set *set, unsigned *key_size, unsigned *value_size, unsigned *n_entries);

set󥹥󥹤˻ꤷkey_size, value_sizeӳǼƤ쥳ɤοޤ軰ͰNULLꤵ줿ϡΰ̵뤷ͤǼޤ

 sen_set_eh *sen_set_get(sen_set *set, const void *key, void **value);

setˡkey˳쥳ɤϿ쥳ɤؤΥϥɥ֤ޤ
valueˤϥ쥳ɤʬ˳ݥ󥿤֤ޤΤǡ
𤷤ͤ򻲾/Ǥޤ

 sen_set_eh *sen_set_at(sen_set *set, const void *key, void **value);

set顢key˳쥳ɤ򸡺쥳ɤؤΥϥɥ֤ޤ
륭¸ߤʤNULL֤ޤ
valueˤϥ쥳ɤʬ˳ݥ󥿤֤ޤΤǡ
𤷤ͤ򻲾/Ǥޤ

 sen_rc sen_set_del(sen_set *set, sen_set_eh *eh);

eh˻ꤷ쥳ɥϥɥ˳쥳ɤsetޤ

 sen_set_cursor *sen_set_cursor_open(sen_set *set);

setϿƤ쥳ɤ֤˼ФΥޤ

 sen_set_eh *sen_set_cursor_next(sen_set_cursor *cursor, void **key, void **value);

cursor˽äset鼡Υ쥳ɤФ쥳ɤؤΥϥɥ֤ޤ
軰NULLʳΥݥ󥿤Ϥȡkeyˤϥ쥳ɤΥʬ˳ݥ󥿤valueˤϥ쥳ɤʬ˳ݥ󥿤֤ޤ

 sen_rc sen_set_cursor_close(sen_set_cursor *cursor);

cursor󥹥󥹤ޤ

 sen_rc sen_set_element_info(sen_set *set, const sen_set_eh *eh, void **key, void **value);

set˴ޤޤ쥳ɥϥɥehб쥳ɤΡؤΥݥ󥿤keyˡͤؤΥݥ󥿤value˥åȤޤ軰ͰNULLꤵ줿ϡΰ̵뤷ͤǼޤ

 sen_set *sen_set_union(sen_set *a, sen_set *b);

2Ĥset½Ȥʤset֤ޤδؿƽФˤäa, bϲޤ
ƱΥ쥳ɤa, bξ˴ޤޤƤϡa˴ޤޤƤ쥳ɤ
ͤѤޤ

 sen_set *sen_set_subtract(sen_set *a, sen_set *b);

2ĤsetκȤʤset֤ޤδؿƽФˤäa, bϲޤ

 sen_set *sen_set_intersect(sen_set *a, sen_set *b);

2ĤsetξƱΥ¸ߤ쥳ɤʤset֤ޤ
δؿƽФˤäa, bϲޤ
֤ͤsetΥ쥳ɤͤˤϡa˴ޤޤƤ쥳ɤͤѤޤ

 int sen_set_difference(sen_set *a, sen_set *b);

set aset b鶦̤˴ޤޤ쥳ɤޤ̤˴ޤޤƤ쥳ɤο֤ޤ

 sen_set_eh *sen_set_sort(sen_set *set, int limit, sen_set_sort_optarg *optarg);

setΥ쥳ɤ򥽡ȤlimitĤΥ쥳ɥϥɥ֤ޤ
optargꤹ뤳ȤˤꡢȤˡǤޤsen_sort_optargι¤ʲ˼ޤͤϸƤӽФ¦freeˤäƲʤФʤޤ

 struct _sen_set_sort_optarg {
   sen_sort_mode mode;
   int (*compar)(sen_set *, sen_set_eh *, sen_set_eh *, void *);
   void *compar_arg;
   sen_set *compar_arg0;
 };

Хåؿcomparϡcompar_arg0
軰оݤȤʤĤΥ쥳ɥϥɥ뤬
Ͱcompar_argϤޤӴؿϡΰ軰ΰФơ 1)2)3)礭ʤС 1)̤2)3)礭Τ줫֤ʤ ʤޤĤǤȤ¤ؤ̤ˤ롢Ĥν̤Ǥ

comparNULLꤵ줿ˤϡ쥳ɤͤƬ4byteuint32Ȥߤʤ߽˥Ȥޤ

compar_arg0NULLꤵ줿ˤϡsen_set_sort()˻ꤵ줿setcomparϤޤ

optargNULLꤵ줿ˤϡmodesen_sort_descendingcomparNULLꤵ줿ΤȤߤʤޤ

** sen_sym

ĹΥХʥǡnulǽüĹʸ˰դֹƤ륷ܥɽեбǡǤ
sen_symΥ󥹥󥹤ϥե륷ƥΥեбƤꡢǼ줿ʸϱ³Ū¸ޤ

ʤsen_index󥹥󥹤2Ĥsym_sym󥹥󥹤ޤǤޤ

: keys : ʸIDȥ쥳IDȤбդ
: lexicon : ʸƤʬ񤭤äȸIDȤбդ

 sen_sym * sen_sym_create(const char *path, unsigned key_size, unsigned flags, sen_encoding encoding);

pathͿ줿ܥɽեбsen_sym󥹥󥹤֤ޤԤNULL֤ޤ

key_size˥Ĺ(ХĹ)Ϳޤkey_size0ꤵ줿ϲĹ(nulüʸ)ꤵ줿Ȥߤʤޤ

flags SEN_SYM_WITH_SIS ꤷϡϿ줿Ф׸
ǽˤʤޤ

encodingˤϡsen_enc_default, sen_enc_none, sen_enc_euc_jp,
sen_enc_utf8, sen_enc_sjis Τ줫ꤷޤ

 sen_sym * sen_sym_open(const char *path);

pathͿ줿˺ѤΥܥɽե򳫤бsen_sym󥹥󥹤֤ޤԤNULL֤ޤ

 sen_rc sen_sym_info(sen_sym *sym, int *key_size, unsigned *flags, sen_encoding *encoding, unsigned *nrecords);

sym󥹥󥹤˻ꤷkey_size, flags, encodingӳǼƤ쥳ɤοޤ軰͡ްNULLꤵ줿ϡΰ̵뤷ͤǼޤ

 sen_rc sen_sym_close(sen_sym *sym);

symб륷ܥɽեĤsen_sym󥹥󥹤ޤ
 sen_success ԤХ顼ɤ֤ޤ

 sen_rc sen_sym_remove(const char *path);

pathͿ줿ܥɽեޤ sen_success ԤХ顼ɤ֤ޤ

 sen_id sen_sym_get(sen_sym *sym, const unsigned char *key);

ܥɽsymkeyϿбID֤ޤ

 sen_id sen_sym_at(sen_sym *sym, const unsigned char *key);

ܥɽsymkeyбID֤ޤ̤ϿǤä SEN_SYM_NIL ֤ޤ

 sen_rc sen_sym_del(sen_sym *sym, const unsigned char *key);

ܥɽsymkeyޤ

 unsigned int sen_sym_size(sen_sym *sym);

ܥɽsym˴ޤޤ륭ο֤ޤ

 int sen_sym_key(sen_sym *sym, sen_id id, unsigned char *keybuf, int bufsize);

ܥɽsymIDб륭֤ޤ
б륭ĤäkeyĹ֤ޤ
Ĥʤ0֤ޤ
б륭θ
ޤkeybufꤵ졢bufsizeĹkeyĹʾǤäϡ
keybuf˳key򥳥ԡ֤ޤ

 sen_set * sen_sym_prefix_search(sen_sym *sym, const unsigned char *key);

keyפƤΥȥФID򥭡Ȥsen_set󥹥󥹤֤ޤ

 sen_set * sen_sym_suffix_search(sen_sym *sym, const unsigned char *key);

key˸פƤΥȥФID򥭡Ȥsen_set󥹥󥹤֤ޤ(symSEN_SYM_WITH_SISꤷΤͭǤ)

 sen_id sen_sym_common_prefix_search(sen_sym *sym, const unsigned char *key);

keyȥʸ󤬺ǤĹפ륨ȥ򸡺ID֤ޤ

