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. */ 6 static 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. */ 12 static 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. */ 20 static 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