Skip to content

coke-playground/rex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rex

Rex是一个远程函数组合执行框架。支持在Server端注册一些函数,可以是普通函数,也可以是coke框架中的协程函数,在Client端可以根据需求,选择其中的一些函数并灵活地指定函数参数和执行顺序,发往Server端执行完毕后,取回结果以供进一步使用。此外,也可以使用分支和循环组合成较为复杂的函数执行过程,为了便于编写,为整数和浮点数提供了四则运算和比较运算。

假设/vi32/函数集已经实现,则可以通过下述方法实现一个冒泡排序算法的函数组合,在实际应用中,当一个函数组合复杂到这种程度时,就应当考虑增加一个新的函数了,此示例仅为展示使用方法。

using Vi32 = std::vector<int32_t>;

rex::CommandBuilder b;

rex::Arg<Vi32> vec  = b.arg<Vi32>("vector", {5, 2, 1, 3, 4});
rex::Arg<int32_t> i = b.arg<int32_t>(0);
rex::Arg<int32_t> n = b.remote<int32_t>("/vi32/size", vec);

b.remote_while(i < n, [&] {
    rex::Arg<int32_t> j    = b.arg<int32_t>(0);
    rex::Arg<int32_t> m    = n - i - b.arg<int32_t>(1);
    rex::Arg<bool> swapped = b.arg<bool>(false);

    b.remote_while(j < m, [&] {
        rex::Arg<int32_t> k = j + b.arg<int32_t>(1);
        rex::Arg<int32_t> x = b.remote<int32_t>("/vi32/at", vec, j);
        rex::Arg<int32_t> y = b.remote<int32_t>("/vi32/at", vec, k);

        b.remote_if(x > y, [&] {
            b.remote<void>("/vi32/swap", vec, j, k);
            swapped = b.arg<bool>(true);
        });

        j = j + b.arg<int32_t>(1);
    });

    b.remote_if(!swapped, [&] { b.remote_break(); });

    i = i + b.arg<int32_t>(1);
});

b.add_return_arg("vector", vec);

// ...

构建环境

GCC >= 13

LICENSE

Apache 2.0

About

基于Coke实现的远程函数组合执行框架

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published