-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathRange.cpp
More file actions
62 lines (47 loc) · 1.2 KB
/
Range.cpp
File metadata and controls
62 lines (47 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
* Range.cpp
* Range [lower, upper)
*
=======================================================*/
#include<iostream>
#include "Range.hpp"
#include <algorithm>
using namespace std;
Range::Range() {
m_lower = m_upper = 0;
}
Range::Range(int st, int ed) :
m_lower(st), m_upper(ed) {}
int Range::get_lower() const {
return m_lower;
}
int Range::get_upper() const {
return m_upper;
}
bool Range::equal(int st, int ed) const {
return m_lower == st && m_upper == ed;
}
bool Range::equal(const Range &rg) const {
return m_lower == rg.m_lower && m_upper == rg.m_upper;
}
int Range::size() const{
return std::max(m_upper - m_lower, 0);
}
void Range::display(char const *prefix) const {
printf("Range %s is [%d, %d)\n", prefix, m_lower, m_upper);
}
bool Range::is_inside(const Range &rg) {
return rg.m_lower <= m_lower && m_upper <= rg.m_upper;
}
void Range::shift(int num) {
m_lower += num;
m_upper += num;
}
bool Range::intersection(const Range &u) {
if (m_lower >= u.m_upper || u.m_lower >= m_upper) return false;
return true;
}
Range Range::get_intersection(const Range &u) {
if (!intersection(u)) return Range();
return Range(max(m_lower, u.m_lower), min(m_upper, u.m_upper));
}