๐Ÿ›ฐ๏ธ่ˆชๅคฉไปฟ็œŸ็ฎ—ๆณ•ๅบ“ SpaceAST 0.3.1
่ฝฝๅ…ฅไธญ...
ๆœ็ดขไธญ...
ๆœชๆ‰พๅˆฐ
TimeList.hpp
ๆต่งˆ่ฏฅๆ–‡ไปถ็š„ๆ–‡ๆกฃ.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "TimePoint.hpp"
25#include <iterator> // for std::random_access_iterator_tag
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 void setSeconds(const std::vector<double>& secs) { seconds_ = secs; }
149 void setSeconds(std::vector<double>&& secs) { seconds_ = std::move(secs); }
150
151 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
152 // ๆ—ถ้—ด่ฏญไน‰
153 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
154
158 TimePoint timePoint(size_t i) const
159 {
160 return epoch_.shiftedBySecond(seconds_[i]);
161 }
162
166 TimePoint operator[](size_t i) const { return epoch_.shiftedBySecond(seconds_[i]); }
167
172 TimePoint at(size_t i) const { return epoch_.shiftedBySecond(seconds_.at(i)); }
173
174 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
175 // ่ฟญไปฃๅ™จ
176 // โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
177
182 {
183 public:
184 using iterator_category = std::random_access_iterator_tag;
185 using value_type = TimePoint;
186 using difference_type = std::ptrdiff_t;
187 using pointer = const TimePoint*;
188 using reference = TimePoint; // ๆŒ‰ๅ€ผ่ฟ”ๅ›ž
189
190 const_iterator() = default;
191
192 const_iterator(const double* data, const TimePoint* epoch)
193 : data_(data), epoch_(epoch) {}
194
196 TimePoint operator*() const { return epoch_->shiftedBySecond(*data_); }
197
199 TimePoint operator[](difference_type n) const { return epoch_->shiftedBySecond(data_[n]); }
200
201 const_iterator& operator++() { ++data_; return *this; }
202 const_iterator operator++(int) { auto tmp = *this; ++data_; return tmp; }
203 const_iterator& operator--() { --data_; return *this; }
204 const_iterator operator--(int) { auto tmp = *this; --data_; return tmp; }
205 const_iterator& operator+=(difference_type n) { data_ += n; return *this; }
206 const_iterator& operator-=(difference_type n) { data_ -= n; return *this; }
207
208 const_iterator operator+(difference_type n) const { return {data_ + n, epoch_}; }
209 const_iterator operator-(difference_type n) const { return {data_ - n, epoch_}; }
210 difference_type operator-(const const_iterator& o) const { return data_ - o.data_; }
211
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 bool operator<=(const const_iterator& o) const { return data_ <= o.data_; }
217 bool operator>=(const const_iterator& o) const { return data_ >= o.data_; }
218
219 private:
220 const double* data_ = nullptr;
221 const TimePoint* epoch_ = nullptr;
222 };
223
225 friend const_iterator operator+(const_iterator::difference_type n, const const_iterator& it)
226 {
227 return it + n;
228 }
229
230 using iterator = const_iterator;
231 using value_type = TimePoint;
232 using size_type = size_t;
233 using difference_type = std::ptrdiff_t;
234
235 iterator begin() { return {seconds_.data(), &epoch_}; }
236 iterator end() { return {seconds_.data() + seconds_.size(), &epoch_}; }
237 const_iterator begin() const { return {seconds_.data(), &epoch_}; }
238 const_iterator end() const { return {seconds_.data() + seconds_.size(), &epoch_}; }
239 const_iterator cbegin()const { return begin(); }
240 const_iterator cend() const { return end(); }
241
242private:
243 std::vector<double> seconds_{};
244 TimePoint epoch_{};
245};
246
247
251AST_NAMESPACE_END
็ปๅฏนๆ—ถ้—ด็‚น
ๆ—ถ้—ดๅŒบ้—ด
ๅฎšไน‰ TimeInterval.hpp:64
้šๆœบ่ฎฟ้—ฎๅธธ้‡่ฟญไปฃๅ™จ
ๅฎšไน‰ TimeList.hpp:182
TimePoint operator*() const
่งฃๅผ•็”จ๏ผš่ฎก็ฎ— epoch_->shiftedBySecond(*data_)
ๅฎšไน‰ TimeList.hpp:196
TimePoint operator[](difference_type n) const
ไธ‹ๆ ‡่ฎฟ้—ฎ
ๅฎšไน‰ TimeList.hpp:199
ๆ—ถ้—ด็‚นๅˆ—่กจ
ๅฎšไน‰ TimeList.hpp:49
TimeList(const TimeList &)=default
ๆ‹ท่ดๆž„้€ 
~TimeList()=default
ๆžๆž„ๅ‡ฝๆ•ฐ
TimePoint operator[](size_t i) const
่ฎฟ้—ฎ็ฌฌ i ไธชๆ—ถ้—ด็‚น๏ผˆๆ— ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ TimeList.hpp:166
void setEpoch(const TimePoint &epoch)
่ฎพ็ฝฎๅ‚่€ƒๅކๅ…ƒ
ๅฎšไน‰ TimeList.hpp:140
TimePoint timePoint(size_t i) const
่Žทๅ–็ฌฌ i ไธชๅ…ƒ็ด ๅฏนๅบ”็š„็ปๅฏนๆ—ถ้—ด็‚น
ๅฎšไน‰ TimeList.hpp:158
friend const_iterator operator+(const_iterator::difference_type n, const const_iterator &it)
difference_type + const_iterator๏ผˆ้žๆˆๅ‘˜่ฟ็ฎ—็ฌฆ๏ผ‰
ๅฎšไน‰ TimeList.hpp:225
TimeList(const TimePoint &epoch)
ไปŽๅ‚่€ƒๅކๅ…ƒๆž„้€ ็ฉบๅˆ—่กจ
ๅฎšไน‰ TimeList.hpp:105
TimePoint at(size_t i) const
่ฎฟ้—ฎ็ฌฌ i ไธชๆ—ถ้—ด็‚น๏ผˆ่พน็•Œๆฃ€ๆŸฅ๏ผ‰
ๅฎšไน‰ TimeList.hpp:172
TimeList & operator=(const TimeList &)=default
ๆ‹ท่ด่ต‹ๅ€ผ
TimeList(const TimePoint &epoch, std::vector< double > &&secs)
ไปŽๅ‚่€ƒๅކๅ…ƒๅ’Œ็ง’ๅ็งป้‡ๅˆ—่กจ็งปๅŠจๆž„้€ 
ๅฎšไน‰ TimeList.hpp:100
TimeList(TimeList &&) noexcept=default
็งปๅŠจๆž„้€ 
TimeList()=default
้ป˜่ฎคๆž„้€ ๅ‡ฝๆ•ฐ
็ปๅฏนๆ—ถ้—ด็‚น
ๅฎšไน‰ TimePoint.hpp:108
TimePoint shiftedBySecond(double second) const
่ฎก็ฎ—ๆ—ถ้—ด็‚นๅ็งปๅŽ็š„ๆ–ฐๆ—ถ้—ด็‚น๏ผŒๆŒ‰้ป˜่ฎคๆ—ถ้—ดๅฐบๅบฆ่ฟ›่กŒๆ—ถ้—ดๅ็งป
ๅฎšไน‰ TimePoint.hpp:304