[libcamera-devel,2/2] libcamera: span: Fix reverse iterators
diff mbox series

Message ID 20210413002731.25653-3-laurent.pinchart@ideasonboard.com
State Accepted
Commit 1ad214dd1b353e79923ec6d6dfd4246759e99407
Headers show
Series
  • libcamera: Fix Span reverse iterators
Related show

Commit Message

Laurent Pinchart April 13, 2021, 12:27 a.m. UTC
std::reverse_iterator<iterator> is constructed from an instance of
iterator, and automatically subtract 1 when dereferencing. rbegin() and
rend() should thus be constructed from end() and begin() respectively.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/span.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Kieran Bingham April 13, 2021, 8:55 p.m. UTC | #1
Hi Laurent,

On 13/04/2021 01:27, Laurent Pinchart wrote:
> std::reverse_iterator<iterator> is constructed from an instance of
> iterator, and automatically subtract 1 when dereferencing. rbegin() and

s/subtract/subtracts/

> rend() should thus be constructed from end() and begin() respectively.
> 

I guess this is why the previous patch talks about testing rend() and
crend().

But this one sounds ok to me.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  include/libcamera/span.h | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/include/libcamera/span.h b/include/libcamera/span.h
> index 91e9f974cc58..7a35806b1710 100644
> --- a/include/libcamera/span.h
> +++ b/include/libcamera/span.h
> @@ -194,9 +194,9 @@ public:
>  	constexpr const_iterator cbegin() const { return begin(); }
>  	constexpr iterator end() const { return data() + size(); }
>  	constexpr const_iterator cend() const { return end(); }
> -	constexpr reverse_iterator rbegin() const { return reverse_iterator(data() + size() - 1); }
> +	constexpr reverse_iterator rbegin() const { return reverse_iterator(end()); }
>  	constexpr const_reverse_iterator crbegin() const { return rbegin(); }
> -	constexpr reverse_iterator rend() const { return reverse_iterator(data() - 1); }
> +	constexpr reverse_iterator rend() const { return reverse_iterator(begin()); }
>  	constexpr const_reverse_iterator crend() const { return rend(); }
>  
>  	constexpr reference front() const { return *data(); }
> @@ -360,9 +360,9 @@ public:
>  	constexpr const_iterator cbegin() const { return begin(); }
>  	constexpr iterator end() const { return data() + size(); }
>  	constexpr const_iterator cend() const { return end(); }
> -	constexpr reverse_iterator rbegin() const { return reverse_iterator(data() + size() - 1); }
> +	constexpr reverse_iterator rbegin() const { return reverse_iterator(end()); }
>  	constexpr const_reverse_iterator crbegin() const { return rbegin(); }
> -	constexpr reverse_iterator rend() const { return reverse_iterator(data() - 1); }
> +	constexpr reverse_iterator rend() const { return reverse_iterator(begin()); }
>  	constexpr const_reverse_iterator crend() const { return rend(); }
>  
>  	constexpr reference front() const { return *data(); }
>

Patch
diff mbox series

diff --git a/include/libcamera/span.h b/include/libcamera/span.h
index 91e9f974cc58..7a35806b1710 100644
--- a/include/libcamera/span.h
+++ b/include/libcamera/span.h
@@ -194,9 +194,9 @@  public:
 	constexpr const_iterator cbegin() const { return begin(); }
 	constexpr iterator end() const { return data() + size(); }
 	constexpr const_iterator cend() const { return end(); }
-	constexpr reverse_iterator rbegin() const { return reverse_iterator(data() + size() - 1); }
+	constexpr reverse_iterator rbegin() const { return reverse_iterator(end()); }
 	constexpr const_reverse_iterator crbegin() const { return rbegin(); }
-	constexpr reverse_iterator rend() const { return reverse_iterator(data() - 1); }
+	constexpr reverse_iterator rend() const { return reverse_iterator(begin()); }
 	constexpr const_reverse_iterator crend() const { return rend(); }
 
 	constexpr reference front() const { return *data(); }
@@ -360,9 +360,9 @@  public:
 	constexpr const_iterator cbegin() const { return begin(); }
 	constexpr iterator end() const { return data() + size(); }
 	constexpr const_iterator cend() const { return end(); }
-	constexpr reverse_iterator rbegin() const { return reverse_iterator(data() + size() - 1); }
+	constexpr reverse_iterator rbegin() const { return reverse_iterator(end()); }
 	constexpr const_reverse_iterator crbegin() const { return rbegin(); }
-	constexpr reverse_iterator rend() const { return reverse_iterator(data() - 1); }
+	constexpr reverse_iterator rend() const { return reverse_iterator(begin()); }
 	constexpr const_reverse_iterator crend() const { return rend(); }
 
 	constexpr reference front() const { return *data(); }