#编译时 #typenum #时间 #编译 #循环 #展开

typenum_loops

一个库,提供在编译时完全或部分展开的循环

6次发布

使用旧的Rust 2015

0.3.0 2017年11月23日
0.2.0 2017年9月25日
0.1.3 2017年6月24日
0.1.2 2016年12月20日

#6 in #展开

Download history 1/week @ 2024-04-07 1/week @ 2024-05-26 20/week @ 2024-07-07 1/week @ 2024-07-14 43/week @ 2024-07-21

64 次每月下载
3 crates 中使用

MIT 许可证

7KB
90

typenum_loops

一个库,提供在编译时完全或部分展开的循环。

extern crate typenum;
extern crate typenum_loops;

use typenum::{U4, U6};
use typenum_loops::Loop;

fn main(){
    let arr: &mut[usize] = &mut[0; 4];
    // for i in 0..4 {arr[i] = i} fully unrolled by 4
    U4::full_unroll(&mut |i| arr[i] = i);
    
    let arr2: &mut[usize] = &mut[0; 13];
    // for i in 0..13 {arr2[i] = i} unrolled by 6
    U6::partial_unroll(13, &mut |i, _| arr2[i] = i);
}

注意:尽管尝试通过使用空的包装函数来欺骗 llvm,但非常大的闭包可能不会内联。

许可证

MIT


lib.rs:

#示例

extern crate typenum;
extern crate typenum_loops;

use typenum::{U4, U6};
use typenum_loops::Loop;

fn main(){
    let arr: &mut[usize] = &mut[0; 4];
    // for i in 0..4 {arr[i] = i} fully unrolled by 4
    U4::full_unroll(&mut |i| arr[i] = i);

    let arr2: &mut[usize] = &mut[0; 13];
    // for i in 0..13 {arr2[i] = i} unrolled by 6
    U6::partial_unroll(13, &mut |i, _| arr2[i] = i);
}

依赖项

~155KB