Improve ergonomics of iterating on grid::Row

Iterating on grid::Row types no longer requires calls to iter() or
iter_mut().
This commit is contained in:
Joe Wilm 2016-07-02 08:25:21 -07:00
parent a2ca10643f
commit f2e6d66a5e
2 changed files with 24 additions and 5 deletions

View File

@ -16,7 +16,8 @@
use std::ops::{Index, IndexMut, Deref, DerefMut, Range, RangeTo, RangeFrom, RangeFull};
use std::cmp::Ordering;
use std::slice::{Iter, IterMut};
use std::slice::{self, Iter, IterMut};
use std::iter::IntoIterator;
use util::Rotate;
@ -233,6 +234,24 @@ impl Row {
}
}
impl<'a> IntoIterator for &'a Row {
type Item = &'a Cell;
type IntoIter = slice::Iter<'a, Cell>;
fn into_iter(self) -> slice::Iter<'a, Cell> {
self.iter()
}
}
impl<'a> IntoIterator for &'a mut Row {
type Item = &'a mut Cell;
type IntoIter = slice::IterMut<'a, Cell>;
fn into_iter(mut self) -> slice::IterMut<'a, Cell> {
self.iter_mut()
}
}
impl Deref for Row {
type Target = Vec<Cell>;
fn deref(&self) -> &Self::Target {
@ -295,7 +314,7 @@ macro_rules! clear_region_impl {
impl ClearRegion<$range> for Grid {
fn clear_region(&mut self, region: $range) {
for row in self.raw[region].iter_mut() {
for cell in row.iter_mut() {
for cell in row {
cell.reset();
}
}

View File

@ -505,7 +505,7 @@ impl ansi::Handler for Term {
ansi::LineClearMode::Right => {
let row = &mut self.grid[self.cursor.y as usize];
let start = self.cursor.x as usize;
for cell in row[start..].iter_mut() {
for cell in &mut row[start..] {
cell.reset();
}
},
@ -520,8 +520,8 @@ impl ansi::Handler for Term {
let end = self.grid.num_rows();
for i in start..end {
let row = &mut self.grid[i];
for cell in row.iter_mut() {
cell.c = ' ';
for cell in row {
cell.reset();
}
}
},