X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Forddict.c;h=2ad7fd5a9b7f9a2ab7af495b97c429de7473cc76;hp=ed4a05fc40dd973dc0b2d40d7b1dc075456512f6;hb=00d6544408e2de88277e091fb7f8f4dfe3949558;hpb=6b1dece7410af50ba077381066c10c44f0188868 diff --git a/index/orddict.c b/index/orddict.c index ed4a05f..2ad7fd5 100644 --- a/index/orddict.c +++ b/index/orddict.c @@ -1,35 +1,83 @@ +/* This file is part of the Zebra server. + Copyright (C) Index Data -#include +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. -#include "orddict.h" +Zebra 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 General Public License +for more details. -struct zebra_ord_dict { - char *str; - size_t str_sz; - Dict dict; -}; +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Zebra_ord_dict zebra_ord_dict_open(Dict dict) +*/ + +#if HAVE_CONFIG_H +#include +#endif +#include +#include +#include "index.h" + +WRBUF zebra_mk_ord_str(int ord, const char *str) +{ + char pref[20]; + WRBUF w = wrbuf_alloc(); + int len; + + assert(ord >= 0); + + len = key_SU_encode(ord, pref); + + wrbuf_write(w, pref, len); + wrbuf_puts(w, str); + return w; +} + +char *dict_lookup_ord(Dict d, int ord, const char *str) +{ + WRBUF w = zebra_mk_ord_str(ord, str); + char *rinfo = dict_lookup(d, wrbuf_cstr(w)); + wrbuf_destroy(w); + return rinfo; +} + +int dict_insert_ord(Dict d, int ord, const char *p, + int userlen, void *userinfo) { - Zebra_ord_dict zod = xmalloc(sizeof(*zod)); - zod->str_sz = 50; - zod->str = xmalloc(zod->str_sz); - zod->dict = dict; - return zod; + WRBUF w = zebra_mk_ord_str(ord, p); + int r = dict_insert(d, wrbuf_cstr(w), userlen, userinfo); + wrbuf_destroy(w); + return r; } -void zebra_ord_dict_close(Zebra_ord_dict zod) +int dict_delete_ord(Dict d, int ord, const char *p) { - if (!zod) - return; - dict_close(zod->dict); - xfree(zod->str); - xfree(zod); + WRBUF w = zebra_mk_ord_str(ord, p); + int r = dict_delete(d, wrbuf_cstr(w)); + wrbuf_destroy(w); + return r; } -char *zebra_ord_dict_lookup (Zebra_ord_dict zod, int ord, - const char *p) +int dict_delete_subtree_ord(Dict d, int ord, void *client, + int (*f)(const char *info, void *client)) { - return dict_lookup(zod->dict, p); + WRBUF w = zebra_mk_ord_str(ord, ""); + int r = dict_delete_subtree(d, wrbuf_cstr(w), client, f); + wrbuf_destroy(w); + return r; } +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */