Skip to content

Commit

Permalink
khash: name the structs that khash declares
Browse files Browse the repository at this point in the history
khash.h lets you instantiate custom hash types that map between two
types. These are defined as a struct, as you might expect, and khash
typedef's that to kh_foo_t. But it declares the struct anonymously,
which doesn't give a name to the struct type itself; there is no
"struct kh_foo". This has two small downsides:

  - when using khash, we declare "kh_foo_t *the_foo".  This is
    unlike our usual naming style, which is "struct kh_foo *the_foo".

  - you can't forward-declare a typedef of an unnamed struct type in
    C. So we might do something like this in a header file:

        struct kh_foo;
        struct bar {
                struct kh_foo *the_foo;
        };

    to avoid having to include the header that defines the real
    kh_foo. But that doesn't work with the typedef'd name. Without the
    "struct" keyword, the compiler doesn't know we mean that kh_foo is
    a type.

So let's always give khash structs the name that matches our
conventions ("struct kh_foo" to match "kh_foo_t"). We'll keep doing
the typedef to retain compatibility with existing callers.

Co-authored-by: Jeff King <[email protected]>
Signed-off-by: Jeff King <[email protected]>
Signed-off-by: Elijah Newren <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
2 people authored and gitster committed Jun 21, 2023
1 parent 6723899 commit 8043418
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion khash.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ static inline khint_t __ac_X31_hash_string(const char *s)
static const double __ac_HASH_UPPER = 0.77;

#define __KHASH_TYPE(name, khkey_t, khval_t) \
typedef struct { \
typedef struct kh_##name { \
khint_t n_buckets, size, n_occupied, upper_bound; \
khint32_t *flags; \
khkey_t *keys; \
Expand Down
2 changes: 1 addition & 1 deletion object-store.h
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ struct raw_object_store {
*/
struct object_directory *odb;
struct object_directory **odb_tail;
kh_odb_path_map_t *odb_by_path;
struct kh_odb_path_map *odb_by_path;

int loaded_alternates;

Expand Down

0 comments on commit 8043418

Please sign in to comment.