Sometimes we need to pass ranges around, add a handy structure for this purpose.
Signed-off-by: Michael S. Tsirkin mst@redhat.com --- include/qemu/range.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/include/qemu/range.h b/include/qemu/range.h index 3502372..4bcd346 100644 --- a/include/qemu/range.h +++ b/include/qemu/range.h @@ -1,6 +1,28 @@ #ifndef QEMU_RANGE_H #define QEMU_RANGE_H
+#include <inttypes.h> + +/* + * Operations on 64 address ranges. + * Notes: + * - ranges must not wrap around 0, but can include the last byte ~0x0LL. + * - this can not represent a full 0 to ~0x0LL range. + */ + +/* A structure representing a range of addresses. */ +struct Range { + uint64_t begin; /* First byte of the range, or 0 if empty. */ + uint64_t end; /* 1 + the last byte. 0 if range empty or ends at ~0x0LL. */ +}; +typedef struct Range Range; + +/* verify that range is not empty and does not overlap */ +static inline bool range_valid(struct Range *range) +{ + return range->begin + 1 <= range->end; +} + /* Get last byte of a range from offset + length. * Undefined for ranges that wrap around 0. */ static inline uint64_t range_get_last(uint64_t offset, uint64_t len)