static uintptr_t imm_get_hash (const void *_imm, void *_tab) { immediate_t *imm = (immediate_t *) _imm; hashtab_t **tab = (hashtab_t **) _tab; if (tab == &string_imm_defs) { const char *str = pr.strings->strings + imm->i.string_val; return str ? Hash_String (str) : 0; } else if (tab == &float_imm_defs) { return imm->i.integer_val; } else if (tab == &vector_imm_defs) { return Hash_Buffer (&imm->i.vector_val, sizeof (&imm->i.vector_val)); } else if (tab == &entity_imm_defs) { return imm->i.integer_val; } else if (tab == &field_imm_defs) { return Hash_Buffer (&imm->i.pointer, sizeof (&imm->i.pointer)); } else if (tab == &func_imm_defs) { return imm->i.integer_val; } else if (tab == &pointer_imm_defs) { return Hash_Buffer (&imm->i.pointer, sizeof (&imm->i.pointer)); } else if (tab == &quaternion_imm_defs) { return Hash_Buffer (&imm->i.quaternion_val, sizeof (&imm->i.quaternion_val)); } else if (tab == &integer_imm_defs) { return imm->i.integer_val; } else { internal_error (0, 0); } }
// case insensitive hash and compare static unsigned long wad_get_hash (void *l, void *unused) { char name[16]; int i; for (i = 0; i < 16; i++) name[i] = tolower (((lumpinfo_t *) l)->name[i]); return Hash_String (name); }
static uintptr_t get_hash (const void *_op, void *_tab) { opcode_t *op = (opcode_t *) _op; uintptr_t hash; hash = ROTL (~op->type_a, 8) + ROTL (~op->type_b, 16) + ROTL (~op->type_c, 24); return hash + Hash_String (op->name); }