@@ -1,5 +1,5 @@ | |||
cmake_minimum_required(VERSION 3.14) | |||
PROJECT(librf) | |||
cmake_minimum_required(VERSION 3.10) | |||
project(librf) | |||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | |||
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines-ts -stdlib=libc++") | |||
@@ -8,7 +8,7 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") | |||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | |||
set(CMAKE_CXX_FLAGS "/std:c++latest /await /EHsc") | |||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | |||
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines-ts") | |||
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines") | |||
endif() | |||
message(STATUS "C++ flags: ${CMAKE_CXX_FLAGS}") | |||
@@ -90,5 +90,5 @@ ${PROJECT_SOURCE_DIR}/test_librf.cpp | |||
) | |||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) | |||
add_executable(test ${TSRC}) | |||
target_link_libraries(test ${LIB_NAME}) | |||
add_executable(rf_tutorial ${TSRC}) | |||
target_link_libraries(rf_tutorial ${LIB_NAME}) |
@@ -1,27 +1,27 @@ | |||
#pragma once | |||
#ifndef RESUMEF_INLINE_STATE | |||
#if defined(__clang__) || defined(_MSC_VER) | |||
#define RESUMEF_INLINE_STATE 1 | |||
#else | |||
#define RESUMEF_INLINE_STATE 1 | |||
#endif //defined(__clang__) || defined(_MSC_VER) | |||
#endif //RESUMEF_INLINE_STATE | |||
#ifndef RESUMEF_DEBUG_COUNTER | |||
/* #undef RESUMEF_DEBUG_COUNTER */ | |||
#endif //RESUMEF_DEBUG_COUNTER | |||
#ifndef RESUMEF_ENABLE_CONCEPT | |||
#ifdef __cpp_lib_concepts | |||
#define RESUMEF_ENABLE_CONCEPT 0 | |||
#else | |||
#define RESUMEF_ENABLE_CONCEPT 0 | |||
#endif //#ifdef __cpp_lib_concepts | |||
#endif //#ifndef RESUMEF_ENABLE_CONCEPT | |||
#ifndef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE | |||
/* #undef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE */ | |||
#endif //_WITH_LOCK_FREE_Q_KEEP_REAL_SIZE | |||
/* #undef RESUMEF_USE_CUSTOM_SPINLOCK */ | |||
#pragma once | |||
#ifndef RESUMEF_INLINE_STATE | |||
#if defined(__clang__) || defined(_MSC_VER) | |||
/* #undef RESUMEF_INLINE_STATE */ | |||
#else | |||
/* #undef RESUMEF_INLINE_STATE */ | |||
#endif //defined(__clang__) || defined(_MSC_VER) | |||
#endif //RESUMEF_INLINE_STATE | |||
#ifndef RESUMEF_DEBUG_COUNTER | |||
/* #undef RESUMEF_DEBUG_COUNTER */ | |||
#endif //RESUMEF_DEBUG_COUNTER | |||
#ifndef RESUMEF_ENABLE_CONCEPT | |||
#ifdef __cpp_lib_concepts | |||
#define RESUMEF_ENABLE_CONCEPT 1 | |||
#else | |||
#define RESUMEF_ENABLE_CONCEPT 1 | |||
#endif //#ifdef __cpp_lib_concepts | |||
#endif //#ifndef RESUMEF_ENABLE_CONCEPT | |||
#ifndef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE | |||
/* #undef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE */ | |||
#endif //_WITH_LOCK_FREE_Q_KEEP_REAL_SIZE | |||
/* #undef RESUMEF_USE_CUSTOM_SPINLOCK */ |
@@ -45,7 +45,7 @@ auto tostring_async(_Input_t&& value, _Callable_t&& token) | |||
callback(std::to_string(value)); | |||
}).detach(); | |||
MODERN_CALLBACK_RETURN(); | |||
MODERN_CALLBACK_RETURN(); | |||
} | |||
//演示异步库有多个异步回调函数,只要按照Modern Callback范式去做回调,就不再需要写额外的代码,就可以适配到future+librf,以及更多的其他库 | |||
@@ -61,7 +61,7 @@ auto add_async(_Ty1&& val1, _Ty2&& val2, _Callable_t&& token) | |||
callback(val1 + val2); | |||
}).detach(); | |||
MODERN_CALLBACK_RETURN(); | |||
MODERN_CALLBACK_RETURN(); | |||
} | |||
//演示异步库有多个异步回调函数,只要按照Modern Callback范式去做回调,就不再需要写额外的代码,就可以适配到future+librf,以及更多的其他库 | |||
@@ -83,7 +83,7 @@ auto muldiv_async(_Ty1&& val1, _Ty2&& val2, _Callable_t&& token) | |||
callback(nullptr, v1, val1 / val2); | |||
}).detach(); | |||
MODERN_CALLBACK_RETURN(); | |||
MODERN_CALLBACK_RETURN(); | |||
} | |||
#include "use_future.h" | |||
@@ -132,11 +132,9 @@ static void example_librf() | |||
//muldiv_async函数可能会抛异常,取决于val是否是0 | |||
//异常将会带回到本协程里的代码,所以需要try-catch | |||
auto ab = co_await muldiv_async(9, val, use_librf); | |||
//C++17: | |||
//auto [a, b] = co_await muldiv_async(9, val, use_librf); | |||
auto [a, b] = co_await muldiv_async(9, val, use_librf); | |||
std::string result = co_await tostring_async(std::get<0>(ab) + std::get<1>(ab), use_librf); | |||
std::string result = co_await tostring_async(a + b, use_librf); | |||
std::cout << result << std::endl; | |||
} |