MemRegion MemRegion::intersection(const MemRegion mr2) const { MemRegion res; HeapWord* res_start = MAX2(start(), mr2.start()); HeapWord* res_end = MIN2(end(), mr2.end()); if (res_start < res_end) { res.set_start(res_start); res.set_end(res_end); } return res; }
MemRegion MemRegion::_union(const MemRegion mr2) const { // If one region is empty, return the other if (is_empty()) return mr2; if (mr2.is_empty()) return MemRegion(start(), end()); // Otherwise, regions must overlap or be adjacent assert(((start() <= mr2.start()) && (end() >= mr2.start())) || ((mr2.start() <= start()) && (mr2.end() >= start())), "non-adjacent or overlapping regions"); MemRegion res; HeapWord* res_start = MIN2(start(), mr2.start()); HeapWord* res_end = MAX2(end(), mr2.end()); res.set_start(res_start); res.set_end(res_end); return res; }