]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/keyword.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / keyword.cc
index 43c87d95b5573877bfa4d7bcb6793d9a79274302..b5f7947ada203e31550ee041a557f37f439b115c 100644 (file)
@@ -1,63 +1,34 @@
 /*
   keyword.cc -- keywords and identifiers
- */
-
-#include <stdlib.h>
-
+*/
 
 #include "keyword.hh"
 
+#include <cstring>
+#include <cstdlib>
+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)
 {
-  table = tab;
+  while (tab->name_)
+    table_.push_back (*tab++);
 
-  /* count keywords */
-  for (maxkey = 0; table[maxkey].name; maxkey++);
-
-  /* sort them */
-  qsort (table, maxkey, sizeof (Keyword_ent), tabcmp);
+  vector_sort (table_, tab_less);
 }
 
-/*
-  lookup with binsearch, return tokencode.
-*/
-int
+vsize
 Keyword_table::lookup (char const *s) const
 {
-  int lo;
-  int hi;
-  int cmp;
-  int 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;
 }
-