Implement iterator over 2D pixel coordinates #28
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes MET-56
Summary of Changes
This PR implements a
PixelCoordRangeclass, which defines.begin()and.end()methods compliant with C++'s range-expression. Instead of using twoIteratorto denote the range, theend()returns a specialSentinelobject, which requires less bookkeeping information (e.g. it doesn't need to keep another copy of the pixel start & end location). You can read more about C++20's Iterator Sentinel feature here if interested :).With this new class, we can now iterating over 2D pixels using range-based for loop (as we wished for in Slack), i.e.,
Test Plan
This new pixel coordinate generator replaces the need to have a dedicated
Intrinsics.get_ray_directions_kernelsmethod (which is removed in this PR). As such,camera_test.cuhas been updated accordingly to show & test that range-based for loop works as expected.As always, to run the tests: