๐Ÿ›ฐ๏ธ่ˆชๅคฉไปฟ็œŸ็ฎ—ๆณ•ๅบ“ SpaceAST 0.0.1
่ฝฝๅ…ฅไธญ...
ๆœ็ดขไธญ...
ๆœชๆ‰พๅˆฐ
TimeList.hpp
ๆต่งˆ่ฏฅๆ–‡ไปถ็š„ๆ–‡ๆกฃ.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "TimePoint.hpp"
25#include <iterator>
26#include <vector>
27
28AST_NAMESPACE_BEGIN
29
30
49{
50public:
51
52 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
53 // ๅทฅๅŽ‚ๆ–นๆณ•
54 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
55
61 AST_CORE_API
62 static TimeList FromInterval(const TimeInterval& interval, const TimePoint& epoch, double step);
63
68 AST_CORE_API
69 static TimeList FromInterval(const TimeInterval& interval, double step);
70
71public:
72
74 TimeList() = default;
75
77 ~TimeList() = default;
78
80 TimeList(const TimeList&) = default;
81
83 TimeList& operator=(const TimeList&) = default;
84
86 TimeList(TimeList&&) noexcept = default;
87
89 TimeList& operator=(TimeList&&) noexcept = default;
90
94 TimeList(const TimePoint& epoch, const std::vector<double>& secs)
95 : seconds_(secs), epoch_(epoch) {}
96
100 TimeList(const TimePoint& epoch, std::vector<double>&& secs)
101 : seconds_(std::move(secs)), epoch_(epoch) {}
102
105 TimeList(const TimePoint& epoch)
106 : epoch_(epoch)
107 {
108 }
109
110
111 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
112 // ๅฎน้‡
113 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
114
115 size_t size() const noexcept { return seconds_.size(); }
116 bool empty() const noexcept { return seconds_.empty(); }
117
118 void resize(size_t n) { seconds_.resize(n); }
119 void reserve(size_t n) { seconds_.reserve(n); }
120 void clear() { seconds_.clear(); }
121
122
123 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
124 // ไฟฎๆ”น
125 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
126
127 void push_back(const TimePoint& tp) { seconds_.push_back(tp - epoch_); }
128 void pop_back() { seconds_.pop_back(); }
129
130 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
131 // ๅ‚่€ƒๅކๅ…ƒ
132 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
133
134 const TimePoint& epoch() const { return epoch_; }
135
140 void setEpoch(const TimePoint& epoch) { epoch_ = epoch; }
141
142 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
143 // ๅบ•ๅฑ‚ๅ‘้‡่ฎฟ้—ฎ
144 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
145
146 std::vector<double>& seconds() noexcept { return seconds_; }
147 const std::vector<double>& seconds() const noexcept { return seconds_; }
148
149 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
150 // ๆ—ถ้—ด่ฏญไน‰
151 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
152
156 TimePoint timePoint(size_t i) const
157 {
158 return epoch_.shiftedBySecond(seconds_[i]);
159 }
160
164 TimePoint operator[](size_t i) const { return epoch_.shiftedBySecond(seconds_[i]); }
165
170 TimePoint at(size_t i) const { return epoch_.shiftedBySecond(seconds_.at(i)); }
171
172 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
173 // ่ฟญไปฃๅ™จ
174 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
175
180 {
181 public:
182 using iterator_category = std::random_access_iterator_tag;
183 using value_type = TimePoint;
184 using difference_type = std::ptrdiff_t;
185 using pointer = const TimePoint*;
186 using reference = TimePoint; // ๆŒ‰ๅ€ผ่ฟ”ๅ›ž
187
188 const_iterator() = default;
189
190 const_iterator(const double* data, const TimePoint* epoch)
191 : data_(data), epoch_(epoch) {}
192
194 TimePoint operator*() const { return epoch_->shiftedBySecond(*data_); }
195
197 TimePoint operator[](difference_type n) const { return epoch_->shiftedBySecond(data_[n]); }
198
199 const_iterator& operator++() { ++data_; return *this; }
200 const_iterator operator++(int) { auto tmp = *this; ++data_; return tmp; }
201 const_iterator& operator--() { --data_; return *this; }
202 const_iterator operator--(int) { auto tmp = *this; --data_; return tmp; }
203 const_iterator& operator+=(difference_type n) { data_ += n; return *this; }
204 const_iterator& operator-=(difference_type n) { data_ -= n; return *this; }
205
206 const_iterator operator+(difference_type n) const { return {data_ + n, epoch_}; }
207 const_iterator operator-(difference_type n) const { return {data_ - n, epoch_}; }
208 difference_type operator-(const const_iterator& o) const { return data_ - o.data_; }
209
210 bool operator==(const const_iterator& o) const { return data_ == o.data_; }
211 bool operator!=(const const_iterator& o) const { return data_ != o.data_; }
212 bool operator< (const const_iterator& o) const { return data_ < o.data_; }
213 bool operator> (const const_iterator& o) const { return data_ > o.data_; }
214 bool operator<=(const const_iterator& o) const { return data_ <= o.data_; }
215 bool operator>=(const const_iterator& o) const { return data_ >= o.data_; }
216
217 private:
218 const double* data_ = nullptr;
219 const TimePoint* epoch_ = nullptr;
220 };
221
223 friend const_iterator operator+(typename const_iterator::difference_type n, const const_iterator& it)
224 {
225 return it + n;
226 }
227
228 using iterator = const_iterator;
229 using value_type = TimePoint;
230 using size_type = size_t;
231 using difference_type = std::ptrdiff_t;
232
233 iterator begin() { return {seconds_.data(), &epoch_}; }
234 iterator end() { return {seconds_.data() + seconds_.size(), &epoch_}; }
235 const_iterator begin() const { return {seconds_.data(), &epoch_}; }
236 const_iterator end() const { return {seconds_.data() + seconds_.size(), &epoch_}; }
237 const_iterator cbegin()const { return begin(); }
238 const_iterator cend() const { return end(); }
239
240private:
241 std::vector<double> seconds_;
242 TimePoint epoch_{};
243};
244
245
249AST_NAMESPACE_END
็ปๅฏนๆ—ถ้—ด็‚น
ๆ—ถ้—ดๅŒบ้—ด
ๅฎšไน‰ TimeInterval.hpp:60
้šๆœบ่ฎฟ้—ฎๅธธ้‡่ฟญไปฃๅ™จ
ๅฎšไน‰ TimeList.hpp:180
TimePoint operator*() const
่งฃๅผ•็”จ๏ผš่ฎก็ฎ— epoch_->shiftedBySecond(*data_)
ๅฎšไน‰ TimeList.hpp:194
TimePoint operator[](difference_type n) const
ไธ‹ๆ ‡่ฎฟ้—ฎ
ๅฎšไน‰ TimeList.hpp:197
ๆ—ถ้—ด็‚นๅˆ—่กจ
ๅฎšไน‰ TimeList.hpp:49
TimeList(const TimeList &)=default
ๆ‹ท่ดๆž„้€ 
~TimeList()=default
ๆžๆž„ๅ‡ฝๆ•ฐ
TimePoint operator[](size_t i) const
่ฎฟ้—ฎ็ฌฌ i ไธชๆ—ถ้—ด็‚น๏ผˆๆ— ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ TimeList.hpp:164
void setEpoch(const TimePoint &epoch)
่ฎพ็ฝฎๅ‚่€ƒๅކๅ…ƒ
ๅฎšไน‰ TimeList.hpp:140
TimePoint timePoint(size_t i) const
่Žทๅ–็ฌฌ i ไธชๅ…ƒ็ด ๅฏนๅบ”็š„็ปๅฏนๆ—ถ้—ด็‚น
ๅฎšไน‰ TimeList.hpp:156
TimeList(const TimePoint &epoch)
ไปŽๅ‚่€ƒๅކๅ…ƒๆž„้€ ็ฉบๅˆ—่กจ
ๅฎšไน‰ TimeList.hpp:105
TimePoint at(size_t i) const
่ฎฟ้—ฎ็ฌฌ i ไธชๆ—ถ้—ด็‚น๏ผˆ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ TimeList.hpp:170
TimeList & operator=(const TimeList &)=default
ๆ‹ท่ด่ต‹ๅ€ผ
TimeList(const TimePoint &epoch, std::vector< double > &&secs)
ไปŽๅ‚่€ƒๅކๅ…ƒๅ’Œ็ง’ๅ็งป้‡ๅˆ—่กจ็งปๅŠจๆž„้€ 
ๅฎšไน‰ TimeList.hpp:100
TimeList(TimeList &&) noexcept=default
็งปๅŠจๆž„้€ 
TimeList()=default
้ป˜่ฎคๆž„้€ ๅ‡ฝๆ•ฐ
friend const_iterator operator+(typename const_iterator::difference_type n, const const_iterator &it)
difference_type + const_iterator๏ผˆ้žๆˆๅ‘˜่ฟ็ฎ—็ฌฆ๏ผ‰
ๅฎšไน‰ TimeList.hpp:223
็ปๅฏนๆ—ถ้—ด็‚น
ๅฎšไน‰ TimePoint.hpp:107
TimePoint shiftedBySecond(double second) const
่ฎก็ฎ—ๆ—ถ้—ด็‚นๅ็งปๅŽ็š„ๆ–ฐๆ—ถ้—ด็‚น๏ผŒๆŒ‰้ป˜่ฎคๆ—ถ้—ดๅฐบๅบฆ่ฟ›่กŒๆ—ถ้—ดๅ็งป
ๅฎšไน‰ TimePoint.hpp:296