Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 7e056db08e09
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1a70d639a323
Choose a head ref
  • 2 commits
  • 9 files changed
  • 1 contributor

Commits on Oct 23, 2021

  1. Implement back and front.

    pleroy authored and eggrobin committed Oct 23, 2021
    Copy the full SHA
    ce25330 View commit details
  2. Merge pull request #3168 from eggrobin/front-and-back-again

    Add back and front to the classes that have sequence semantics
    pleroy authored Oct 23, 2021
    Copy the full SHA
    1a70d63 View commit details
4 changes: 4 additions & 0 deletions physics/discrete_traject0ry.hpp
Original file line number Diff line number Diff line change
@@ -45,6 +45,7 @@ class DiscreteTraject0ry : public Trajectory<Frame> {
typename internal_discrete_trajectory_types::Timeline<Frame>::value_type;

using iterator = DiscreteTrajectoryIterator<Frame>;
using reference = value_type const&;
using reverse_iterator = std::reverse_iterator<iterator>;
using SegmentIterator = DiscreteTrajectorySegmentIterator<Frame>;
using ReverseSegmentIterator = std::reverse_iterator<SegmentIterator>;
@@ -60,6 +61,9 @@ class DiscreteTraject0ry : public Trajectory<Frame> {
DiscreteTraject0ry(const DiscreteTraject0ry&) = delete;
DiscreteTraject0ry& operator=(const DiscreteTraject0ry&) = delete;

reference front() const;
reference back() const;

iterator begin() const;
iterator end() const;

12 changes: 12 additions & 0 deletions physics/discrete_traject0ry_body.hpp
Original file line number Diff line number Diff line change
@@ -28,6 +28,18 @@ DiscreteTraject0ry<Frame>::DiscreteTraject0ry()
segment_by_left_endpoint_.emplace(InfinitePast, sit);
}

template<typename Frame>
typename DiscreteTraject0ry<Frame>::reference
DiscreteTraject0ry<Frame>::front() const {
return *begin();
}

template<typename Frame>
typename DiscreteTraject0ry<Frame>::reference
DiscreteTraject0ry<Frame>::back() const {
return *rbegin();
}

template<typename Frame>
typename DiscreteTraject0ry<Frame>::iterator
DiscreteTraject0ry<Frame>::begin() const {
6 changes: 6 additions & 0 deletions physics/discrete_traject0ry_test.cpp
Original file line number Diff line number Diff line change
@@ -130,6 +130,12 @@ TEST_F(DiscreteTraject0ryTest, Make) {
auto const trajectory = MakeTrajectory();
}

TEST_F(DiscreteTraject0ryTest, BackFront) {
auto const trajectory = MakeTrajectory();
EXPECT_EQ(t0_, trajectory.front().first);
EXPECT_EQ(t0_ + 14 * Second, trajectory.back().first);
}

TEST_F(DiscreteTraject0ryTest, IterateForward) {
auto const trajectory = MakeTrajectory();
std::vector<Instant> times;
7 changes: 6 additions & 1 deletion physics/discrete_trajectory_segment.hpp
Original file line number Diff line number Diff line change
@@ -53,6 +53,7 @@ class DiscreteTrajectorySegment : public Trajectory<Frame> {
using value_type = typename Timeline::value_type;

using iterator = DiscreteTrajectoryIterator<Frame>;
using reference = value_type const&;
using reverse_iterator = std::reverse_iterator<iterator>;

using DownsamplingParameters =
@@ -72,6 +73,9 @@ class DiscreteTrajectorySegment : public Trajectory<Frame> {
DiscreteTrajectorySegment& operator=(const DiscreteTrajectorySegment&) =
delete;

reference front() const;
reference back() const;

iterator begin() const;
iterator end() const;

@@ -105,7 +109,8 @@ class DiscreteTrajectorySegment : public Trajectory<Frame> {
void ClearDownsampling();

// The points denoted by |exact| are written and re-read exactly and are not
// affected by any errors introduced by zfp compression.
// affected by any errors introduced by zfp compression. The endpoints of a
// segment are always exact.
void WriteToMessage(
not_null<serialization::DiscreteTrajectorySegment*> message,
std::vector<iterator> const& exact) const;
12 changes: 12 additions & 0 deletions physics/discrete_trajectory_segment_body.hpp
Original file line number Diff line number Diff line change
@@ -37,6 +37,18 @@ DiscreteTrajectorySegment<Frame>::DiscreteTrajectorySegment(
DiscreteTrajectorySegmentIterator<Frame> const self)
: self_(self) {}

template<typename Frame>
typename DiscreteTrajectorySegment<Frame>::reference
DiscreteTrajectorySegment<Frame>::front() const {
return *begin();
}

template<typename Frame>
typename DiscreteTrajectorySegment<Frame>::reference
DiscreteTrajectorySegment<Frame>::back() const {
return *rbegin();
}

template<typename Frame>
typename DiscreteTrajectorySegment<Frame>::iterator
DiscreteTrajectorySegment<Frame>::begin() const {
3 changes: 3 additions & 0 deletions physics/discrete_trajectory_segment_range.hpp
Original file line number Diff line number Diff line change
@@ -16,6 +16,9 @@ class DiscreteTrajectorySegmentRange {
DiscreteTrajectorySegmentRange() = default;
DiscreteTrajectorySegmentRange(Iterator begin, Iterator end);

typename Iterator::reference front() const;
typename Iterator::reference back() const;

Iterator begin() const;
Iterator end() const;

12 changes: 12 additions & 0 deletions physics/discrete_trajectory_segment_range_body.hpp
Original file line number Diff line number Diff line change
@@ -14,6 +14,18 @@ DiscreteTrajectorySegmentRange<Iterator>::DiscreteTrajectorySegmentRange(
Iterator const end)
: begin_(begin), end_(end) {}

template<typename Iterator>
typename Iterator::reference
DiscreteTrajectorySegmentRange<Iterator>::front() const {
return *begin();
}

template<typename Iterator>
typename Iterator::reference
DiscreteTrajectorySegmentRange<Iterator>::back() const {
return *(--end());
}

template<typename Iterator>
Iterator DiscreteTrajectorySegmentRange<Iterator>::begin() const {
return begin_;
3 changes: 3 additions & 0 deletions physics/discrete_trajectory_segment_range_test.cpp
Original file line number Diff line number Diff line change
@@ -12,6 +12,9 @@ TEST(DiscreteTrajectorySegmentRangeTest, Basic) {
DiscreteTrajectorySegmentRange<std::vector<int>::const_iterator> range(
primes.begin(), primes.end());

EXPECT_EQ(2, range.front());
EXPECT_EQ(23, range.back());

int sum = 0;
int product = 1;
for (int const prime : range) {
5 changes: 5 additions & 0 deletions physics/discrete_trajectory_segment_test.cpp
Original file line number Diff line number Diff line change
@@ -105,6 +105,11 @@ class DiscreteTrajectorySegmentTest : public ::testing::Test {
DegreesOfFreedom<World> unmoving_origin_{World::origin, World::unmoving};
};

TEST_F(DiscreteTrajectorySegmentTest, BackFront) {
EXPECT_EQ(t0_ + 2 * Second, segment_->front().first);
EXPECT_EQ(t0_ + 11 * Second, segment_->back().first);
}

TEST_F(DiscreteTrajectorySegmentTest, Extremities) {
{
auto const it = segment_->begin();