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