void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct storage *)) { char buffer[64]; size_t len = strlen(name); len = cb_new_kv(name, len, &reader, sizeof(reader), buffer); cb_insert(&cb_deprecated, buffer, len); }
void add_function(const char *symbol, evalfun parse) { char buffer[64]; size_t len = strlen(symbol); assert(len + 1 + sizeof(parse) <= sizeof(buffer)); len = cb_new_kv(symbol, len, &parse, sizeof(parse), buffer); cb_insert(&functions, buffer, len); }
static void st_register(ship_type *stype) { size_t len; char data[64]; selist_push(&shiptypes, (void *)stype); len = cb_new_kv(stype->_name, strlen(stype->_name), &stype, sizeof(stype), data); assert(len <= sizeof(data)); cb_insert(&cb_shiptypes, data, len); }
static critbit_tree * special_resources(void) { static critbit_tree cb = CRITBIT_TREE(); if (!cb.root) { const char * special[] = { "seed", "sapling", "tree", "grave", "chaos", 0 }; char buffer[32]; int i; for (i = 0; special[i]; ++i) { size_t len = strlen(special[i]); len = cb_new_kv(special[i], len, &i, sizeof(int), buffer); cb_insert(&cb, buffer, len); } } return &cb; }
int stats_count(const char *stat, int delta) { void * match; if (cb_find_prefix_str(&stats, stat, &match, 1, 0) == 0) { size_t len; char data[128]; len = cb_new_kv(stat, strlen(stat), &delta, sizeof(delta), data); cb_insert(&stats, data, len); return delta; } else { int *num; cb_get_kv_ex(match, (void **)&num); return *num += delta; } }