On 03/12/2015 01:26 AM, Junio C Hamano wrote: > "brian m. carlson" <sandals@xxxxxxxxxxxxxxxxxxxx> writes: > >> Michael Haggerty recommended that I call the structure element sha1 >> instead of oid in case we want to turn this into a union if we decide to >> go the additional hash route. > > I'd advise against it. > > As I wrote in $gmane/265337 in response to Michael: > > > 4. We continue to support working with SHA-1s declared to be (unsigned > > char *) in some performance-critical code, even as we migrate most other > > code to using SHA-1s embedded within a (struct object_id). This will > > cost some duplication of code. To accept this approach, we would need an > > idea of *how much* code duplication would be needed. E.g., how many > > functions will need both (unsigned char *) versions and (struct > > object_id *) versions? > > ... > > I do not know what kind of code duplication you are worried about, > though. If a callee needs "unsigned char *", the caller that has a > "struct object_id *o" should pass o->hash to the callee. > > And that would break the abstraction effort if you start calling the > field with a name that is specific to the underlying hash function. > The caller has to change o->sha1 to o->sha256 instead of keeping > that as o->oid and letting the callee handle the implementation > details when calling > > if (!hashcmp(o1->oid, o2->oid)) > ; /* they are the same */ > else > ; /* they are different */ > [...] Hmm, I guess you imagine that we might sometimes pack SHA-1s, sometimes SHA-256s (or whatever) in the "oid" field, which would be dimensioned large enough for either one (with, say, SHA-1s padded with zeros). I was imagining that this would evolve into a union (or maybe struct) of different hash types, like struct object_id { unsigned char hash_type; union { unsigned char sha1[GIT_SHA1_RAWSZ]; unsigned char sha256[GIT_SHA256_RAWSZ]; } hash; }; BTW in either case, any hopes of mapping object_id objects directly on top of buffer memory would disappear. Michael -- Michael Haggerty mhagger@xxxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html