From 54ec44c7621ead638db2a93f8680502c44962f62 Mon Sep 17 00:00:00 2001
From: Luca Barbato <lu_zero@gentoo.org>
Date: Fri, 28 Sep 2018 16:57:07 +0200
Subject: [PATCH] Extend the implementation of IterWidth

Implement ExactSizeIterator and FusedIterator.
---
 src/plane.rs | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/plane.rs b/src/plane.rs
index 9c38ac7e..45a1f42d 100644
--- a/src/plane.rs
+++ b/src/plane.rs
@@ -232,7 +232,6 @@ pub struct IterWidth<'a> {
     width: usize,
 }
 
-// TODO: Implement more methods
 impl<'a> Iterator for IterWidth<'a> {
     type Item = &'a [u16];
 
@@ -250,8 +249,20 @@ impl<'a> Iterator for IterWidth<'a> {
             Some(&self.ps.plane.data[base..base + self.width])
         }
     }
+
+    #[inline]
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        let size = self.ps.plane.cfg.height - self.ps.y as usize;
+
+        (size, Some(size))
+    }
 }
 
+impl<'a> ExactSizeIterator for IterWidth<'a> { }
+
+use std::iter::FusedIterator;
+impl<'a> FusedIterator for IterWidth<'a> { }
+
 impl<'a> PlaneSlice<'a> {
   pub fn as_slice(&'a self) -> &'a [u16] {
     let stride = self.plane.cfg.stride;
-- 
GitLab