Skip to content

Commit

Permalink
Merge pull request #4095 from pleroy/Ranges
Browse files Browse the repository at this point in the history
Remove discrete_trajectory_segment_range and use a range instead
  • Loading branch information
pleroy authored Sep 15, 2024
2 parents 093ea6b + c81be46 commit 6d143b1
Show file tree
Hide file tree
Showing 12 changed files with 21 additions and 166 deletions.
12 changes: 5 additions & 7 deletions physics/discrete_trajectory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <iterator>
#include <list>
#include <memory>
#include <ranges>
#include <vector>

#include "absl/container/btree_map.h"
Expand All @@ -15,7 +16,6 @@
#include "physics/degrees_of_freedom.hpp"
#include "physics/discrete_trajectory_iterator.hpp"
#include "physics/discrete_trajectory_segment_iterator.hpp"
#include "physics/discrete_trajectory_segment_range.hpp"
#include "physics/discrete_trajectory_types.hpp"
#include "physics/trajectory.hpp"
#include "serialization/physics.pb.h"
Expand All @@ -33,7 +33,6 @@ using namespace principia::geometry::_space;
using namespace principia::physics::_degrees_of_freedom;
using namespace principia::physics::_discrete_trajectory_iterator;
using namespace principia::physics::_discrete_trajectory_segment_iterator;
using namespace principia::physics::_discrete_trajectory_segment_range;
using namespace principia::physics::_discrete_trajectory_types;
using namespace principia::physics::_trajectory;

Expand All @@ -48,9 +47,9 @@ class DiscreteTrajectory : public Trajectory<Frame> {
using reverse_iterator = std::reverse_iterator<iterator>;
using SegmentIterator = DiscreteTrajectorySegmentIterator<Frame>;
using ReverseSegmentIterator = std::reverse_iterator<SegmentIterator>;
using SegmentRange = DiscreteTrajectorySegmentRange<SegmentIterator>;
using ReverseSegmentRange =
DiscreteTrajectorySegmentRange<ReverseSegmentIterator>;
using SegmentRange = std::ranges::subrange<SegmentIterator,
SegmentIterator,
std::ranges::subrange_kind::sized>;

DiscreteTrajectory();

Expand Down Expand Up @@ -81,8 +80,7 @@ class DiscreteTrajectory : public Trajectory<Frame> {
iterator upper_bound(Instant const& t) const;

SegmentRange segments() const;
// TODO(phl): In C++20 this should be a reverse_view on segments.
ReverseSegmentRange rsegments() const;
std::ranges::reverse_view<SegmentRange> rsegments() const;

SegmentIterator NewSegment();

Expand Down
14 changes: 5 additions & 9 deletions physics/discrete_trajectory_body.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,19 +142,15 @@ DiscreteTrajectory<Frame>::upper_bound(Instant const& t) const {
template<typename Frame>
typename DiscreteTrajectory<Frame>::SegmentRange
DiscreteTrajectory<Frame>::segments() const {
return SegmentRange(SegmentIterator(
segments_.get(), segments_->begin()),
SegmentIterator(
segments_.get(), segments_->end()));
return SegmentRange(SegmentIterator(segments_.get(), segments_->begin()),
SegmentIterator(segments_.get(), segments_->end()),
segments_->size());
}

template<typename Frame>
typename DiscreteTrajectory<Frame>::ReverseSegmentRange
std::ranges::reverse_view<typename DiscreteTrajectory<Frame>::SegmentRange>
DiscreteTrajectory<Frame>::rsegments() const {
return ReverseSegmentRange(std::reverse_iterator(SegmentIterator(
segments_.get(), segments_->end())),
std::reverse_iterator(SegmentIterator(
segments_.get(), segments_->begin())));
return std::ranges::reverse_view(segments());
}

template<typename Frame>
Expand Down
2 changes: 1 addition & 1 deletion physics/discrete_trajectory_iterator_body.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ DiscreteTrajectoryIterator<Frame>::operator--() {
bool const point_is_at_end = is_at_end(point_);
if (point_is_at_end) {
// Move the iterator to the end of the last segment.
segment_ = std::prev(segment_.segments().end());
segment_ = std::prev(segment_.EndSegment());
point_ = segment_->timeline_end();
// Now proceed with the decrement.
}
Expand Down
3 changes: 3 additions & 0 deletions physics/discrete_trajectory_iterator_test.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "physics/discrete_trajectory_iterator.hpp"

#include <iterator>
#include <memory>

#include "base/not_null.hpp"
Expand Down Expand Up @@ -33,6 +34,8 @@ class DiscreteTrajectoryIteratorTest : public ::testing::Test {
protected:
using World = Frame<struct WorldTag>;
using Segments = _discrete_trajectory_types::Segments<World>;
static_assert(
std::bidirectional_iterator<DiscreteTrajectoryIterator<World>>);

DiscreteTrajectoryIteratorTest()
: segments_(MakeSegments(3)) {
Expand Down
5 changes: 1 addition & 4 deletions physics/discrete_trajectory_segment_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "absl/container/btree_map.h"
#include "base/macros.hpp" // 🧙 For forward declarations.
#include "base/not_null.hpp"
#include "physics/discrete_trajectory_segment_range.hpp"
#include "physics/discrete_trajectory_types.hpp"

namespace principia {
Expand Down Expand Up @@ -39,7 +38,6 @@ namespace _discrete_trajectory_segment_iterator {
namespace internal {

using namespace principia::base::_not_null;
using namespace principia::physics::_discrete_trajectory_segment_range;
using namespace principia::physics::_discrete_trajectory_types;

template<typename Frame>
Expand Down Expand Up @@ -72,8 +70,7 @@ class DiscreteTrajectorySegmentIterator {

bool is_begin() const;
bool is_end() const;
DiscreteTrajectorySegmentRange<DiscreteTrajectorySegmentIterator>
segments() const;
DiscreteTrajectorySegmentIterator EndSegment() const;

typename Segments::iterator iterator() const;

Expand Down
7 changes: 3 additions & 4 deletions physics/discrete_trajectory_segment_iterator_body.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,10 @@ bool DiscreteTrajectorySegmentIterator<Frame>::is_end() const {
}

template<typename Frame>
DiscreteTrajectorySegmentRange<DiscreteTrajectorySegmentIterator<Frame>>
DiscreteTrajectorySegmentIterator<Frame>::segments() const {
DiscreteTrajectorySegmentIterator<Frame>
DiscreteTrajectorySegmentIterator<Frame>::EndSegment() const {
DCHECK(segments_ != nullptr);
return {DiscreteTrajectorySegmentIterator(segments_, segments_->begin()),
DiscreteTrajectorySegmentIterator(segments_, segments_->end())};
return DiscreteTrajectorySegmentIterator(segments_, segments_->end());
}

template<typename Frame>
Expand Down
3 changes: 3 additions & 0 deletions physics/discrete_trajectory_segment_iterator_test.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "physics/discrete_trajectory_segment_iterator.hpp"

#include <iterator>
#include <memory>

#include "base/not_null.hpp"
Expand Down Expand Up @@ -27,6 +28,8 @@ class DiscreteTrajectorySegmentIteratorTest : public ::testing::Test {
protected:
using World = Frame<struct WorldTag>;
using Segments = _discrete_trajectory_types::Segments<World>;
static_assert(
std::bidirectional_iterator<DiscreteTrajectorySegmentIterator<World>>);

DiscreteTrajectorySegmentIteratorTest()
: segments_(MakeSegments(3)) {
Expand Down
42 changes: 0 additions & 42 deletions physics/discrete_trajectory_segment_range.hpp

This file was deleted.

53 changes: 0 additions & 53 deletions physics/discrete_trajectory_segment_range_body.hpp

This file was deleted.

34 changes: 0 additions & 34 deletions physics/discrete_trajectory_segment_range_test.cpp

This file was deleted.

3 changes: 0 additions & 3 deletions physics/physics.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@
<ClInclude Include="discrete_trajectory_segment_body.hpp" />
<ClInclude Include="discrete_trajectory_segment_iterator.hpp" />
<ClInclude Include="discrete_trajectory_segment_iterator_body.hpp" />
<ClInclude Include="discrete_trajectory_segment_range.hpp" />
<ClInclude Include="discrete_trajectory_segment_range_body.hpp" />
<ClInclude Include="discrete_trajectory_types.hpp" />
<ClInclude Include="discrete_trajectory_types_body.hpp" />
<ClInclude Include="equipotential.hpp" />
Expand Down Expand Up @@ -106,7 +104,6 @@
<ClCompile Include="clientele_test.cpp" />
<ClCompile Include="discrete_trajectory_iterator_test.cpp" />
<ClCompile Include="discrete_trajectory_segment_iterator_test.cpp" />
<ClCompile Include="discrete_trajectory_segment_range_test.cpp" />
<ClCompile Include="discrete_trajectory_segment_test.cpp" />
<ClCompile Include="discrete_trajectory_test.cpp" />
<ClCompile Include="equipotential_test.cpp" />
Expand Down
9 changes: 0 additions & 9 deletions physics/physics.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -155,12 +155,6 @@
<ClInclude Include="discrete_trajectory_types.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="discrete_trajectory_segment_range.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="discrete_trajectory_segment_range_body.hpp">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="discrete_trajectory_segment_iterator_body.hpp">
<Filter>Source Files</Filter>
</ClInclude>
Expand Down Expand Up @@ -319,9 +313,6 @@
<ClCompile Include="analytical_series_test.cpp">
<Filter>Test Files</Filter>
</ClCompile>
<ClCompile Include="discrete_trajectory_segment_range_test.cpp">
<Filter>Test Files</Filter>
</ClCompile>
<ClCompile Include="discrete_trajectory_segment_iterator_test.cpp">
<Filter>Test Files</Filter>
</ClCompile>
Expand Down

0 comments on commit 6d143b1

Please sign in to comment.