/** * Delete the given string from the table. Return TRUE if * this caused a count to go to 0, return FALSE otherwise. */ static bool delete_from_cms_table(multiset_table *cmt, const char * str) { Cms * cms = lookup_in_cms_table(cmt, str); if (cms != NULL && cms->count > 0) { cms->count--; return (cms->count == 0); } return false; }
/** Mark bad trigger connectors for later deletion by power_prune(). */ static bool mark_bad_connectors(multiset_table *cmt, Connector *c) { if (c->nearest_word == BAD_WORD) return true; /* Already marked (mainly by connector memory-sharing). */ Cms *cms = lookup_in_cms_table(cmt, c); if (cms->c->nearest_word == BAD_WORD) { c->nearest_word = BAD_WORD; return true;; } return false; }
static void insert_in_cms_table(multiset_table *cmt, const char * str) { Cms * cms; unsigned int h; cms = lookup_in_cms_table(cmt, str); if (cms != NULL) { cms->count++; } else { cms = (Cms *) xalloc(sizeof(Cms)); cms->name = str; /* don't copy the string...just keep a pointer to it. we won't free these later */ cms->count = 1; h = cms_hash(str); cms->next = cmt->cms_table[h]; cmt->cms_table[h] = cms; } }