#ifndef HV_INTERVAL_H #define HV_INTERVAL_H #include "hv/types.h" struct hv_interval { uint64_t base; uint64_t size; }; static inline bool hv_interval_end(struct hv_interval interval, uint64_t *out) { if (interval.size == 0u || out == (uint64_t *)0) { return false; } return !hv_add_overflow_u64(interval.base, interval.size, out); } static inline bool hv_interval_contains(struct hv_interval outer, struct hv_interval inner) { uint64_t outer_end; uint64_t inner_end; if (!hv_interval_end(outer, &outer_end) || !hv_interval_end(inner, &inner_end)) { return false; } return inner.base >= outer.base && inner_end <= outer_end; } #endif