forked from github/server
remove equipment.name, save an allocation.
This commit is contained in:
parent
b4fc7a1ab4
commit
f43ec9ee0f
|
@ -210,6 +210,32 @@ typedef struct eq_entry {
|
||||||
equipment *value;
|
equipment *value;
|
||||||
} eq_entry;
|
} eq_entry;
|
||||||
|
|
||||||
|
typedef struct name_cb_data {
|
||||||
|
const equipment *find;
|
||||||
|
const char *result;
|
||||||
|
} name_cb_data;
|
||||||
|
|
||||||
|
|
||||||
|
static int equipment_name_cb(const void * match, const void * key, size_t keylen, void *cbdata) {
|
||||||
|
const eq_entry *ent = (const eq_entry *)match;
|
||||||
|
name_cb_data *query = (name_cb_data *)cbdata;
|
||||||
|
if (ent->value == query->find) {
|
||||||
|
query->result = ent->key;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *equipment_name(const struct equipment *eq)
|
||||||
|
{
|
||||||
|
name_cb_data data;
|
||||||
|
|
||||||
|
data.find = eq;
|
||||||
|
data.result = NULL;
|
||||||
|
cb_foreach(&cb_equipments, "", 0, equipment_name_cb, &data);
|
||||||
|
return data.result;
|
||||||
|
}
|
||||||
|
|
||||||
equipment *get_equipment(const char *eqname)
|
equipment *get_equipment(const char *eqname)
|
||||||
{
|
{
|
||||||
const void *match;
|
const void *match;
|
||||||
|
@ -237,7 +263,6 @@ equipment *create_equipment(const char *eqname)
|
||||||
memcpy(ent.key, eqname, len);
|
memcpy(ent.key, eqname, len);
|
||||||
|
|
||||||
ent.value = (equipment *)calloc(1, sizeof(equipment));
|
ent.value = (equipment *)calloc(1, sizeof(equipment));
|
||||||
ent.value->name = strdup(eqname);
|
|
||||||
|
|
||||||
cb_insert(&cb_equipments, &ent, sizeof(ent));
|
cb_insert(&cb_equipments, &ent, sizeof(ent));
|
||||||
return ent.value;
|
return ent.value;
|
||||||
|
@ -254,7 +279,6 @@ equipment *get_or_create_equipment(const char *eqname)
|
||||||
|
|
||||||
static void free_equipment(equipment *eq) {
|
static void free_equipment(equipment *eq) {
|
||||||
int i;
|
int i;
|
||||||
free(eq->name);
|
|
||||||
if (eq->spells) {
|
if (eq->spells) {
|
||||||
selist_foreach(eq->spells, free_ls);
|
selist_foreach(eq->spells, free_ls);
|
||||||
selist_free(eq->spells);
|
selist_free(eq->spells);
|
||||||
|
|
|
@ -45,7 +45,6 @@ extern "C" {
|
||||||
} subset;
|
} subset;
|
||||||
|
|
||||||
typedef struct equipment {
|
typedef struct equipment {
|
||||||
char *name;
|
|
||||||
struct itemdata *items;
|
struct itemdata *items;
|
||||||
char *skills[MAXSKILLS];
|
char *skills[MAXSKILLS];
|
||||||
struct selist *spells;
|
struct selist *spells;
|
||||||
|
@ -55,6 +54,7 @@ extern "C" {
|
||||||
|
|
||||||
void equipment_done(void);
|
void equipment_done(void);
|
||||||
|
|
||||||
|
const char *equipment_name(const struct equipment *eq);
|
||||||
struct equipment *get_or_create_equipment(const char *eqname);
|
struct equipment *get_or_create_equipment(const char *eqname);
|
||||||
struct equipment *get_equipment(const char *eqname);
|
struct equipment *get_equipment(const char *eqname);
|
||||||
struct equipment *create_equipment(const char *eqname);
|
struct equipment *create_equipment(const char *eqname);
|
||||||
|
|
|
@ -53,19 +53,19 @@ static void test_get_equipment(CuTest * tc)
|
||||||
test_setup();
|
test_setup();
|
||||||
eq = create_equipment("catapultammo123");
|
eq = create_equipment("catapultammo123");
|
||||||
CuAssertPtrNotNull(tc, eq);
|
CuAssertPtrNotNull(tc, eq);
|
||||||
CuAssertStrEquals(tc, "catapultammo123", eq->name);
|
CuAssertStrEquals(tc, "catapultammo123", equipment_name(eq));
|
||||||
eq = get_equipment("catapultammo123");
|
eq = get_equipment("catapultammo123");
|
||||||
CuAssertPtrNotNull(tc, eq);
|
CuAssertPtrNotNull(tc, eq);
|
||||||
CuAssertStrEquals(tc, "catapultammo123", eq->name);
|
CuAssertStrEquals(tc, "catapultammo123", equipment_name(eq));
|
||||||
eq = get_equipment("catapult");
|
eq = get_equipment("catapult");
|
||||||
CuAssertPtrEquals(tc, NULL, eq);
|
CuAssertPtrEquals(tc, NULL, eq);
|
||||||
eq = create_equipment("catapult");
|
eq = create_equipment("catapult");
|
||||||
eq = get_equipment("catapult");
|
eq = get_equipment("catapult");
|
||||||
CuAssertPtrNotNull(tc, eq);
|
CuAssertPtrNotNull(tc, eq);
|
||||||
CuAssertStrEquals(tc, "catapult", eq->name);
|
CuAssertStrEquals(tc, "catapult", equipment_name(eq));
|
||||||
eq = get_equipment("catapultammo123");
|
eq = get_equipment("catapultammo123");
|
||||||
CuAssertPtrNotNull(tc, eq);
|
CuAssertPtrNotNull(tc, eq);
|
||||||
CuAssertStrEquals(tc, "catapultammo123", eq->name);
|
CuAssertStrEquals(tc, "catapultammo123", equipment_name(eq));
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -960,7 +960,7 @@ static void add_spells(equipment * eq, xmlNodeSetPtr nsetItems)
|
||||||
equipment_addspell(eq, name, level);
|
equipment_addspell(eq, name, level);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
log_error("spell '%s' for equipment-set '%s' has no level\n", name, eq->name);
|
log_error("spell '%s' for equipment-set '%s' has no level\n", name, equipment_name(eq));
|
||||||
}
|
}
|
||||||
xmlFree(propValue);
|
xmlFree(propValue);
|
||||||
}
|
}
|
||||||
|
@ -980,7 +980,7 @@ static void add_skills(equipment * eq, xmlNodeSetPtr nsetSkills)
|
||||||
assert(propValue != NULL);
|
assert(propValue != NULL);
|
||||||
sk = findskill((const char *)propValue);
|
sk = findskill((const char *)propValue);
|
||||||
if (sk == NOSKILL) {
|
if (sk == NOSKILL) {
|
||||||
log_error("unknown skill '%s' in equipment-set %s\n", (const char *)propValue, eq->name);
|
log_error("unknown skill '%s' in equipment-set %s\n", (const char *)propValue, equipment_name(eq));
|
||||||
xmlFree(propValue);
|
xmlFree(propValue);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1044,7 +1044,7 @@ add_subsets(xmlDocPtr doc, equipment * eq, xmlNodeSetPtr nsetSubsets)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (totalChance > 1.0f) {
|
if (totalChance > 1.0f) {
|
||||||
log_error("total chance exceeds 1.0: %f in equipment set %s.\n", totalChance, eq->name);
|
log_error("total chance exceeds 1.0: %f in equipment set %s.\n", totalChance, equipment_name(eq));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xmlXPathFreeObject(xpathResult);
|
xmlXPathFreeObject(xpathResult);
|
||||||
|
|
Loading…
Reference in New Issue