Skip to content

Commit 9590119

Browse files
authored
Merge pull request #3146 from pleroy/Forget
DiscreteTrajectorySegment, part 2: forgetting
2 parents ba4c3d6 + a2e3028 commit 9590119

3 files changed

+58
-4
lines changed

physics/discrete_trajectory_segment.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,13 @@ class DiscreteTrajectorySegment {
6767
absl::Status Append(Instant const& t,
6868
DegreesOfFreedom<Frame> const& degrees_of_freedom);
6969

70+
// Removes all points with a time greater than or equal to |t| (1st overload)
71+
// or starting at |begin| (2nd overload).
7072
void ForgetAfter(Instant const& t);
7173
void ForgetAfter(typename Timeline::const_iterator begin);
7274

75+
// Removes all points with a time strictly less than |t| (1st overload) or
76+
// ending at |end| (2nd overload).
7377
void ForgetBefore(Instant const& t);
7478
void ForgetBefore(typename Timeline::const_iterator end);
7579

physics/discrete_trajectory_segment_body.hpp

+16-4
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,30 @@ absl::Status DiscreteTrajectorySegment<Frame>::Append(
111111
}
112112

113113
template<typename Frame>
114-
void DiscreteTrajectorySegment<Frame>::ForgetAfter(Instant const& t) {}
114+
void DiscreteTrajectorySegment<Frame>::ForgetAfter(Instant const& t) {
115+
ForgetAfter(timeline_.lower_bound(t));
116+
// TODO(phl): Downsampling.
117+
}
115118

116119
template<typename Frame>
117120
void DiscreteTrajectorySegment<Frame>::ForgetAfter(
118-
typename Timeline::const_iterator const begin) {}
121+
typename Timeline::const_iterator const begin) {
122+
timeline_.erase(begin, timeline_.end());
123+
// TODO(phl): Downsampling.
124+
}
119125

120126
template<typename Frame>
121-
void DiscreteTrajectorySegment<Frame>::ForgetBefore(Instant const& t) {}
127+
void DiscreteTrajectorySegment<Frame>::ForgetBefore(Instant const& t) {
128+
ForgetBefore(timeline_.lower_bound(t));
129+
// TODO(phl): Downsampling.
130+
}
122131

123132
template<typename Frame>
124133
void DiscreteTrajectorySegment<Frame>::ForgetBefore(
125-
typename Timeline::const_iterator const end) {}
134+
typename Timeline::const_iterator const end) {
135+
timeline_.erase(timeline_.begin(), end);
136+
// TODO(phl): Downsampling.
137+
}
126138

127139
template<typename Frame>
128140
typename DiscreteTrajectorySegment<Frame>::Timeline::const_iterator

physics/discrete_trajectory_segment_test.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ class DiscreteTrajectorySegmentTest : public ::testing::Test {
3636
segment_->Append(t0_ + 11 * Second, unmoving_origin_);
3737
}
3838

39+
void ForgetAfter(Instant const& t) {
40+
segment_->ForgetAfter(t);
41+
}
42+
43+
void ForgetBefore(Instant const& t) {
44+
segment_->ForgetBefore(t);
45+
}
46+
3947
DiscreteTrajectorySegment<World>* segment_;
4048
internal_discrete_trajectory_types::Segments<World> segments_;
4149
Instant const t0_;
@@ -106,5 +114,35 @@ TEST_F(DiscreteTrajectorySegmentTest, EmptySize) {
106114
EXPECT_EQ(5, segment_->size());
107115
}
108116

117+
TEST_F(DiscreteTrajectorySegmentTest, ForgetAfterExisting) {
118+
ForgetAfter(t0_ + 5 * Second);
119+
EXPECT_EQ(t0_ + 3 * Second, segment_->rbegin()->first);
120+
}
121+
122+
TEST_F(DiscreteTrajectorySegmentTest, ForgetAfterNonexisting) {
123+
ForgetAfter(t0_ + 6 * Second);
124+
EXPECT_EQ(t0_ + 5 * Second, segment_->rbegin()->first);
125+
}
126+
127+
TEST_F(DiscreteTrajectorySegmentTest, ForgetAfterPastTheEnd) {
128+
ForgetAfter(t0_ + 29 * Second);
129+
EXPECT_EQ(t0_ + 11 * Second, segment_->rbegin()->first);
130+
}
131+
132+
TEST_F(DiscreteTrajectorySegmentTest, ForgetBeforeExisting) {
133+
ForgetBefore(t0_ + 7 * Second);
134+
EXPECT_EQ(t0_ + 7 * Second, segment_->begin()->first);
135+
}
136+
137+
TEST_F(DiscreteTrajectorySegmentTest, ForgetBeforeNonexisting) {
138+
ForgetBefore(t0_ + 6 * Second);
139+
EXPECT_EQ(t0_ + 7 * Second, segment_->begin()->first);
140+
}
141+
142+
TEST_F(DiscreteTrajectorySegmentTest, ForgetBeforeTheBeginning) {
143+
ForgetBefore(t0_ + 1 * Second);
144+
EXPECT_EQ(t0_ + 2 * Second, segment_->begin()->first);
145+
}
146+
109147
} // namespace physics
110148
} // namespace principia

0 commit comments

Comments
 (0)