X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fkeyword.cc;h=b5f7947ada203e31550ee041a557f37f439b115c;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=2ccb446e2707e0973a11745440d4268fa98c21e8;hpb=01ddcb81463d7a68530971100469d3e2baf8c94b;p=lilypond.git diff --git a/lily/keyword.cc b/lily/keyword.cc index 2ccb446e27..b5f7947ada 100644 --- a/lily/keyword.cc +++ b/lily/keyword.cc @@ -1,79 +1,34 @@ /* keyword.cc -- keywords and identifiers - */ - -#include - -#include "glob.hh" -#include "lexer.hh" -//#include "mudobs.hh" -//#include "gram.hh" - -/* for the keyword table */ -struct Keyword_ent -{ - char const *name; - int tokcode; -}; +*/ -struct Keyword_table -{ - Keyword_ent *table; - int maxkey; - Keyword_table(Keyword_ent *); - int lookup(char const *s) const; -}; +#include "keyword.hh" +#include +#include +using namespace std; /* for qsort */ -int - tabcmp(void const * p1, void const * p2) +bool tab_less (Keyword_ent const &p1, Keyword_ent const &p2) { - return strcmp(((Keyword_ent const *) p1)->name, - ((Keyword_ent const *) p2)->name); + return strcmp (p1.name_, p2.name_) < 0; } -Keyword_table::Keyword_table(Keyword_ent *tab) +Keyword_table::Keyword_table (Keyword_ent *tab) { - table = tab; - - /* count keywords */ - for (maxkey = 0; table[maxkey].name; maxkey++); + while (tab->name_) + table_.push_back (*tab++); - /* sort them */ - qsort(table, maxkey, sizeof(Keyword_ent), tabcmp); + vector_sort (table_, tab_less); } -/* - lookup with binsearch, return tokencode. -*/ -int -Keyword_table::lookup(char const *s)const +vsize +Keyword_table::lookup (char const *s) const { - int lo, - hi, - cmp, - result; - lo = 0; - hi = maxkey; - - /* binary search */ - do - { - cmp = (lo + hi) / 2; - - result = strcmp(s, table[cmp].name); - - if (result < 0) - hi = cmp; - else - lo = cmp; - } - while (hi - lo > 1); - if (!strcmp(s, table[lo].name)) - { - return table[lo].tokcode; - } else - return -1; /* not found */ + Keyword_ent e; + e.name_ = s; + vsize idx = binary_search (table_, e, tab_less); + if (idx != VPOS) + return table_[idx].tokcode_; + return VPOS; } -