diff options
Diffstat (limited to 'libibex/find.c')
-rw-r--r-- | libibex/find.c | 183 |
1 files changed, 96 insertions, 87 deletions
diff --git a/libibex/find.c b/libibex/find.c index 5b45c57787..f449144e61 100644 --- a/libibex/find.c +++ b/libibex/find.c @@ -1,6 +1,22 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - Copyright 2000 Helix Code Inc. -*/ + * Copyright (C) 2000 Helix Code, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ /* find.c: index file searching ops */ @@ -9,112 +25,105 @@ #include "ibex_internal.h" GPtrArray * -ibex_find(ibex *ib, char *word) +ibex_find (ibex *ib, char *word) { - GPtrArray *refs, *ret; - ibex_file *ibf; - int i; + GPtrArray *refs, *ret; + ibex_file *ibf; + int i; - ret = g_ptr_array_new(); - refs = g_hash_table_lookup(ib->words, word); - if (refs) - { - for (i = 0; i < refs->len; i++) - { - ibf = g_ptr_array_index(refs, i); - g_ptr_array_add(ret, ibf->name); + ret = g_ptr_array_new (); + refs = g_hash_table_lookup (ib->words, word); + if (refs) { + for (i = 0; i < refs->len; i++) { + ibf = g_ptr_array_index (refs, i); + g_ptr_array_add (ret, ibf->name); + } } - } - return ret; + return ret; } gboolean -ibex_find_name(ibex *ib, char *name, char *word) +ibex_find_name (ibex *ib, char *name, char *word) { - GPtrArray *refs; - ibex_file *ibf; - int i; + GPtrArray *refs; + ibex_file *ibf; + int i; - refs = g_hash_table_lookup(ib->words, word); - if (refs) - { - for (i = 0; i < refs->len; i++) - { - ibf = g_ptr_array_index(refs, i); - if (!strcmp(ibf->name, name)) - return TRUE; + refs = g_hash_table_lookup (ib->words, word); + if (refs) { + for (i = 0; i < refs->len; i++) { + ibf = g_ptr_array_index (refs, i); + if (!strcmp (ibf->name, name)) + return TRUE; + } } - } - return FALSE; + return FALSE; } static gint -build_array(gpointer key, gpointer value, gpointer data) +build_array (gpointer key, gpointer value, gpointer data) { - char *name = key; - unsigned int count = GPOINTER_TO_UINT(value); - GPtrArray *ret = data; + char *name = key; + unsigned int count = GPOINTER_TO_UINT (value); + GPtrArray *ret = data; - if (count == 1) - g_ptr_array_add(ret, name); - return FALSE; + if (count == 1) + g_ptr_array_add (ret, name); + return FALSE; } GPtrArray * -ibex_find_all(ibex *ib, GPtrArray *words) +ibex_find_all (ibex *ib, GPtrArray *words) { - GTree *work; - GPtrArray *wrefs, *ret; - int i, j, count; - char *word; - ibex_file *ibf; + GTree *work; + GPtrArray *wrefs, *ret; + int i, j, count; + char *word; + ibex_file *ibf; - if (words->len == 0) - return g_ptr_array_new(); - else if (words->len == 1) - return ibex_find(ib, g_ptr_array_index(words, 0)); + if (words->len == 0) + return g_ptr_array_new (); + else if (words->len == 1) + return ibex_find (ib, g_ptr_array_index (words, 0)); - work = g_tree_new(strcmp); - for (i = 0; i < words->len; i++) - { - word = g_ptr_array_index(words, i); - wrefs = g_hash_table_lookup(ib->words, word); - if (!wrefs) - { - /* One of the words isn't even in the index. */ - g_tree_destroy(work); - return g_ptr_array_new(); - } + work = g_tree_new (strcmp); + for (i = 0; i < words->len; i++) { + word = g_ptr_array_index (words, i); + wrefs = g_hash_table_lookup (ib->words, word); + if (!wrefs) { + /* One of the words isn't even in the index. */ + g_tree_destroy (work); + return g_ptr_array_new (); + } - if (i == 0) - { - /* Copy the references into a tree, using the filenames as - * keys and the size of words as the value. - */ - for (j = 0; j < wrefs->len; j++) - { - ibf = g_ptr_array_index(wrefs, j); - g_tree_insert(work, ibf->name, GUINT_TO_POINTER(words->len)); - } - } - else - { - /* Increment the counts in the working tree for the references - * for this word. - */ - for (j = 0; j < wrefs->len; j++) - { - ibf = g_ptr_array_index(wrefs, j); - count = GPOINTER_TO_UINT(g_tree_lookup(work, ibf->name)); - if (count) - g_tree_insert(work, ibf->name, GUINT_TO_POINTER(count - 1)); - } + if (i == 0) { + /* Copy the references into a tree, using the + * filenames as keys and the size of words as + * the value. + */ + for (j = 0; j < wrefs->len; j++) { + ibf = g_ptr_array_index (wrefs, j); + g_tree_insert (work, ibf->name, + GUINT_TO_POINTER (words->len)); + } + } else { + /* Increment the counts in the working tree + * for the references for this word. + */ + for (j = 0; j < wrefs->len; j++) { + ibf = g_ptr_array_index (wrefs, j); + count = GPOINTER_TO_UINT (g_tree_lookup (work, ibf->name)); + if (count) { + g_tree_insert (work, ibf->name, + GUINT_TO_POINTER (count - 1)); + } + } + } } - } - /* Build an array with the refs that contain all the words. */ - ret = g_ptr_array_new(); - g_tree_traverse(work, build_array, G_IN_ORDER, ret); - g_tree_destroy(work); - return ret; + /* Build an array with the refs that contain all the words. */ + ret = g_ptr_array_new (); + g_tree_traverse (work, build_array, G_IN_ORDER, ret); + g_tree_destroy (work); + return ret; } |