Range type

/*
 * Operations on 64 bit address ranges.
 * Notes:
 * - Ranges must not wrap around 0, but can include UINT64_MAX.
 */
struct Range {
    /*
     * Do not access members directly, use the functions!
     * A non-empty range has @lob <= @upb.
     * An empty range has @lob == @upb + 1.
     */
    uint64_t lob;        /* inclusive lower bound */
    uint64_t upb;        /* inclusive upper bound */
};
typedef struct Range Range;
┌─────┬─────────┬──────── ── ── ──
│     │         │
└─────┴─────────┴──────── ── ── ──
       ↑       ↑
       lob   upb