* [PATCH] hash: Remove useless init_hash()
@ 2010-07-27 5:36 Stephen Boyd
2010-07-27 10:30 ` Jakub Narebski
2010-07-27 15:55 ` Linus Torvalds
0 siblings, 2 replies; 7+ messages in thread
From: Stephen Boyd @ 2010-07-27 5:36 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
init_hash() is essentially a memset() so just use that.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
---
Documentation/technical/api-hash.txt | 4 ----
diffcore-rename.c | 2 +-
hash.h | 7 -------
3 files changed, 1 insertions(+), 12 deletions(-)
diff --git a/Documentation/technical/api-hash.txt b/Documentation/technical/api-hash.txt
index e5061e0..7cf64ec 100644
--- a/Documentation/technical/api-hash.txt
+++ b/Documentation/technical/api-hash.txt
@@ -23,10 +23,6 @@ Data Structures
Functions
---------
-`init_hash`::
-
- Initialize the hash table.
-
`free_hash`::
Release memory associated with the hash table.
diff --git a/diffcore-rename.c b/diffcore-rename.c
index df41be5..b355520 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -382,7 +382,7 @@ static int find_exact_renames(void)
int i;
struct hash_table file_table;
- init_hash(&file_table);
+ memset(&file_table, 0, sizeof(file_table));
for (i = 0; i < rename_src_nr; i++)
insert_file_table(&file_table, -1, i, rename_src[i].one);
diff --git a/hash.h b/hash.h
index 69e33a4..418be24 100644
--- a/hash.h
+++ b/hash.h
@@ -33,11 +33,4 @@ extern void **insert_hash(unsigned int hash, void *ptr, struct hash_table *table
extern int for_each_hash(const struct hash_table *table, int (*fn)(void *));
extern void free_hash(struct hash_table *table);
-static inline void init_hash(struct hash_table *table)
-{
- table->size = 0;
- table->nr = 0;
- table->array = NULL;
-}
-
#endif
--
1.7.2.19.g9a302
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] hash: Remove useless init_hash()
2010-07-27 5:36 [PATCH] hash: Remove useless init_hash() Stephen Boyd
@ 2010-07-27 10:30 ` Jakub Narebski
2010-07-27 10:36 ` Ævar Arnfjörð Bjarmason
2010-07-27 15:55 ` Linus Torvalds
1 sibling, 1 reply; 7+ messages in thread
From: Jakub Narebski @ 2010-07-27 10:30 UTC (permalink / raw)
To: Stephen Boyd; +Cc: git, Junio C Hamano
Stephen Boyd <bebarino@gmail.com> writes:
> init_hash() is essentially a memset() so just use that.
>
> Signed-off-by: Stephen Boyd <bebarino@gmail.com>
[...]
Encapsulation is good.
> diff --git a/diffcore-rename.c b/diffcore-rename.c
> index df41be5..b355520 100644
> --- a/diffcore-rename.c
> +++ b/diffcore-rename.c
> @@ -382,7 +382,7 @@ static int find_exact_renames(void)
> int i;
> struct hash_table file_table;
>
> - init_hash(&file_table);
> + memset(&file_table, 0, sizeof(file_table));
This is IMHO slightly less readable, and doesn't protect against
changes in implementation.
> for (i = 0; i < rename_src_nr; i++)
> insert_file_table(&file_table, -1, i, rename_src[i].one);
>
> diff --git a/hash.h b/hash.h
> index 69e33a4..418be24 100644
> --- a/hash.h
> +++ b/hash.h
> @@ -33,11 +33,4 @@ extern void **insert_hash(unsigned int hash, void *ptr, struct hash_table *table
> extern int for_each_hash(const struct hash_table *table, int (*fn)(void *));
> extern void free_hash(struct hash_table *table);
>
> -static inline void init_hash(struct hash_table *table)
> -{
> - table->size = 0;
> - table->nr = 0;
> - table->array = NULL;
> -}
*This* could be replaced by memset.
> -
> #endif
> --
> 1.7.2.19.g9a302
>
--
Jakub Narebski
Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] hash: Remove useless init_hash()
2010-07-27 10:30 ` Jakub Narebski
@ 2010-07-27 10:36 ` Ævar Arnfjörð Bjarmason
2010-07-27 19:49 ` Jeff King
0 siblings, 1 reply; 7+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2010-07-27 10:36 UTC (permalink / raw)
To: Jakub Narebski; +Cc: Stephen Boyd, git, Junio C Hamano, Linus Torvalds
On Tue, Jul 27, 2010 at 10:30, Jakub Narebski <jnareb@gmail.com> wrote:
CC-ing Linus since he wrote it (per Documentation/SubmittingPatches).
> Stephen Boyd <bebarino@gmail.com> writes:
>
>> init_hash() is essentially a memset() so just use that.
>>
>> Signed-off-by: Stephen Boyd <bebarino@gmail.com>
> [...]
>
> Encapsulation is good.
>
> [..]
>
> This is IMHO slightly less readable, and doesn't protect against
> changes in implementation.
Agreed.
>> for (i = 0; i < rename_src_nr; i++)
>> insert_file_table(&file_table, -1, i, rename_src[i].one);
>>
>> diff --git a/hash.h b/hash.h
>> index 69e33a4..418be24 100644
>> --- a/hash.h
>> +++ b/hash.h
>> @@ -33,11 +33,4 @@ extern void **insert_hash(unsigned int hash, void *ptr, struct hash_table *table
>> extern int for_each_hash(const struct hash_table *table, int (*fn)(void *));
>> extern void free_hash(struct hash_table *table);
>>
>> -static inline void init_hash(struct hash_table *table)
>> -{
>> - table->size = 0;
>> - table->nr = 0;
>> - table->array = NULL;
>> -}
>
> *This* could be replaced by memset.
No it couldn't? The second argument to memset is just an int, so
setting the memory area to 0 isn't portable to systems where the
representation of NULL isn't "0".
(It's early so I may be misremembering my C..)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] hash: Remove useless init_hash()
2010-07-27 10:36 ` Ævar Arnfjörð Bjarmason
@ 2010-07-27 19:49 ` Jeff King
2010-07-27 19:58 ` Ævar Arnfjörð Bjarmason
0 siblings, 1 reply; 7+ messages in thread
From: Jeff King @ 2010-07-27 19:49 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason
Cc: Jakub Narebski, Stephen Boyd, git, Junio C Hamano, Linus Torvalds
On Tue, Jul 27, 2010 at 10:36:09AM +0000, Ævar Arnfjörð Bjarmason wrote:
> >> -static inline void init_hash(struct hash_table *table)
> >> -{
> >> - table->size = 0;
> >> - table->nr = 0;
> >> - table->array = NULL;
> >> -}
> >
> > *This* could be replaced by memset.
>
> No it couldn't? The second argument to memset is just an int, so
> setting the memory area to 0 isn't portable to systems where the
> representation of NULL isn't "0".
>
> (It's early so I may be misremembering my C..)
You're remembering your C correctly. It isn't portable, but it is so
unlikely on modern machines that we simply don't care (and you will see
memsets zero-ing pointers like this all through the git code, so this is
certainly not introducing anything new).
That being said, I agree with the comments that removing init_hash
actually makes the code _less_ readable. You could just replace these
three lines with a memset, but why? It's just code churn.
-Peff
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] hash: Remove useless init_hash()
2010-07-27 19:49 ` Jeff King
@ 2010-07-27 19:58 ` Ævar Arnfjörð Bjarmason
2010-07-28 7:33 ` Stephen Boyd
0 siblings, 1 reply; 7+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2010-07-27 19:58 UTC (permalink / raw)
To: Jeff King
Cc: Jakub Narebski, Stephen Boyd, git, Junio C Hamano, Linus Torvalds
On Tue, Jul 27, 2010 at 19:49, Jeff King <peff@peff.net> wrote:
> On Tue, Jul 27, 2010 at 10:36:09AM +0000, Ævar Arnfjörð Bjarmason wrote:
>
>> >> -static inline void init_hash(struct hash_table *table)
>> >> -{
>> >> - table->size = 0;
>> >> - table->nr = 0;
>> >> - table->array = NULL;
>> >> -}
>> >
>> > *This* could be replaced by memset.
>>
>> No it couldn't? The second argument to memset is just an int, so
>> setting the memory area to 0 isn't portable to systems where the
>> representation of NULL isn't "0".
>>
>> (It's early so I may be misremembering my C..)
>
> You're remembering your C correctly. It isn't portable, but it is so
> unlikely on modern machines that we simply don't care (and you will see
> memsets zero-ing pointers like this all through the git code, so this is
> certainly not introducing anything new).
Thanks for the confirmation. I was aware that NULL != 0 only occured
on long-dead architechtures, but I suspected that some compiler out
there would whine if it could statically determine that you were
reading in a memzero'd area and using it as NULL. Evidently not, or at
least nobody's complained.
> That being said, I agree with the comments that removing init_hash
> actually makes the code _less_ readable. You could just replace these
> three lines with a memset, but why? It's just code churn.
Yeah, and for the record it also missed this part in hash.c:
void free_hash(struct hash_table *table)
{
free(table->array);
table->array = NULL;
table->size = 0;
table->nr = 0;
}
Have fun everyone :)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] hash: Remove useless init_hash()
2010-07-27 19:58 ` Ævar Arnfjörð Bjarmason
@ 2010-07-28 7:33 ` Stephen Boyd
0 siblings, 0 replies; 7+ messages in thread
From: Stephen Boyd @ 2010-07-28 7:33 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason
Cc: Jeff King, Jakub Narebski, git, Junio C Hamano, Linus Torvalds
On 07/27/2010 12:58 PM, Ævar Arnfjörð Bjarmason wrote:
>
>> That being said, I agree with the comments that removing init_hash
>> actually makes the code _less_ readable. You could just replace these
>> three lines with a memset, but why? It's just code churn.
> Yeah, and for the record it also missed this part in hash.c:
>
> void free_hash(struct hash_table *table)
> {
> free(table->array);
> table->array = NULL;
> table->size = 0;
> table->nr = 0;
> }
>
> Have fun everyone :)
Ok, seems like nobody thinks this is a good idea so I'm fine with dropping it. The minimal savings (if at all) doesn't seem worth the code churn. One less patch in the queue ;-)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] hash: Remove useless init_hash()
2010-07-27 5:36 [PATCH] hash: Remove useless init_hash() Stephen Boyd
2010-07-27 10:30 ` Jakub Narebski
@ 2010-07-27 15:55 ` Linus Torvalds
1 sibling, 0 replies; 7+ messages in thread
From: Linus Torvalds @ 2010-07-27 15:55 UTC (permalink / raw)
To: Stephen Boyd; +Cc: git, Junio C Hamano
On Mon, Jul 26, 2010 at 10:36 PM, Stephen Boyd <bebarino@gmail.com> wrote:
>
> init_hash() is essentially a memset() so just use that.
I disagree.
Yes, technically right now the initialization just zeroes out all the
fields, and memset() does the same. But there is no advantage to using
memset(), since init_hash() will create the same or better code, and
using init_hash() is way more readable.
Also, it's not at all the case that init_hash() is always going to be
a memset(). Imagine a threaded hash-table with a lock associated with
it or something. Now, admittedly that's not necessarily something we'd
ever do in git, but I still think it's simply a good idea to have a
clear "initialize this" routine, rather than depending on the fact
that zeroing it out is sufficient.
Linus
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-07-28 7:34 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-27 5:36 [PATCH] hash: Remove useless init_hash() Stephen Boyd
2010-07-27 10:30 ` Jakub Narebski
2010-07-27 10:36 ` Ævar Arnfjörð Bjarmason
2010-07-27 19:49 ` Jeff King
2010-07-27 19:58 ` Ævar Arnfjörð Bjarmason
2010-07-28 7:33 ` Stephen Boyd
2010-07-27 15:55 ` Linus Torvalds
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).