static struct symbol * iter_name_first_linear (const struct dictionary *dict, const char *name, struct dict_iterator *iterator) { DICT_ITERATOR_DICT (iterator) = dict; DICT_ITERATOR_INDEX (iterator) = -1; return iter_name_next_linear (name, iterator); }
static struct symbol * iterator_hashed_advance (struct dict_iterator *iterator) { const struct dictionary *dict = DICT_ITERATOR_DICT (iterator); int nbuckets = DICT_HASHED_NBUCKETS (dict); int i; for (i = DICT_ITERATOR_INDEX (iterator) + 1; i < nbuckets; ++i) { struct symbol *sym = DICT_HASHED_BUCKET (dict, i); if (sym != NULL) { DICT_ITERATOR_INDEX (iterator) = i; DICT_ITERATOR_CURRENT (iterator) = sym; return sym; } } return NULL; }
static struct symbol * iter_name_next_linear (const char *name, struct dict_iterator *iterator) { const struct dictionary *dict = DICT_ITERATOR_DICT (iterator); int i, nsyms = DICT_LINEAR_NSYMS (dict); struct symbol *sym, *retval = NULL; for (i = DICT_ITERATOR_INDEX (iterator) + 1; i < nsyms; ++i) { sym = DICT_LINEAR_SYM (dict, i); if (strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0) { retval = sym; break; } } DICT_ITERATOR_INDEX (iterator) = i; return retval; }