git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 6/6] Document some functions defined in object.c

From
Nicolas Pitre <nico@fluxnic.net>
Date
Feb 21, 2014, 17:33 UTC
Message-ID
<alpine.LFD.2.11.1402211222270.17677@knanqh.ubzr>
In-Reply-To
<1393000327-11402-7-git-send-email-mhagger@alum.mit.edu>
On Fri, 21 Feb 2014, Michael Haggerty wrote:
> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Minor nits below.
Show 19 quoted lines
> ---
>  object.c | 23 ++++++++++++++++++++++-
>  object.h |  7 +++++++
>  2 files changed, 29 insertions(+), 1 deletion(-)
> 
> diff --git a/object.c b/object.c
> index 584f7ac..c34e225 100644
> --- a/object.c
> +++ b/object.c
> @@ -43,14 +43,26 @@ int type_from_string(const char *str)
>  	die("invalid object type \"%s\"", str);
>  }
>  
> +/*
> + * Return a numerical hash value between 0 and n-1 for the object with
> + * the specified sha1.  n must be a power of 2.
> + *
> + * Since the sha1 is essentially random, we just take the required
> + * bits from the first sizeof(unsigned int) bytes of sha1.

This might be improved a little. The only reason for the sizeof() is actually to copy those bits into a properly aligned integer. Some architectures have alignment restrictions that incure a significant cost when integer operations are performed on unaligned data whereas sha1 pointers don't have any particular alignment requirements. Once upon a time this used to simply be:

	return *(unsigned int *)sha1 & (n - 1);
The memcpy is there only to avoid unaligned accesses.
Show 9 quoted lines
> + */
>  static unsigned int hash_obj(const unsigned char *sha1, unsigned int n)
>  {
>  	unsigned int hash;
> +
>  	memcpy(&hash, sha1, sizeof(unsigned int));
> -	/* Assumes power-of-2 hash sizes in grow_object_hash */
>  	return hash & (n - 1);
>  }
Other than that...
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
Show 54 quoted lines
>  
> +/*
> + * Insert obj into the hash table hash, which has length size (which
> + * must be a power of 2).  On collisions, simply overflow to the next
> + * empty bucket.
> + */
>  static void insert_obj_hash(struct object *obj, struct object **hash, unsigned int size)
>  {
>  	unsigned int j = hash_obj(obj->sha1, size);
> @@ -63,6 +75,10 @@ static void insert_obj_hash(struct object *obj, struct object **hash, unsigned i
>  	hash[j] = obj;
>  }
>  
> +/*
> + * Look up the record for the given sha1 in the hash map stored in
> + * obj_hash.  Return NULL if it was not found.
> + */
>  struct object *lookup_object(const unsigned char *sha1)
>  {
>  	unsigned int i, first;
> @@ -92,6 +108,11 @@ struct object *lookup_object(const unsigned char *sha1)
>  	return obj;
>  }
>  
> +/*
> + * Increase the size of the hash map stored in obj_hash to the next
> + * power of 2 (but at least 32).  Copy the existing values to the new
> + * hash map.
> + */
>  static void grow_object_hash(void)
>  {
>  	int i;
> diff --git a/object.h b/object.h
> index dc5df8c..732bf4d 100644
> --- a/object.h
> +++ b/object.h
> @@ -42,7 +42,14 @@ struct object {
>  extern const char *typename(unsigned int type);
>  extern int type_from_string(const char *str);
>  
> +/*
> + * Return the current number of buckets in the object hashmap.
> + */
>  extern unsigned int get_max_object_index(void);
> +
> +/*
> + * Return the object from the specified bucket in the object hashmap.
> + */
>  extern struct object *get_indexed_object(unsigned int);
>  
>  /*
> -- 
> 1.8.5.3
> 
Previous: Michael HaggertyNext: Michael Haggerty
Message 20 of 23 in “Add a bunch of docstrings and make a few minor cleanups”
  1. 0/6 Add a bunch of docstrings and make a few minor cleanupsMichael Haggerty, Feb 21, 2014
  2. 1/6 Add docstrings for lookup_replace_object() and do_lookup_replace_object()Michael Haggerty, Feb 21, 2014
  3. Junio C HamanoFeb 21, 2014
  4. Michael HaggertyFeb 24, 2014
  5. Christian CouderFeb 24, 2014
  6. Michael HaggertyFeb 24, 2014
  7. Junio C HamanoFeb 24, 2014
  8. 2/6 replace_object: use struct members instead of an arrayMichael Haggerty, Feb 21, 2014
  9. Junio C HamanoFeb 21, 2014
  10. 3/6 find_pack_entry(): document last_found_packMichael Haggerty, Feb 21, 2014
  11. Nicolas PitreFeb 21, 2014
  12. 4/6 sha1_file_name(): declare to return a const stringMichael Haggerty, Feb 21, 2014
  13. 5/6 Document a bunch of functions defined in sha1_file.cMichael Haggerty, Feb 21, 2014
  14. Nicolas PitreFeb 21, 2014
  15. Jakub NarębskiFeb 24, 2014
  16. Michael HaggertyFeb 24, 2014
  17. Jonathan NiederFeb 24, 2014
  18. Michael HaggertyFeb 25, 2014
  19. 6/6 Document some functions defined in object.cMichael Haggerty, Feb 21, 2014
  20. Nicolas PitreFeb 21, 2014
  21. Michael HaggertyFeb 24, 2014
  22. Junio C HamanoFeb 24, 2014
  23. Junio C HamanoFeb 24, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.