/* does a binary search on unicode_names */
const gchar* mcharmap_get_unicode_data_name(gunichar uc)
{
    gint min = 0;
    gint mid;
    gint max = G_N_ELEMENTS(unicode_names) - 1;

    if (uc < unicode_names[0].index || uc > unicode_names[max].index)
    {
        return "";
    }

    while (max >= min)
    {
        mid = (min + max) / 2;

        if (uc > unicode_names[mid].index)
        {
            min = mid + 1;
        }
        else if (uc < unicode_names[mid].index)
        {
            max = mid - 1;
        }
        else
        {
            return unicode_name_get_name(&unicode_names[mid]);
        }
    }

    return NULL;
}
/* does a binary search on unicode_names */
G_CONST_RETURN gchar *
gucharmap_get_unicode_data_name (gunichar uc)
{
  gint min = 0;
  gint mid;
  gint max = G_N_ELEMENTS(unicode_names) - 1;

  if (uc < unicode_names[0].index || uc > unicode_names[max].index)
    return "";

  while (max >= min) 
    {
      mid = (min + max) / 2;
      if (uc > unicode_names[mid].index)
        min = mid + 1;
      else if (uc < unicode_names[mid].index)
        max = mid - 1;
      else
        return unicode_name_get_name(&unicode_names[mid]);
    }

  return NULL;
}