range.h 867 B

1234567891011121314151617181920212223242526272829
  1. #ifndef QEMU_RANGE_H
  2. #define QEMU_RANGE_H
  3. /* Get last byte of a range from offset + length.
  4. * Undefined for ranges that wrap around 0. */
  5. static inline uint64_t range_get_last(uint64_t offset, uint64_t len)
  6. {
  7. return offset + len - 1;
  8. }
  9. /* Check whether a given range covers a given byte. */
  10. static inline int range_covers_byte(uint64_t offset, uint64_t len,
  11. uint64_t byte)
  12. {
  13. return offset <= byte && byte <= range_get_last(offset, len);
  14. }
  15. /* Check whether 2 given ranges overlap.
  16. * Undefined if ranges that wrap around 0. */
  17. static inline int ranges_overlap(uint64_t first1, uint64_t len1,
  18. uint64_t first2, uint64_t len2)
  19. {
  20. uint64_t last1 = range_get_last(first1, len1);
  21. uint64_t last2 = range_get_last(first2, len2);
  22. return !(last2 < first1 || last1 < first2);
  23. }
  24. #endif