Skip to content
  • Markus Armbruster's avatar
    range: Replace internal representation of Range · 6dd726a2
    Markus Armbruster authored
    
    
    Range represents a range as follows.  Member @start is the inclusive
    lower bound, member @end is the exclusive upper bound.  Zero @end is
    special: if @start is also zero, the range is empty, else @end is to
    be interpreted as 2^64.  No other empty ranges may occur.
    
    The range [0,2^64-1] cannot be represented.  If you try to create it
    with range_set_bounds1(), you get the empty range instead.  If you try
    to create it with range_set_bounds() or range_extend(), assertions
    fail.  Before range_set_bounds() existed, the open-coded creation
    usually got you the empty range instead.  Open deathtrap.
    
    Moreover, the code dealing with the janus-faced @end is too clever by
    half.
    
    Dumb this down to a more pedestrian representation: members @lob and
    @upb are inclusive lower and upper bounds.  The empty range is encoded
    as @lob = 1, @upb = 0.
    
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    6dd726a2