🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
TimePointRange.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "TimePoint.hpp"
25#include <iterator> // for std::input_iterator_tag
26#include <cstddef> // for size_t / ptrdiff_t
27
28AST_NAMESPACE_BEGIN
29
30
41{
42public:
48 TimePointRange(TimePoint start, TimePoint stop, double step, size_t n)
49 : start_(start), stop_(stop), step_(step), n_(n) {}
50
52 {
53 public:
54 using iterator_category = std::input_iterator_tag;
55 using value_type = TimePoint;
56 using difference_type = ptrdiff_t;
57 using pointer = const TimePoint*;
58 using reference = TimePoint; // input iterator:按值返回
59
60 iterator() = default;
61 iterator(const TimePointRange* range, size_t idx)
62 : range_(range), idx_(idx) {}
63
66 {
67 return (idx_ == range_->n_ - 1)
68 ? range_->stop_
69 : range_->start_ + range_->step_ * idx_;
70 }
71
72 iterator& operator++() { ++idx_; return *this; }
73 iterator operator++(int) { auto tmp = *this; ++*this; return tmp; }
74
75 bool operator==(const iterator& other) const { return idx_ == other.idx_; }
76 bool operator!=(const iterator& other) const { return !(*this == other); }
77
78 private:
79 const TimePointRange* range_ = nullptr;
80 size_t idx_ = 0;
81 };
82
83 iterator begin() const { return iterator(this, 0); }
84 iterator end() const { return iterator(this, n_); }
85 size_t size() const { return n_; }
86
87private:
88 TimePoint start_;
89 TimePoint stop_;
90 double step_;
91 size_t n_;
92};
93
94
98AST_NAMESPACE_END
绝对时间点
定义 TimePointRange.hpp:52
reference operator*() const
解引用:除末点按 step 步进,末点返回 stop_
定义 TimePointRange.hpp:65
按步长采样的时间点范围(惰性可迭代)
定义 TimePointRange.hpp:41
TimePointRange(TimePoint start, TimePoint stop, double step, size_t n)
构造时间点采样范围
定义 TimePointRange.hpp:48
绝对时间点
定义 TimePoint.hpp:108