On 8/4/2022 10:34 AM, Derrick Stolee wrote: > On 8/4/2022 9:31 AM, Derrick Stolee wrote: >> On 8/3/2022 2:31 AM, Junio C Hamano wrote: >>> Very nice. The double-dash in the NAMESPACE__COUNT constant somehow >>> looks strange. As we scan through ref_namespace[] array densely, >>> >>> for (i = 0; i < ARRAY_SIZE(ref_namespace); i++) >>> ... >>> >>> without having to use the constant would probably be more in line >>> with the way how the rest of the codebase works. >> >> Ah, I did not know about that trick. Thanks! > > ...except that it doesn't work because the array is declared as > 'extern' so we don't know its size outside of refs.c. > > This motivates the use of NAMESPACE__COUNT (and the double > underscores differentiates the "COUNT" from other namespaces, so > there is no confusion about "COUNT" being a namespace). If there > is another way around this, then I would love to hear it! My current workaround is to define the size of the array in the header file: --- enum ref_namespace { NAMESPACE_HEAD, NAMESPACE_BRANCHES, NAMESPACE_TAGS, NAMESPACE_REMOTE_REFS, NAMESPACE_STASH, NAMESPACE_REPLACE, NAMESPACE_NOTES, NAMESPACE_PREFETCH, NAMESPACE_REWRITTEN, /* Must be last */ NAMESPACE__COUNT }; /* See refs.c for the contents of this array. */ extern struct ref_namespace_info ref_namespaces[NAMESPACE__COUNT]; --- Then ARRAY_SIZE(ref_namespaces) works properly. Thanks, -Stolee