yet another function and date name update

Related to the overhaul of glyphname hash indices
This commit is contained in:
nhmall
2026-05-25 14:44:32 -04:00
parent 8b3eb77305
commit 503355bb11
8 changed files with 59 additions and 59 deletions
+1 -1
View File
@@ -344,7 +344,7 @@ struct instance_globals_d {
/* new */ /* new */
boolean deferred_showpaths; boolean deferred_showpaths;
char *deferred_showpaths_dir; char *deferred_showpaths_dir;
boolean disable_glyphname_hashtable_prefill; boolean disable_glyphname_hash_indices_prefill;
boolean havestate; boolean havestate;
}; };
+3 -3
View File
@@ -1185,9 +1185,9 @@ extern int glyphrep(const char *) NONNULLARG1;
extern int match_glyph(char *) NONNULLARG1; extern int match_glyph(char *) NONNULLARG1;
extern void dump_all_glyphnames(FILE *fp) NONNULLARG1; extern void dump_all_glyphnames(FILE *fp) NONNULLARG1;
extern void wizcustom_glyphnames(winid win); extern void wizcustom_glyphnames(winid win);
extern void populate_glyphname_hashtable(void); extern void populate_glyphname_hash_indices(void);
extern void empty_glyphname_hashtable(void); extern void empty_glyphname_hash_indices(void);
extern boolean glyphname_hashtable_loaded(void); extern boolean glyphname_hash_indices_loaded(void);
extern void apply_customizations(enum graphics_sets which_set, extern void apply_customizations(enum graphics_sets which_set,
enum do_customizations docustomize); enum do_customizations docustomize);
extern void purge_custom_entries(enum graphics_sets which_set); extern void purge_custom_entries(enum graphics_sets which_set);
+2 -2
View File
@@ -313,7 +313,7 @@ static const struct instance_globals_d g_init_d = {
FALSE, /* decor_levitate_override */ FALSE, /* decor_levitate_override */
FALSE, /* deferred_showpaths */ FALSE, /* deferred_showpaths */
NULL, /* deferred_showpaths_dir */ NULL, /* deferred_showpaths_dir */
FALSE, /* disable_glyphname_hashtable_prefill */ FALSE, /* disable_glyphname_hash_indices_prefill */
TRUE, /* havestate*/ TRUE, /* havestate*/
}; };
@@ -1186,7 +1186,7 @@ decl_globals_init(void)
gu.urole = urole_init_data; gu.urole = urole_init_data;
gu.urace = urace_init_data; gu.urace = urace_init_data;
#ifdef DISABLE_GLYPHID_CACHE_PREFILL #ifdef DISABLE_GLYPHID_CACHE_PREFILL
gd.disable_glyphname_hashtable_prefill = TRUE; gd.disable_glyphname_hash_indices_prefill = TRUE;
#endif #endif
} }
+34 -34
View File
@@ -26,12 +26,12 @@ struct find_struct {
genericptr_t reserved; genericptr_t reserved;
}; };
static const struct find_struct zero_find = { 0 }; static const struct find_struct zero_find = { 0 };
struct glyphname_hashtable_entry_t { struct glyphname_hash_index_entry_t {
uint32 hash; uint32 hash;
int glyphnum; /* NO_GLYPH (==MAX_GLYPH) marks an empty bucket */ int glyphnum; /* NO_GLYPH (==MAX_GLYPH) marks an empty bucket */
}; };
static struct glyphname_hashtable_entry_t *glyphname_hashtable_ptr; static struct glyphname_hash_index_entry_t *glyphname_hash_indices_ptr;
static size_t glyphname_hashtable_count; static size_t glyphname_hash_indices_count;
static struct find_struct to_custom_symbol_find; static struct find_struct to_custom_symbol_find;
static const long nonzero_black = CLR_BLACK | NH_BASIC_COLOR; static const long nonzero_black = CLR_BLACK | NH_BASIC_COLOR;
@@ -117,7 +117,7 @@ glyphrep_to_custom_map_entries(
long rgb = 0L; long rgb = 0L;
boolean slash = FALSE, colon = FALSE; boolean slash = FALSE, colon = FALSE;
if (!glyphname_hashtable_ptr) if (!glyphname_hash_indices_ptr)
reslt = 1; /* for debugger use only; no cache available */ reslt = 1; /* for debugger use only; no cache available */
nhUse(reslt); nhUse(reslt);
@@ -198,7 +198,7 @@ fix_glyphname(char *str)
* Returns 1 if a name was produced, 0 if this glyph has no canonical name * Returns 1 if a name was produced, 0 if this glyph has no canonical name
* (a few unused object indices); buf[0] is set to '\0' in that case. * (a few unused object indices); buf[0] is set to '\0' in that case.
* Used by parse_id's bulk-iteration paths, by find_glyph_in_hashtable to * Used by parse_id's bulk-iteration paths, by find_glyph_in_hashtable to
* verify hash matches, by populate_glyphname_hashtable to fill the table, * verify hash matches, by populate_glyphname_hash_indices to fill the table,
* and by wizcustom_glyphnames. */ * and by wizcustom_glyphnames. */
staticfn int staticfn int
compose_glyph_name(int glyph, char *buf, size_t bufsz) compose_glyph_name(int glyph, char *buf, size_t bufsz)
@@ -514,8 +514,8 @@ glyph_find_core(
} }
/* /*
* glyphname_hashtable is a sorted (hash, glyph) index of canonical * glyphname_hash_indices is a sorted (hash, glyph) index of canonical
* "G_xxx" identifiers. populate_glyphname_hashtable() allocates one * "G_xxx" identifiers. populate_glyphname_hash_indices() allocates one
* block of MAX_GLYPH * sizeof(entry) (some entries go unused for the * block of MAX_GLYPH * sizeof(entry) (some entries go unused for the
* scroll/gem appearance gaps), fills it via compose_glyph_name(), and * scroll/gem appearance gaps), fills it via compose_glyph_name(), and
* sorts ascending by hash. Lookup is bsearch on the hash with * sorts ascending by hash. Lookup is bsearch on the hash with
@@ -534,8 +534,8 @@ glyph_find_core(
staticfn int staticfn int
cmp_glyphname_entry(const void *a, const void *b) cmp_glyphname_entry(const void *a, const void *b)
{ {
uint32 ha = ((const struct glyphname_hashtable_entry_t *) a)->hash; uint32 ha = ((const struct glyphname_hash_index_entry_t *) a)->hash;
uint32 hb = ((const struct glyphname_hashtable_entry_t *) b)->hash; uint32 hb = ((const struct glyphname_hash_index_entry_t *) b)->hash;
if (ha < hb) if (ha < hb)
return -1; return -1;
@@ -545,59 +545,59 @@ cmp_glyphname_entry(const void *a, const void *b)
} }
void void
populate_glyphname_hashtable(void) populate_glyphname_hash_indices(void)
{ {
int glyph; int glyph;
size_t n = 0; size_t n = 0;
char buf[BUFSZ]; char buf[BUFSZ];
if (glyphname_hashtable_ptr) if (glyphname_hash_indices_ptr)
return; return;
glyphname_hashtable_ptr = (struct glyphname_hashtable_entry_t *) alloc( glyphname_hash_indices_ptr = (struct glyphname_hash_index_entry_t *) alloc(
MAX_GLYPH * sizeof (struct glyphname_hashtable_entry_t)); MAX_GLYPH * sizeof (struct glyphname_hash_index_entry_t));
for (glyph = 0; glyph < MAX_GLYPH; ++glyph) { for (glyph = 0; glyph < MAX_GLYPH; ++glyph) {
if (compose_glyph_name(glyph, buf, sizeof buf)) { if (compose_glyph_name(glyph, buf, sizeof buf)) {
glyphname_hashtable_ptr[n].hash = glyph_hash(buf); glyphname_hash_indices_ptr[n].hash = glyph_hash(buf);
glyphname_hashtable_ptr[n].glyphnum = glyph; glyphname_hash_indices_ptr[n].glyphnum = glyph;
++n; ++n;
} }
} }
qsort(glyphname_hashtable_ptr, n, qsort(glyphname_hash_indices_ptr, n,
sizeof glyphname_hashtable_ptr[0], cmp_glyphname_entry); sizeof glyphname_hash_indices_ptr[0], cmp_glyphname_entry);
glyphname_hashtable_count = n; glyphname_hash_indices_count = n;
} }
void void
empty_glyphname_hashtable(void) empty_glyphname_hash_indices(void)
{ {
if (!glyphname_hashtable_ptr) if (!glyphname_hash_indices_ptr)
return; return;
free(glyphname_hashtable_ptr); free(glyphname_hash_indices_ptr);
glyphname_hashtable_ptr = (struct glyphname_hashtable_entry_t *) 0; glyphname_hash_indices_ptr = (struct glyphname_hash_index_entry_t *) 0;
glyphname_hashtable_count = 0; glyphname_hash_indices_count = 0;
} }
staticfn int staticfn int
find_glyph_in_hashtable(const char *id) find_glyph_in_hashtable(const char *id)
{ {
uint32 want = glyph_hash(id); uint32 want = glyph_hash(id);
size_t lo = 0, hi = glyphname_hashtable_count, mid; size_t lo = 0, hi = glyphname_hash_indices_count, mid;
char buf[BUFSZ]; char buf[BUFSZ];
/* Binary-search the sorted array for the first entry whose hash >= want. */ /* Binary-search the sorted array for the first entry whose hash >= want. */
while (lo < hi) { while (lo < hi) {
mid = (lo + hi) >> 1; mid = (lo + hi) >> 1;
if (glyphname_hashtable_ptr[mid].hash < want) if (glyphname_hash_indices_ptr[mid].hash < want)
lo = mid + 1; lo = mid + 1;
else else
hi = mid; hi = mid;
} }
/* Walk forward across any equal-hash neighbours, verifying each by /* Walk forward across any equal-hash neighbours, verifying each by
reconstructing the canonical name and strcmpi'ing it back. */ reconstructing the canonical name and strcmpi'ing it back. */
while (lo < glyphname_hashtable_count while (lo < glyphname_hash_indices_count
&& glyphname_hashtable_ptr[lo].hash == want) { && glyphname_hash_indices_ptr[lo].hash == want) {
int g = glyphname_hashtable_ptr[lo].glyphnum; int g = glyphname_hash_indices_ptr[lo].glyphnum;
if (compose_glyph_name(g, buf, sizeof buf) && !strcmpi(id, buf)) if (compose_glyph_name(g, buf, sizeof buf) && !strcmpi(id, buf))
return g; return g;
@@ -624,9 +624,9 @@ glyph_hash(const char *id)
} }
boolean boolean
glyphname_hashtable_loaded(void) glyphname_hash_indices_loaded(void)
{ {
return (glyphname_hashtable_ptr != 0); return (glyphname_hash_indices_ptr != 0);
} }
int int
@@ -646,7 +646,7 @@ glyphrep(const char *op)
{ {
int reslt = 0, glyph = NO_GLYPH; int reslt = 0, glyph = NO_GLYPH;
if (!glyphname_hashtable_ptr) if (!glyphname_hash_indices_ptr)
reslt = 1; /* for debugger use only; no cache available */ reslt = 1; /* for debugger use only; no cache available */
nhUse(reslt); nhUse(reslt);
reslt = glyphrep_to_custom_map_entries(op, &glyph); reslt = glyphrep_to_custom_map_entries(op, &glyph);
@@ -1036,9 +1036,9 @@ parse_id(
} }
if (is_G && id) { if (is_G && id) {
/* Populate the hash table lazily, on first G_xxx lookup. */ /* Populate the hash table lazily, on first G_xxx lookup. */
if (!glyphname_hashtable_ptr) if (!glyphname_hash_indices_ptr)
populate_glyphname_hashtable(); populate_glyphname_hash_indices();
if (glyphname_hashtable_ptr) { if (glyphname_hash_indices_ptr) {
int val = find_glyph_in_hashtable(id); int val = find_glyph_in_hashtable(id);
if (val >= 0) { if (val >= 0) {
+9 -9
View File
@@ -4224,11 +4224,11 @@ optfn_symset(
if (req == do_handler) { if (req == do_handler) {
int reslt; int reslt;
if (!glyphname_hashtable_loaded()) if (!glyphname_hash_indices_loaded())
populate_glyphname_hashtable(); populate_glyphname_hash_indices();
reslt = handler_symset(optidx); reslt = handler_symset(optidx);
if (glyphname_hashtable_loaded()) if (glyphname_hash_indices_loaded())
empty_glyphname_hashtable(); empty_glyphname_hash_indices();
/* apply_customizations(gc.currentgraphics, /* apply_customizations(gc.currentgraphics,
(do_custom_colors | do_custom_symbols)); */ (do_custom_colors | do_custom_symbols)); */
return reslt; return reslt;
@@ -7152,9 +7152,9 @@ initoptions_init(void)
} }
/* make any symbol parsing quicker, but only if /* make any symbol parsing quicker, but only if
* gd.disable_glyphname_hashtable_prefill is not set to TRUE */ * gd.disable_glyphname_hash_indices_prefill is not set to TRUE */
if (!glyphname_hashtable_loaded() && !gd.disable_glyphname_hashtable_prefill) if (!glyphname_hash_indices_loaded() && !gd.disable_glyphname_hash_indices_prefill)
populate_glyphname_hashtable(); populate_glyphname_hash_indices();
/* set up the command parsing */ /* set up the command parsing */
reset_commands(TRUE); /* init */ reset_commands(TRUE); /* init */
@@ -7377,8 +7377,8 @@ initoptions_finish(void)
iflags.wc_ascii_map = FALSE, iflags.wc_tiled_map = TRUE; iflags.wc_ascii_map = FALSE, iflags.wc_tiled_map = TRUE;
#ifdef ENHANCED_SYMBOLS #ifdef ENHANCED_SYMBOLS
if (glyphname_hashtable_loaded()) if (glyphname_hash_indices_loaded())
empty_glyphname_hashtable(); empty_glyphname_hash_indices();
apply_customizations(gc.currentgraphics, apply_customizations(gc.currentgraphics,
do_custom_symbols | do_custom_colors); do_custom_symbols | do_custom_colors);
#endif #endif
+2 -2
View File
@@ -1175,8 +1175,8 @@ freedynamicdata(void)
if (options_set_window_colors_flag) if (options_set_window_colors_flag)
options_free_window_colors(); options_free_window_colors();
if (glyphname_hashtable_loaded()) if (glyphname_hash_indices_loaded())
empty_glyphname_hashtable(); empty_glyphname_hash_indices();
if (tnhfp) { if (tnhfp) {
close_nhfile(tnhfp); close_nhfile(tnhfp);
+4 -4
View File
@@ -1069,12 +1069,12 @@ do_symset(boolean rogueflag)
if (gs.symset[which_set].name) { if (gs.symset[which_set].name) {
/* non-default symbols */ /* non-default symbols */
int ok; int ok;
if (!glyphname_hashtable_loaded()) { if (!glyphname_hash_indices_loaded()) {
populate_glyphname_hashtable(); populate_glyphname_hash_indices();
} }
ok = read_sym_file(which_set); ok = read_sym_file(which_set);
if (glyphname_hashtable_loaded()) { if (glyphname_hash_indices_loaded()) {
empty_glyphname_hashtable(); empty_glyphname_hash_indices();
} }
if (ok) { if (ok) {
ready_to_switch = TRUE; ready_to_switch = TRUE;
+4 -4
View File
@@ -1945,8 +1945,8 @@ wiz_custom(void)
#endif #endif
menu_item *pick_list = (menu_item *) 0; menu_item *pick_list = (menu_item *) 0;
if (!glyphname_hashtable_loaded()) if (!glyphname_hash_indices_loaded())
populate_glyphname_hashtable(); populate_glyphname_hash_indices();
win = create_nhwindow(NHW_MENU); win = create_nhwindow(NHW_MENU);
start_menu(win, MENU_BEHAVE_STANDARD); start_menu(win, MENU_BEHAVE_STANDARD);
@@ -1975,8 +1975,8 @@ wiz_custom(void)
#endif #endif
if (n >= 1) if (n >= 1)
free((genericptr_t) pick_list); free((genericptr_t) pick_list);
if (glyphname_hashtable_loaded()) if (glyphname_hash_indices_loaded())
empty_glyphname_hashtable(); empty_glyphname_hash_indices();
docrt(); docrt();
} else } else
pline(unavailcmd, ecname_from_fn(wiz_custom)); pline(unavailcmd, ecname_from_fn(wiz_custom));