Skip to content

Commit

Permalink
Update dataframe.rs
Browse files Browse the repository at this point in the history
  • Loading branch information
humphreylee authored Jul 31, 2024
1 parent 86c41a1 commit 2a04665
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions charming/src/datatype/dataframe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,39 @@ macro_rules! vec_len {
};
}

use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, Ident, LitStr};

#[proc_macro]
pub fn transpose(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as syn::ExprTuple);

let vectors: Vec<_> = input.elems.iter().map(|expr| {
match expr {
syn::Expr::Lit(syn::ExprLit { lit: syn::Lit::Str(s), .. }) => {
let ident = Ident::new(&s.value(), s.span());
quote! { #ident }
}
_ => panic!("Expected vector identifiers"),
}
}).collect();

let len = vectors.len();
let first_vec = &vectors[0];

let expanded = quote! {
{
let mut result = Vec::with_capacity(#len);
for i in 0..#first_vec.len() {
result.push(vec![
#((#vectors[j])[i]),*
]);
}
result
}
};

expanded.into()
}

0 comments on commit 2a04665

Please sign in to comment.