๐Ÿ›ฐ๏ธ่ˆชๅคฉไปฟ็œŸ็ฎ—ๆณ•ๅบ“ SpaceAST 0.0.1
่ฝฝๅ…ฅไธญ...
ๆœ็ดขไธญ...
ๆœชๆ‰พๅˆฐ
IntervalList.hpp
ๆต่งˆ่ฏฅๆ–‡ไปถ็š„ๆ–‡ๆกฃ.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "Interval.hpp"
25#include "TimePoint.hpp"
26#include <vector>
27#include <initializer_list>
28
29AST_NAMESPACE_BEGIN
30
31
38class TimeList;
39
58{
59public:
60
61 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
62 // ๅทฅๅŽ‚ๆ–นๆณ•
63 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
64
68 AST_CORE_API
69 static IntervalList FromIntervals(const std::vector<Interval>& intervals);
70
71public:
72
73 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
74 // ๆž„้€ ไธŽ็”Ÿๅ‘ฝๅ‘จๆœŸ
75 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
76
78 IntervalList() = default;
79
81 ~IntervalList() = default;
82
84 IntervalList(const IntervalList&) = default;
85
88
90 IntervalList(IntervalList&&) noexcept = default;
91
93 IntervalList& operator=(IntervalList&&) noexcept = default;
94
97 IntervalList(std::initializer_list<Interval> il)
98 : intervals_(il) {}
99
100 explicit IntervalList(const std::vector<Interval>& intervals)
101 : intervals_(intervals)
102 {}
103
104 explicit IntervalList(std::vector<Interval>&& intervals)
105 : intervals_(std::move(intervals))
106 {}
107
108 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
109 // ๅฎน้‡
110 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
111
113 size_t size() const noexcept { return intervals_.size(); }
114
116 bool empty() const noexcept { return intervals_.empty(); }
117
119 void reserve(size_t n) { intervals_.reserve(n); }
120
122 void clear() { intervals_.clear(); }
123
124 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
125 // ๅ…ƒ็ด ่ฎฟ้—ฎ
126 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
127
130 Interval& operator[](size_t i) { return intervals_[i]; }
131
134 const Interval& operator[](size_t i) const { return intervals_[i]; }
135
139 Interval& at(size_t i) { return intervals_.at(i); }
140
144 const Interval& at(size_t i) const { return intervals_.at(i); }
145
146 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
147 // ่ฟญไปฃๅ™จ
148 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
149
150 using iterator = std::vector<Interval>::iterator;
151 using const_iterator = std::vector<Interval>::const_iterator;
152
153 iterator begin() { return intervals_.begin(); }
154 iterator end() { return intervals_.end(); }
155 const_iterator begin() const { return intervals_.begin(); }
156 const_iterator end() const { return intervals_.end(); }
157
158 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
159 // ไฟฎๆ”น
160 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
161
164 void push_back(const Interval& interval) { intervals_.push_back(interval); }
165
169 void push_back(double start, double stop) { intervals_.push_back({start, stop}); }
170
173 void pop_back() { intervals_.pop_back(); }
174
175 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
176 // ๅบ•ๅฑ‚ๅฎนๅ™จ่ฎฟ้—ฎ
177 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
178
180 std::vector<Interval>& intervals() noexcept { return intervals_; }
181
183 const std::vector<Interval>& intervals() const noexcept { return intervals_; }
184
185 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
186 // ๆŸฅ่ฏข
187 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
188
191 double totalDuration() const
192 {
193 double total = 0.0;
194 for (const auto& iv : intervals_)
195 {
196 double d = iv.duration();
197 total += (d > 0.0) ? d : 0.0;
198 }
199 return total;
200 }
201
205 bool contains(double t) const
206 {
207 for (const auto& iv : intervals_)
208 {
209 if (t >= iv.start_ && t <= iv.stop_)
210 return true;
211 }
212 return false;
213 }
214
215 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
216 // ้›†ๅˆ่ฟ็ฎ—
217 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
218
223 AST_CORE_API
224 IntervalList merged() const;
225
230 AST_CORE_API
231 void mergeInPlace();
232
236 AST_CORE_API
237 IntervalList intersect(const IntervalList& other) const;
238
242 AST_CORE_API
243 IntervalList unite(const IntervalList& other) const;
244
248 AST_CORE_API
249 IntervalList subtract(const IntervalList& other) const;
250
251 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
252 // ไธŽ TimeList ไบ’่ฝฌ
253 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
254
264 AST_CORE_API
265 TimeList discrete(const TimePoint& epoch, double step) const;
266
267private:
268 std::vector<Interval> intervals_;
269};
270
271
275AST_NAMESPACE_END
็ปๅฏนๆ—ถ้—ด็‚น
็›ธๅฏนๆ—ถๆฎตๅˆ—่กจ
ๅฎšไน‰ IntervalList.hpp:58
void push_back(double start, double stop)
่ฟฝๅŠ ไธ€ไธชๅŒบ้—ด
ๅฎšไน‰ IntervalList.hpp:169
IntervalList(const IntervalList &)=default
ๆ‹ท่ดๆž„้€ 
IntervalList(IntervalList &&) noexcept=default
็งปๅŠจๆž„้€ 
IntervalList & operator=(const IntervalList &)=default
ๆ‹ท่ด่ต‹ๅ€ผ
void pop_back()
็งป้™คๆœ€ๅŽไธ€ไธชๅŒบ้—ด
ๅฎšไน‰ IntervalList.hpp:173
Interval & at(size_t i)
่ฎฟ้—ฎ็ฌฌ i ไธชๅŒบ้—ด๏ผˆ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ IntervalList.hpp:139
Interval & operator[](size_t i)
่ฎฟ้—ฎ็ฌฌ i ไธชๅŒบ้—ด๏ผˆๆ— ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ IntervalList.hpp:130
bool empty() const noexcept
ๅˆคๆ–ญๅˆ—่กจๆ˜ฏๅฆไธบ็ฉบ
ๅฎšไน‰ IntervalList.hpp:116
const Interval & operator[](size_t i) const
่ฎฟ้—ฎ็ฌฌ i ไธชๅŒบ้—ด๏ผˆๆ— ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ IntervalList.hpp:134
const std::vector< Interval > & intervals() const noexcept
่Žทๅ–ๅบ•ๅฑ‚ๅŒบ้—ดๅ‘้‡๏ผˆๅช่ฏป๏ผ‰
ๅฎšไน‰ IntervalList.hpp:183
bool contains(double t) const
ๆฃ€ๆŸฅๆ—ถ้—ด็‚น t ๆ˜ฏๅฆ่ฝๅœจไปปไธ€ๅŒบ้—ดๅ†…
ๅฎšไน‰ IntervalList.hpp:205
~IntervalList()=default
ๆžๆž„ๅ‡ฝๆ•ฐ
void clear()
ๆธ…็ฉบๅˆ—่กจ
ๅฎšไน‰ IntervalList.hpp:122
std::vector< Interval > & intervals() noexcept
่Žทๅ–ๅบ•ๅฑ‚ๅŒบ้—ดๅ‘้‡๏ผˆๅฏไฟฎๆ”น๏ผ‰
ๅฎšไน‰ IntervalList.hpp:180
const Interval & at(size_t i) const
่ฎฟ้—ฎ็ฌฌ i ไธชๅŒบ้—ด๏ผˆ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ IntervalList.hpp:144
double totalDuration() const
ๆ€ปๆ—ถ้•ฟ๏ผˆๆ‰€ๆœ‰ๅŒบ้—ด duration ไน‹ๅ’Œ๏ผŒไธ่€ƒ่™‘้‡ๅ ๏ผ›ๅๅ‘ๅŒบ้—ด่ดก็Œฎไธบ 0๏ผ‰
ๅฎšไน‰ IntervalList.hpp:191
size_t size() const noexcept
่ฟ”ๅ›žๅŒบ้—ดๆ•ฐ้‡
ๅฎšไน‰ IntervalList.hpp:113
void reserve(size_t n)
้ข„็•™ๅฎน้‡
ๅฎšไน‰ IntervalList.hpp:119
void push_back(const Interval &interval)
่ฟฝๅŠ ไธ€ไธชๅŒบ้—ด
ๅฎšไน‰ IntervalList.hpp:164
IntervalList()=default
้ป˜่ฎคๆž„้€ ๅ‡ฝๆ•ฐ
็›ธๅฏนๆ—ถ้—ดๅŒบ้—ด
ๅฎšไน‰ Interval.hpp:37
ๆ—ถ้—ด็‚นๅˆ—่กจ
ๅฎšไน‰ TimeList.hpp:49
็ปๅฏนๆ—ถ้—ด็‚น
ๅฎšไน‰ TimePoint.hpp:107