42
43 class MemRegion {
44 friend class VMStructs;
45 private:
46 HeapWord* _start;
47 size_t _word_size;
48
49 public:
50 MemRegion() : _start(NULL), _word_size(0) {};
51 MemRegion(HeapWord* start, size_t word_size) :
52 _start(start), _word_size(word_size) {};
53 MemRegion(HeapWord* start, HeapWord* end) :
54 _start(start), _word_size(pointer_delta(end, start)) {
55 assert(end >= start, "incorrect constructor arguments");
56 }
57 MemRegion(MetaWord* start, MetaWord* end) :
58 _start((HeapWord*)start), _word_size(pointer_delta(end, start)) {
59 assert(end >= start, "incorrect constructor arguments");
60 }
61
62 MemRegion(const MemRegion& mr): _start(mr._start), _word_size(mr._word_size) {}
63
64 MemRegion intersection(const MemRegion mr2) const;
65 // regions must overlap or be adjacent
66 MemRegion _union(const MemRegion mr2) const;
67 // minus will fail a guarantee if mr2 is interior to this,
68 // since there's no way to return 2 disjoint regions.
69 MemRegion minus(const MemRegion mr2) const;
70
71 HeapWord* start() const { return _start; }
72 HeapWord* end() const { return _start + _word_size; }
73 HeapWord* last() const { return _start + _word_size - 1; }
74
75 void set_start(HeapWord* start) { _start = start; }
76 void set_end(HeapWord* end) { _word_size = pointer_delta(end, _start); }
77 void set_word_size(size_t word_size) {
78 _word_size = word_size;
79 }
80
81 bool contains(const MemRegion mr2) const {
82 return _start <= mr2._start && end() >= mr2.end();
83 }
|
42
43 class MemRegion {
44 friend class VMStructs;
45 private:
46 HeapWord* _start;
47 size_t _word_size;
48
49 public:
50 MemRegion() : _start(NULL), _word_size(0) {};
51 MemRegion(HeapWord* start, size_t word_size) :
52 _start(start), _word_size(word_size) {};
53 MemRegion(HeapWord* start, HeapWord* end) :
54 _start(start), _word_size(pointer_delta(end, start)) {
55 assert(end >= start, "incorrect constructor arguments");
56 }
57 MemRegion(MetaWord* start, MetaWord* end) :
58 _start((HeapWord*)start), _word_size(pointer_delta(end, start)) {
59 assert(end >= start, "incorrect constructor arguments");
60 }
61
62 MemRegion intersection(const MemRegion mr2) const;
63 // regions must overlap or be adjacent
64 MemRegion _union(const MemRegion mr2) const;
65 // minus will fail a guarantee if mr2 is interior to this,
66 // since there's no way to return 2 disjoint regions.
67 MemRegion minus(const MemRegion mr2) const;
68
69 HeapWord* start() const { return _start; }
70 HeapWord* end() const { return _start + _word_size; }
71 HeapWord* last() const { return _start + _word_size - 1; }
72
73 void set_start(HeapWord* start) { _start = start; }
74 void set_end(HeapWord* end) { _word_size = pointer_delta(end, _start); }
75 void set_word_size(size_t word_size) {
76 _word_size = word_size;
77 }
78
79 bool contains(const MemRegion mr2) const {
80 return _start <= mr2._start && end() >= mr2.end();
81 }
|