mirror of https://github.com/dnomd343/klotski.git
Dnomd343
2 years ago
3 changed files with 65 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||
|
#include "klotski.h" |
||||
|
#include "gtest/gtest.h" |
||||
|
|
||||
|
TEST(GLOBAL, common_code) { |
||||
|
|
||||
|
// std::cout << "demo ok" << std::endl;
|
||||
|
|
||||
|
} |
@ -0,0 +1,37 @@ |
|||||
|
#include <future> |
||||
|
#include <functional> |
||||
|
#include "tiny_pool.h" |
||||
|
|
||||
|
class TinyPool { // OOP for tiny_thread_pool
|
||||
|
pool_t *pool; |
||||
|
static void wrap_c_func(void *func) { // wrap std::function as c-style function ptr
|
||||
|
(*static_cast<std::function<void()>*>(func))(); |
||||
|
free(func); |
||||
|
} |
||||
|
|
||||
|
public: |
||||
|
void boot() { tiny_pool_boot(pool); } |
||||
|
void join() { tiny_pool_join(pool); } |
||||
|
void kill() { tiny_pool_kill(pool); } |
||||
|
void detach() { tiny_pool_detach(pool); } |
||||
|
explicit TinyPool(uint32_t size) { pool = tiny_pool_create(size); } |
||||
|
|
||||
|
template <typename Func, typename ...Args> |
||||
|
auto submit(Func &&func, Args &&...args) -> std::future<decltype(func(args...))>; |
||||
|
}; |
||||
|
|
||||
|
template <typename Func, typename ...Args> |
||||
|
auto TinyPool::submit(Func &&func, Args &&...args) -> std::future<decltype(func(args...))> { |
||||
|
std::function<decltype(func(args...))()> wrap_func = std::bind( |
||||
|
std::forward<Func>(func), std::forward<Args>(args)... |
||||
|
); |
||||
|
auto func_ptr = std::make_shared< |
||||
|
std::packaged_task<decltype(func(args...))()> |
||||
|
>(wrap_func); |
||||
|
tiny_pool_submit(pool, TinyPool::wrap_c_func, (void*)( |
||||
|
new std::function<void()> ( |
||||
|
[func_ptr]() { (*func_ptr)(); } |
||||
|
) |
||||
|
)); |
||||
|
return func_ptr->get_future(); |
||||
|
} |
Loading…
Reference in new issue