/* Interface to hashtable implementations.
- Copyright (C) 2006-2020 Free Software Foundation, Inc.
+ Copyright (C) 2006-2021 Free Software Foundation, Inc.
This file is part of libctf.
return !strcmp((const char *) hep_a->key, (const char *) hep_b->key);
}
-/* Hash a type_mapping_key. */
+/* Hash a type_key. */
unsigned int
-ctf_hash_type_mapping_key (const void *ptr)
+ctf_hash_type_key (const void *ptr)
{
ctf_helem_t *hep = (ctf_helem_t *) ptr;
- ctf_link_type_mapping_key_t *k = (ctf_link_type_mapping_key_t *) hep->key;
+ ctf_link_type_key_t *k = (ctf_link_type_key_t *) hep->key;
- return htab_hash_pointer (k->cltm_fp) + 59 * htab_hash_pointer ((void *) k->cltm_idx);
+ return htab_hash_pointer (k->cltk_fp) + 59
+ * htab_hash_pointer ((void *) (uintptr_t) k->cltk_idx);
}
int
-ctf_hash_eq_type_mapping_key (const void *a, const void *b)
+ctf_hash_eq_type_key (const void *a, const void *b)
{
ctf_helem_t *hep_a = (ctf_helem_t *) a;
ctf_helem_t *hep_b = (ctf_helem_t *) b;
- ctf_link_type_mapping_key_t *key_a = (ctf_link_type_mapping_key_t *) hep_a->key;
- ctf_link_type_mapping_key_t *key_b = (ctf_link_type_mapping_key_t *) hep_b->key;
+ ctf_link_type_key_t *key_a = (ctf_link_type_key_t *) hep_a->key;
+ ctf_link_type_key_t *key_b = (ctf_link_type_key_t *) hep_b->key;
- return (key_a->cltm_fp == key_b->cltm_fp)
- && (key_a->cltm_idx == key_b->cltm_idx);
+ return (key_a->cltk_fp == key_b->cltk_fp)
+ && (key_a->cltk_idx == key_b->cltk_idx);
}
+/* Hash a type_id_key. */
+unsigned int
+ctf_hash_type_id_key (const void *ptr)
+{
+ ctf_helem_t *hep = (ctf_helem_t *) ptr;
+ ctf_type_id_key_t *k = (ctf_type_id_key_t *) hep->key;
+
+ return htab_hash_pointer ((void *) (uintptr_t) k->ctii_input_num)
+ + 59 * htab_hash_pointer ((void *) (uintptr_t) k->ctii_type);
+}
+
+int
+ctf_hash_eq_type_id_key (const void *a, const void *b)
+{
+ ctf_helem_t *hep_a = (ctf_helem_t *) a;
+ ctf_helem_t *hep_b = (ctf_helem_t *) b;
+ ctf_type_id_key_t *key_a = (ctf_type_id_key_t *) hep_a->key;
+ ctf_type_id_key_t *key_b = (ctf_type_id_key_t *) hep_b->key;
+
+ return (key_a->ctii_input_num == key_b->ctii_input_num)
+ && (key_a->ctii_type == key_b->ctii_type);
+}
/* Hash and eq functions for the dynset. Most of these can just use the
underlying hashtab functions directly. */
return ECTF_NEXT_END;
}
+int
+ctf_dynhash_sort_by_name (const ctf_next_hkv_t *one, const ctf_next_hkv_t *two,
+ void *unused _libctf_unused_)
+{
+ return strcmp ((char *) one->hkv_key, (char *) two->hkv_key);
+}
+
/* Traverse a sorted dynhash, in _next iterator form.
See ctf_dynhash_next for notes on error returns, etc.
}
int
-ctf_hash_insert_type (ctf_hash_t *hp, ctf_file_t *fp, uint32_t type,
+ctf_hash_insert_type (ctf_hash_t *hp, ctf_dict_t *fp, uint32_t type,
uint32_t name)
{
const char *str = ctf_strraw (fp, name);
this new official definition. If the key is not present, then call
ctf_hash_insert_type and hash it in. */
int
-ctf_hash_define_type (ctf_hash_t *hp, ctf_file_t *fp, uint32_t type,
+ctf_hash_define_type (ctf_hash_t *hp, ctf_dict_t *fp, uint32_t type,
uint32_t name)
{
/* This matches the semantics of ctf_hash_insert_type in this
}
ctf_id_t
-ctf_hash_lookup_type (ctf_hash_t *hp, ctf_file_t *fp __attribute__ ((__unused__)),
+ctf_hash_lookup_type (ctf_hash_t *hp, ctf_dict_t *fp __attribute__ ((__unused__)),
const char *key)
{
ctf_helem_t **slot;
slot = ctf_hashtab_lookup ((struct htab *) hp, key, NO_INSERT);
if (slot)
- return (ctf_id_t) ((*slot)->value);
+ return (ctf_id_t) (uintptr_t) ((*slot)->value);
return 0;
}