• antirez's avatar
    More consistent BITPOS behavior with bit=0 and ranges. · 0e31eaa2
    antirez authored
    With the new behavior it is possible to specify just the start in the
    range (the end will be assumed to be the first byte), or it is possible
    to specify both start and end.
    
    This is useful to change the behavior of the command when looking for
    zeros inside a string.
    
    1) If the user specifies both start and end, and no 0 is found inside
       the range, the command returns -1.
    
    2) If instead no range is specified, or just the start is given, even
       if in the actual string no 0 bit is found, the command returns the
       first bit on the right after the end of the string.
    
    So for example if the string stored at key foo is "\xff\xff":
    
        BITPOS foo (returns 16)
        BITPOS foo 0 -1 (returns -1)
        BITPOS foo 0 (returns 16)
    
    The idea is that when no end is given the user is just looking for the
    first bit that is zero and can be set to 1 with SETBIT, as it is
    "available". Instead when a specific range is given, we just look for a
    zero within the boundaries of the range.
    0e31eaa2
bitops.c 21.5 KB