[PATCH 5/5] diff_filespec: use only 2 bits for is_binary flag
- From
Jeff King <peff@peff.net>
- Date
- Jan 17, 2014, 01:25 UTC
- Message-ID
- <20140117012540.GE7249@sigill.intra.peff.net>
- In-Reply-To
- <20140117011844.GA6870@sigill.intra.peff.net>
The is_binary flag needs only three values: -1, 0, and 1. However, we use a whole 32-bit int for it on most systems (both 32- and 64- bit).
Instead, we can mark it to use only 2 bits. On 32-bit systems, this lets it end up as part of the bitfield above (saving 4 bytes). On 64-bit systems, we don't see any change (because the savings end up as padding), but it does leave room for another "free" 32-bit value to be added later.
Signed-off-by: Jeff King <peff@peff.net> --- I don't typically use bit-sized integers like this for anything but unsigned integers to be used as flags. My understanding is that using signed integers is explicitly permitted by the standard. I don't know if we're guaranteed a 2's-complement representation, but I can't imagine an implementation providing any range besides -2..1, which is what we need.
diffcore.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/diffcore.h b/diffcore.h index d911bf0..79de8cf 100644 --- a/diffcore.h +++ b/diffcore.h @@ -46,7 +46,7 @@ struct diff_filespec { unsigned is_stdin : 1; unsigned has_more_entries : 1; /* only appear in combined diff */ /* data should be considered "binary"; -1 means "don't know yet" */ - int is_binary; + int is_binary : 2; struct userdiff_driver *driver; };
-- 1.8.5.2.500.g8060133