Skip to content

Commit

Permalink
Clean up type alias vomit now that RPITIT is stable
Browse files Browse the repository at this point in the history
  • Loading branch information
misson20000 committed Jan 7, 2024
1 parent fde79d7 commit 45cad47
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 91 deletions.
8 changes: 3 additions & 5 deletions src/bin/layoutplayground.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::iter;
use std::sync;
use std::vec;

Expand All @@ -12,9 +13,6 @@ struct Line {
}

impl layout::LineView for Line {
type TokenIterator = vec::IntoIter<token::Token>;
type BorrowingTokenIterator<'a> = std::iter::Map<std::slice::Iter<'a, token::Token>, fn(&'a token::Token) -> token::TokenRef<'a>>;

fn from_line(line: layout::Line) -> Self {
let tokens: vec::Vec<token::Token> = line.to_tokens().collect();

Expand All @@ -24,11 +22,11 @@ impl layout::LineView for Line {
}
}

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
self.tokens.iter().map(TokenKind::as_ref)
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
self.tokens.into_iter()
}
}
Expand Down
15 changes: 4 additions & 11 deletions src/model/listing/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,9 @@ pub struct Line {
}

pub trait LineView {
type TokenIterator: iter::DoubleEndedIterator<Item = token::Token>;
type BorrowingTokenIterator<'a>: iter::Iterator<Item = token::TokenRef<'a>> where Self: 'a;

fn from_line(line: Line) -> Self;
fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_>;
fn to_tokens(self) -> Self::TokenIterator;
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>>;
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token>;
}

/* This lets us swap out a simpler implementation for testing to help narrow down
Expand Down Expand Up @@ -594,19 +591,15 @@ type LineTokenIterator = util::PhiIterator
iter::Chain<std::option::IntoIter<token::Token>, collections::vec_deque::IntoIter<token::Token>>>;

impl LineView for Line {
// TODO: clean me up when we get impl_trait_in_assoc_type
type BorrowingTokenIterator<'a> = LineBorrowingTokenIterator<'a>;
type TokenIterator = LineTokenIterator;

fn from_line(line: Line) -> Self {
line
}

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
self.iter_tokens()
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
self.into_iter()
}
}
Expand Down
45 changes: 12 additions & 33 deletions src/view/listing/bucket.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use std::iter;
use std::sync;
use std::vec;

use crate::model::addr;
use crate::model::document;
Expand Down Expand Up @@ -67,17 +66,12 @@ pub trait WorkableBucket {

/* This trait is separate from Bucket so we can take &dyn Bucket without specifying iterator types. */
pub trait TokenIterableBucket: Bucket {
type TokenIterator: iter::Iterator<Item = token::Token>;
type BorrowingTokenIterator<'a>: iter::Iterator<Item = token::TokenRef<'a>> where Self: 'a;

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_>;
fn to_tokens(self) -> Self::TokenIterator;
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>>;
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token>;
}

pub trait TokenViewIterableBucket: Bucket {
type BorrowingMutableTokenViewIterator<'a>: iter::Iterator<Item = &'a mut token_view::TokenView> where Self: 'a;

fn iter_token_views_mut(&mut self) -> Self::BorrowingMutableTokenViewIterator<'_>;
fn iter_token_views_mut(&mut self) -> impl iter::Iterator<Item = &mut token_view::TokenView>;
}

impl<T: TokenViewIterableBucket> WorkableBucket for T {
Expand Down Expand Up @@ -162,22 +156,17 @@ impl<Marker> Bucket for SingleTokenBucket<Marker> where LayoutController: Layout
}

impl<Marker> TokenIterableBucket for SingleTokenBucket<Marker> where LayoutController: LayoutProvider<Marker> {
type TokenIterator = iter::Once<token::Token>;
type BorrowingTokenIterator<'a> = iter::Once<token::TokenRef<'a>> where Marker: 'a;

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
iter::once(self.tv.token())
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
iter::once(self.tv.into_token())
}
}

impl<Marker> TokenViewIterableBucket for SingleTokenBucket<Marker> where LayoutController: LayoutProvider<Marker> {
type BorrowingMutableTokenViewIterator<'a> = iter::Once<&'a mut token_view::TokenView> where Marker: 'a;

fn iter_token_views_mut(&mut self) -> Self::BorrowingMutableTokenViewIterator<'_> {
fn iter_token_views_mut(&mut self) -> impl iter::Iterator<Item = &mut token_view::TokenView> {
iter::once(&mut self.tv)
}
}
Expand Down Expand Up @@ -221,22 +210,17 @@ impl<Marker> Bucket for MaybeTokenBucket<Marker> where LayoutController: LayoutP
}

impl<Marker> TokenIterableBucket for MaybeTokenBucket<Marker> where LayoutController: LayoutProvider<Marker> {
type TokenIterator = std::option::IntoIter<token::Token>;
type BorrowingTokenIterator<'a> = std::option::IntoIter<token::TokenRef<'a>> where Marker: 'a;

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
self.tv.as_ref().map(token_view::TokenView::token).into_iter()
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
self.tv.map(token_view::TokenView::into_token).into_iter()
}
}

impl<Marker> TokenViewIterableBucket for MaybeTokenBucket<Marker> where LayoutController: LayoutProvider<Marker> {
type BorrowingMutableTokenViewIterator<'a> = std::option::IntoIter<&'a mut token_view::TokenView> where Marker: 'a;

fn iter_token_views_mut(&mut self) -> Self::BorrowingMutableTokenViewIterator<'_> {
fn iter_token_views_mut(&mut self) -> impl iter::Iterator<Item = &mut token_view::TokenView> {
self.tv.as_mut().into_iter()
}
}
Expand Down Expand Up @@ -269,22 +253,17 @@ impl<Marker> Bucket for MultiTokenBucket<Marker> where LayoutController: LayoutP
}

impl<Marker> TokenIterableBucket for MultiTokenBucket<Marker> where LayoutController: LayoutProvider<Marker> {
type TokenIterator = iter::Map<vec::IntoIter<token_view::TokenView>, fn(token_view::TokenView) -> token::Token>;
type BorrowingTokenIterator<'a> = iter::Map<std::slice::Iter<'a, token_view::TokenView>, fn(&'a token_view::TokenView) -> token::TokenRef<'a>> where Marker: 'a;

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
self.tvs.iter().map(token_view::TokenView::token)
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
self.tvs.into_iter().map(token_view::TokenView::into_token)
}
}

impl<Marker> TokenViewIterableBucket for MultiTokenBucket<Marker> where LayoutController: LayoutProvider<Marker> {
type BorrowingMutableTokenViewIterator<'a> = std::slice::IterMut<'a, token_view::TokenView> where Marker: 'a;

fn iter_token_views_mut(&mut self) -> Self::BorrowingMutableTokenViewIterator<'_> {
fn iter_token_views_mut(&mut self) -> impl iter::Iterator<Item = &mut token_view::TokenView> {
self.tvs.iter_mut()
}
}
7 changes: 2 additions & 5 deletions src/view/listing/bucket/hexdump.rs
Original file line number Diff line number Diff line change
Expand Up @@ -281,14 +281,11 @@ impl bucket::Bucket for HexdumpBucket {
}

impl bucket::TokenIterableBucket for HexdumpBucket {
type TokenIterator = iter::Map<vec::IntoIter<token::HexdumpToken>, fn(token::HexdumpToken) -> token::Token>;
type BorrowingTokenIterator<'a> = iter::Map<std::slice::Iter<'a, token::HexdumpToken>, fn(&'a token::HexdumpToken) -> token::TokenRef<'a>>;

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
self.toks.iter().map(TokenKind::as_ref)
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
self.toks.into_iter().map(TokenKind::into_token)
}
}
Expand Down
41 changes: 4 additions & 37 deletions src/view/listing/line.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,6 @@ pub struct Line {
}

impl layout::LineView for Line {
type BorrowingTokenIterator<'a> = LineViewBorrowingTokenIterator<'a>;
type TokenIterator = LineViewTokenIterator;

fn from_line(line: layout::Line) -> Self {
Line {
ev_draw: facet::Event::new(),
Expand All @@ -73,45 +70,15 @@ impl layout::LineView for Line {
}
}

fn iter_tokens(&self) -> Self::BorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
self.ty.iter_tokens()
}

fn to_tokens(self) -> Self::TokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
self.ty.to_tokens()
}
}

type LineViewBorrowingTokenIterator<'a> = util::PhiIterator
<token::TokenRef<'a>,
iter::Empty<token::TokenRef<'a>>,
<bucket::SingleTokenBucket<bucket::BlankMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>,
<bucket::SingleTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>,
iter::Chain
<<bucket::MaybeTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>,
<bucket::HexdumpBucket as TokenIterableBucket>::BorrowingTokenIterator<'a>>,
iter::Chain
<<bucket::MaybeTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>,
<bucket::SingleTokenBucket<bucket::HexstringMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>>,
iter::Chain
<<bucket::MaybeTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>,
<bucket::MultiTokenBucket<bucket::SummaryMarker> as TokenIterableBucket>::BorrowingTokenIterator<'a>>>;

type LineViewTokenIterator = util::PhiIterator
<token::Token,
iter::Empty<token::Token>,
<bucket::SingleTokenBucket<bucket::BlankMarker> as TokenIterableBucket>::TokenIterator,
<bucket::SingleTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::TokenIterator,
iter::Chain
<<bucket::MaybeTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::TokenIterator,
<bucket::HexdumpBucket as TokenIterableBucket>::TokenIterator>,
iter::Chain
<<bucket::MaybeTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::TokenIterator,
<bucket::SingleTokenBucket<bucket::HexstringMarker> as TokenIterableBucket>::TokenIterator>,
iter::Chain
<<bucket::MaybeTokenBucket<bucket::TitleMarker> as TokenIterableBucket>::TokenIterator,
<bucket::MultiTokenBucket<bucket::SummaryMarker> as TokenIterableBucket>::TokenIterator>>;

impl LineViewType {
fn from(line: layout::Line) -> Self {
match line.ty {
Expand All @@ -133,7 +100,7 @@ impl LineViewType {
}
}

fn iter_tokens(&self) -> LineViewBorrowingTokenIterator<'_> {
fn iter_tokens(&self) -> impl iter::Iterator<Item = token::TokenRef<'_>> {
match &self {
Self::Empty => util::PhiIterator::I1(iter::empty()),
Self::Blank(bucket) => util::PhiIterator::I2(bucket.iter_tokens()),
Expand All @@ -144,7 +111,7 @@ impl LineViewType {
}
}

fn to_tokens(self) -> LineViewTokenIterator {
fn to_tokens(self) -> impl iter::DoubleEndedIterator<Item = token::Token> {
match self {
Self::Empty => util::PhiIterator::I1(iter::empty()),
Self::Blank(bucket) => util::PhiIterator::I2(bucket.to_tokens()),
Expand Down

0 comments on commit 45cad47

Please sign in to comment.