25#include "AstUtil/Logger.hpp"
47AST_CORE_CAPI errc_t
aTimeIntervalFormat(
const TimeInterval& interval, std::string& strStart, std::string& strEnd);
54AST_CORE_CAPI errc_t
aTimeIntervalParse(StringView strStart, StringView strEnd, TimeInterval& interval);
76 : start_(start), stop_(stop) {}
83 : start_(epoch + start), stop_(epoch + stop) {}
116 start_ = epoch + start;
117 stop_ = epoch + stop;
123 start_ = {0, -std::numeric_limits<double>::infinity()};
124 stop_ = {0, +std::numeric_limits<double>::infinity()};
140 std::string strStart, strEnd;
142 return strStart +
" - " + strEnd;
151 errc_t discrete(
const TimePoint& epoch,
double step, std::vector<double>& times)
const;
158 errc_t discrete(
double step, std::vector<TimePoint>& times)
const;
165 errc_t discrete(
double step,
TimeList& times)
const;
167 class DiscreteTimePointRange;
168 class DiscreteEpochSecondRange;
173 DiscreteTimePointRange discrete(
double step)
const;
179 DiscreteEpochSecondRange discrete(
const TimePoint& epoch,
double step)
const;
196 : interval_(interval), step_(step), n_(n) {}
200 using iterator_category = std::input_iterator_tag;
202 using difference_type = ptrdiff_t;
208 : range_(range), idx_(idx), value_() {}
211 if (idx_ == range_->n_ - 1) {
212 value_ = range_->interval_.stop();
214 value_ = range_->interval_.start() + range_->step_ * idx_;
219 iterator& operator++() { ++idx_;
return *
this; }
220 iterator operator++(
int) {
auto tmp = *
this; ++*
this;
return tmp; }
222 bool operator==(
const iterator& other)
const {
return idx_ == other.idx_; }
223 bool operator!=(
const iterator& other)
const {
return !(*
this == other); }
232 iterator end()
const {
return iterator(
this, n_); }
233 size_t size()
const {
return n_; }
236 TimeInterval interval_;
245 : offset_(offset), step_(step), stopOffset_(stopOffset), n_(n) {}
249 using iterator_category = std::input_iterator_tag;
250 using value_type = double;
251 using difference_type = ptrdiff_t;
252 using pointer =
const double*;
253 using reference =
const double&;
257 : range_(range), idx_(idx), value_() {}
259 reference operator*()
const {
260 if (idx_ == range_->n_ - 1) {
261 value_ = range_->stopOffset_;
263 value_ = range_->offset_ + range_->step_ * idx_;
268 iterator& operator++() { ++idx_;
return *
this; }
269 iterator operator++(
int) {
auto tmp = *
this; ++*
this;
return tmp; }
271 bool operator==(
const iterator& other)
const {
return idx_ == other.idx_; }
272 bool operator!=(
const iterator& other)
const {
return !(*
this == other); }
277 mutable double value_{0.0};
281 iterator end()
const {
return iterator(
this, n_); }
282 size_t size()
const {
return n_; }
293 double dur = duration();
294 if (step <= 0.0 || dur <= 0.0) {
297 size_t n =
static_cast<size_t>(std::ceil(dur / step)) + 1;
303 double dur = duration();
304 if (step <= 0.0 || dur <= 0.0) {
307 size_t n =
static_cast<size_t>(std::ceil(dur / step)) + 1;
308 double offset = getStart() - epoch;
309 double stopOffset = getStop() - epoch;
322 aError(
"merge time interval failed, no overlap");
323 return eErrorInvalidParam;
329 setStartStop(mergedStart, mergedStop);
离散化历元秒范围
定义 TimeInterval.hpp:242
离散化时间点范围
定义 TimeInterval.hpp:193
时间区间
定义 TimeInterval.hpp:60
void setInfinite()
设置时间区间为无限时间区间
定义 TimeInterval.hpp:121
double duration() const
时间区间的持续时间(秒)
定义 TimeInterval.hpp:135
TimeInterval(const TimePoint &epoch, double start, double stop)
构造函数
定义 TimeInterval.hpp:82
const TimePoint & getStart() const
时间区间的开始时间点
定义 TimeInterval.hpp:89
void setZero()
设置时间区间为零时间区间
定义 TimeInterval.hpp:128
void setStart(const TimePoint &start)
设置时间区间的开始时间点
定义 TimeInterval.hpp:92
void setStartStop(const TimePoint &epoch, double start, double stop)
设置时间区间的开始时间点和结束时间点
定义 TimeInterval.hpp:115
const TimePoint & stop() const
时间区间的结束时间点
定义 TimeInterval.hpp:95
const TimePoint & start() const
时间区间的开始时间点
定义 TimeInterval.hpp:86
std::string toString() const
将时间区间转换为字符串
定义 TimeInterval.hpp:139
const TimePoint & getStop() const
时间区间的结束时间点
定义 TimeInterval.hpp:98
TimeInterval(const TimePoint &start, const TimePoint &stop)
构造函数
定义 TimeInterval.hpp:75
void setStop(const TimePoint &stop)
设置时间区间的结束时间点
定义 TimeInterval.hpp:101
void setStartStop(const TimePoint &start, const TimePoint &stop)
设置时间区间的开始时间点和结束时间点
定义 TimeInterval.hpp:106
绝对时间点
定义 TimePoint.hpp:107
double durationFrom(const TimePoint &other) const
计算与另一个时间点的时间差(秒数)
定义 TimePoint.hpp:236
errc_t aTimeIntervalFormat(const TimeInterval &interval, std::string &strStart, std::string &strStop)
将时间区间格式化为字符串
定义 TimeInterval.cpp:27
errc_t aTimeIntervalParse(StringView strStart, StringView strStop, TimeInterval &interval)
从字符串解析时间区间
定义 TimeInterval.cpp:37