Skip to content

Commit

Permalink
format
Browse files Browse the repository at this point in the history
  • Loading branch information
2A5F committed Nov 9, 2020
1 parent 33caecc commit 6bd65b3
Show file tree
Hide file tree
Showing 18 changed files with 12,773 additions and 122 deletions.
116 changes: 20 additions & 96 deletions code_gen/src/code_gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,34 +37,13 @@ struct Ctx<'a> {
}

fn init<'a>(max: usize, t: &'a Ident, u: &'a Ident) -> Ctx<'a> {
let size_lits = (0..max + 1)
.into_iter()
.map(|i| LitInt::new(i.to_string().as_str(), Span::call_site()))
.collect::<Vec<_>>();
let size_lits = (0..max + 1).into_iter().map(|i| LitInt::new(i.to_string().as_str(), Span::call_site())).collect::<Vec<_>>();
let ts = (0..max + 1).into_iter().map(|_| t).collect::<Vec<_>>();
let us = (0..max + 1).into_iter().map(|_| u).collect::<Vec<_>>();
let nts = (0..max + 1)
.into_iter()
.map(|i| format_ident!("T{}", i))
.collect::<Vec<_>>();
let nvs = (0..max + 1)
.into_iter()
.map(|i| format_ident!("v{}", i))
.collect::<Vec<_>>();
let ants = nts[0..max + 1]
.iter()
.map(|i| quote! { #i: 'a })
.collect::<Vec<_>>();
let ctx = Ctx {
t,
u,
size_lits,
ts,
us,
nts,
nvs,
ants,
};
let nts = (0..max + 1).into_iter().map(|i| format_ident!("T{}", i)).collect::<Vec<_>>();
let nvs = (0..max + 1).into_iter().map(|i| format_ident!("v{}", i)).collect::<Vec<_>>();
let ants = nts[0..max + 1].iter().map(|i| quote! { #i: 'a }).collect::<Vec<_>>();
let ctx = Ctx { t, u, size_lits, ts, us, nts, nvs, ants };
ctx
}

Expand Down Expand Up @@ -94,13 +73,8 @@ fn gen_tuple_impl_size(ctx: &Ctx, size: usize) -> TokenStream {
}

fn gen_tuple_n_impl(ctx: &Ctx, out_dir: &Path) {
let item_names = (0..34usize)
.into_iter()
.map(|i| format_ident!("Item{}", i))
.collect::<Vec<_>>();
let items = (2..33usize)
.into_iter()
.map(|i| gen_tuple_n_impl_size(ctx, i, &item_names[0..i]));
let item_names = (0..34usize).into_iter().map(|i| format_ident!("Item{}", i)).collect::<Vec<_>>();
let items = (2..33usize).into_iter().map(|i| gen_tuple_n_impl_size(ctx, i, &item_names[0..i]));
let tks = quote! { #(#items)* };
let code = tks.to_string();
let dest_path = Path::new(out_dir).join("tuple_n.rs");
Expand Down Expand Up @@ -224,10 +198,7 @@ fn gen_tuple_alias_macro_size(ctx: &Ctx, size: usize) -> TokenStream {
let ty = quote! { $t };
let tys = (0..size).into_iter().map(|_| &ty).collect::<Vec<_>>();

let ntys = (0..size + 1)
.map(|i| format_ident!("t{}", i))
.map(|i| quote! { $#i })
.collect::<Vec<_>>();
let ntys = (0..size + 1).map(|i| format_ident!("t{}", i)).map(|i| quote! { $#i }).collect::<Vec<_>>();

let items = (0..size + 1).map(|i| gen_tuple_alias_macro_size_n(ctx, size, i, &ntys));

Expand All @@ -239,20 +210,12 @@ fn gen_tuple_alias_macro_size(ctx: &Ctx, size: usize) -> TokenStream {
tks
}

fn gen_tuple_alias_macro_size_n(
ctx: &Ctx,
size: usize,
n: usize,
ntys: &[TokenStream],
) -> TokenStream {
fn gen_tuple_alias_macro_size_n(ctx: &Ctx, size: usize, n: usize, ntys: &[TokenStream]) -> TokenStream {
let size_lit = &ctx.size_lits[size];

let u = quote! { _ };
let nntys = &ntys[0..n];
let tys = ntys[0..size]
.iter()
.enumerate()
.map(|(i, l)| if i < n { l } else { &u });
let tys = ntys[0..size].iter().enumerate().map(|(i, l)| if i < n { l } else { &u });

let tks = quote! {
{ #size_lit; #(#nntys:ty),* } => { (#(#tys),*) };
Expand Down Expand Up @@ -441,13 +404,7 @@ fn gen_tuple_map(ctx: &Ctx, out_dir: &Path) {
}

fn gen_tuple_map_size(ctx: &Ctx, size: usize) -> TokenStream {
let items = if size > 16 {
vec![]
} else {
(0..size)
.map(|n| gen_tuple_map_n_size(ctx, size, n))
.collect()
};
let items = if size > 16 { vec![] } else { (0..size).map(|n| gen_tuple_map_n_size(ctx, size, n)).collect() };

let map_name = format_ident!("Tuple{}Map", size);

Expand Down Expand Up @@ -480,11 +437,7 @@ fn gen_tuple_map_n_size(ctx: &Ctx, size: usize, n: usize) -> TokenStream {
let map_n = format_ident!("map{}", n);

let rts = &ctx.nts[0..size];
let ts = ctx.nts[0..size]
.iter()
.enumerate()
.map(|(i, l)| if i == n { ctx.u } else { l })
.collect::<Vec<_>>();
let ts = ctx.nts[0..size].iter().enumerate().map(|(i, l)| if i == n { ctx.u } else { l }).collect::<Vec<_>>();

let impls = ctx.size_lits[0..size].iter().enumerate().map(|(i, l)| {
if i == n {
Expand Down Expand Up @@ -512,16 +465,8 @@ fn gen_tuple_map_n_size(ctx: &Ctx, size: usize, n: usize) -> TokenStream {
}

fn gen_combin(ctx: &Ctx, out_dir: &Path) {
let self_impl = ctx
.size_lits
.iter()
.map(|i| quote! { self.#i })
.collect::<Vec<_>>();
let target_impl = ctx
.size_lits
.iter()
.map(|i| quote! { target.#i })
.collect::<Vec<_>>();
let self_impl = ctx.size_lits.iter().map(|i| quote! { self.#i }).collect::<Vec<_>>();
let target_impl = ctx.size_lits.iter().map(|i| quote! { target.#i }).collect::<Vec<_>>();
let items = (2..33usize).map(|i| gen_combin_size(ctx, i));
let concats = (0..17usize).flat_map(|a| {
let self_impl = &self_impl;
Expand Down Expand Up @@ -560,22 +505,14 @@ fn gen_combin_size(ctx: &Ctx, size: usize) -> TokenStream {
tks
}

fn gen_combin_concat_size(
ctx: &Ctx,
sizea: usize,
sizeb: usize,
self_impl: &[TokenStream],
target_impl: &[TokenStream],
) -> TokenStream {
fn gen_combin_concat_size(ctx: &Ctx, sizea: usize, sizeb: usize, self_impl: &[TokenStream], target_impl: &[TokenStream]) -> TokenStream {
let ants = &ctx.nts[0..sizea];
let bnts = &ctx.nts[sizea..sizea + sizeb];
let gnts = &ctx.nts[0..sizea + sizeb];
let atc = tif! { ants.len() == 1 => quote! { , } ; quote! { } };
let btc = tif! { bnts.len() == 1 => quote! { , } ; quote! { } };
let gtc = tif! { gnts.len() == 1 => quote! { , } ; quote! { } };
let impls = self_impl[0..sizea]
.iter()
.chain(target_impl[0..sizeb].iter());
let impls = self_impl[0..sizea].iter().chain(target_impl[0..sizeb].iter());
let tks = quote! {
impl<#(#gnts),*> CombinConcat<(#(#bnts),*#btc)> for (#(#ants),*#atc) {
type Out = (#(#gnts),*#gtc);
Expand All @@ -590,11 +527,7 @@ fn gen_combin_concat_size(
}

fn gen_transpose(ctx: &Ctx, out_dir: &Path) {
let none_impl = ctx
.size_lits
.iter()
.map(|_| quote! { None })
.collect::<Vec<_>>();
let none_impl = ctx.size_lits.iter().map(|_| quote! { None }).collect::<Vec<_>>();
let items_1 = (2..33usize).map(|i| gen_transpose_size_option_1(ctx, i, &none_impl[0..i]));
let items_2 = (2..33usize).map(|i| gen_transpose_size_option_2(ctx, i));
let items_3 = (2..33usize).map(|i| gen_transpose_size_result(ctx, i));
Expand Down Expand Up @@ -643,9 +576,7 @@ fn gen_transpose_size_option_2(ctx: &Ctx, size: usize) -> TokenStream {

fn gen_transpose_size_result(ctx: &Ctx, size: usize) -> TokenStream {
let nts = &ctx.nts[0..size];
let ents = (0..size)
.map(|i| format_ident!("E{}", i))
.collect::<Vec<_>>();
let ents = (0..size).map(|i| format_ident!("E{}", i)).collect::<Vec<_>>();
let nvs = &ctx.nvs[0..size];
let tks = quote! {
impl<Eo: #(From<#ents>)+*, #(#ents, #nts),*> TupleTransposeResult<Eo> for (#(Result<#nts, #ents>),*) {
Expand Down Expand Up @@ -702,15 +633,8 @@ fn gen_flatten_size(ctx: &Ctx, size: usize) -> TokenStream {
fn gen_flatten_size_n(ctx: &Ctx, size: usize, n: usize) -> TokenStream {
let nct = tif! { n == 1 => quote! { , } ; quote! {} };
let nts = &ctx.nts[0..size * n];
let nnts = (0..size * n)
.step_by(n)
.map(|i| &nts[i..i + n])
.map(|nts| quote! { (#(#nts),*#nct) });
let nnimpl = ctx.size_lits[0..size].iter().flat_map(|i| {
ctx.size_lits[0..n]
.iter()
.map(move |n| quote! { (self.#i).#n })
});
let nnts = (0..size * n).step_by(n).map(|i| &nts[i..i + n]).map(|nts| quote! { (#(#nts),*#nct) });
let nnimpl = ctx.size_lits[0..size].iter().flat_map(|i| ctx.size_lits[0..n].iter().map(move |n| quote! { (self.#i).#n }));
let tks = quote! {
impl<#(#nts),*> TupleFlatten for (#(#nnts),*) {
type OutTuple = (#(#nts),*);
Expand Down
13 changes: 12 additions & 1 deletion gen_code.ps1
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
Set-Location .\code_gen\
cargo build --release
Set-Location ..
.\target\release\code_gen.exe
.\target\release\code_gen.exe

rustfmt .\tuples\src\gen\cloned.rs
rustfmt .\tuples\src\gen\combin.rs
rustfmt .\tuples\src\gen\flatten.rs
rustfmt .\tuples\src\gen\transpose.rs
rustfmt .\tuples\src\gen\tuple_alias.rs
rustfmt .\tuples\src\gen\tuple_as.rs
rustfmt .\tuples\src\gen\tuple_impl.rs
rustfmt .\tuples\src\gen\tuple_iter.rs
rustfmt .\tuples\src\gen\tuple_map.rs
rustfmt .\tuples\src\gen\tuple_n.rs
13 changes: 12 additions & 1 deletion gen_code.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
cd ./code_gen/
cargo build --release
cd ..
./target/release/code_gen
./target/release/code_gen

rustfmt ./tuples/src/gen/cloned.rs
rustfmt ./tuples/src/gen/combin.rs
rustfmt ./tuples/src/gen/flatten.rs
rustfmt ./tuples/src/gen/transpose.rs
rustfmt ./tuples/src/gen/tuple_alias.rs
rustfmt ./tuples/src/gen/tuple_as.rs
rustfmt ./tuples/src/gen/tuple_impl.rs
rustfmt ./tuples/src/gen/tuple_iter.rs
rustfmt ./tuples/src/gen/tuple_map.rs
rustfmt ./tuples/src/gen/tuple_n.rs
1 change: 1 addition & 0 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
max_width = 10000
745 changes: 744 additions & 1 deletion tuples/src/gen/cloned.rs

Large diffs are not rendered by default.

2,396 changes: 2,395 additions & 1 deletion tuples/src/gen/combin.rs

Large diffs are not rendered by default.

709 changes: 708 additions & 1 deletion tuples/src/gen/flatten.rs

Large diffs are not rendered by default.

776 changes: 775 additions & 1 deletion tuples/src/gen/transpose.rs

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion tuples/src/gen/tuple_alias.rs

Large diffs are not rendered by default.

1,365 changes: 1,364 additions & 1 deletion tuples/src/gen/tuple_as.rs

Large diffs are not rendered by default.

Loading

0 comments on commit 6bd65b3

Please sign in to comment.