/*====================================================================* * * char const * synonym (char const * term, const struct _term_ list [], size_t size); * * symbol.h * * lookup term and return corresponding text; return the original * term if lookup fails; the list must be in lexographic order by * term or lookups may fail; struct _term_ is defined in types.h; * * Motley Tools by Charles Maier <cmaier@cmassoc.net>; * Copyright (c) 2001-2006 by Charles Maier Associates; * Licensed under the Internet Software Consortium License; * *--------------------------------------------------------------------*/ #ifndef SYNONYM_SOURCE #define SYNONYM_SOURCE #include <string.h> #include "../tools/types.h" char const * synonym (char const * term, const struct _term_ list [], size_t size) { size_t lower = 0; size_t upper = size; while (lower < upper) { size_t index = (lower + upper) >> 1; signed order = strcmp (term, list [index].term); if (order < 0) { upper = index - 0; continue; } if (order > 0) { lower = index + 1; continue; } return (list [index].text); } return (term); } #endif