diff --git a/CMakeLists.txt b/CMakeLists.txt index fcd0d41a..fa51ed6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ message("* * * * * * * * * * * * * * * * * * * * * * * * * * * * *") cmake_minimum_required(VERSION 3.2.5) -project(CGraph VERSION 2.5.2) +project(CGraph VERSION 2.5.3) # CGraph默认使用C++11版本,推荐使用C++17版本。暂不支持C++11以下版本 set(CMAKE_CXX_STANDARD 11) diff --git a/README.md b/README.md index 2f84f927..b23d93ee 100644 --- a/README.md +++ b/README.md @@ -319,9 +319,9 @@ int main() { * 优化`CStatus`功能,添加了异常定位信息 [2023.09.05 - v2.5.0 - Chunel] -* 提供了perf功能,用于做`pipeline`的性能分析 -* 提供了`element`的超时机制 -* 提供了`some`(部分)功能,优化`pipeline`的异步执行方式 +* 提供perf功能,用于做`pipeline`的性能分析 +* 提供`element`的超时机制 +* 提供`some`(部分)功能,优化`pipeline`的异步执行方式 [2023.09.15 - v2.5.1 - Chunel] * 提供`fence`(栅栏)功能 @@ -332,6 +332,10 @@ int main() { * 添加`example`相关内容,针对不同行业,提供一些简单实现 * 优化调度性能 +[2023.11.12 - v2.5.3 - Chunel] +* 提供`proto`定义文件 +* 提供依赖关系注册语法糖 + ------------ diff --git a/src/CBasic/CFuncType.h b/src/CBasic/CFuncType.h index 4e044f90..0736da9b 100644 --- a/src/CBasic/CFuncType.h +++ b/src/CBasic/CFuncType.h @@ -82,8 +82,7 @@ enum class CFunctionType { /** 在异常状态的情况下,抛出异常 */ #define CGRAPH_THROW_EXCEPTION_BY_STATUS(status) \ if (unlikely((status).isErr())) { \ - CGRAPH_THROW_EXCEPTION((status).getInfo()); \ - } \ + CGRAPH_THROW_EXCEPTION((status).getInfo()); } \ /** 根据条件判断是否抛出异常 */ #define CGRAPH_THROW_EXCEPTION_BY_CONDITION(cond, info) \ diff --git a/src/GraphCtrl/GraphElement/GElement.cpp b/src/GraphCtrl/GraphElement/GElement.cpp index c350a224..d32a9a4e 100644 --- a/src/GraphCtrl/GraphElement/GElement.cpp +++ b/src/GraphCtrl/GraphElement/GElement.cpp @@ -97,6 +97,27 @@ GElementPtr GElement::setTimeout(CMSec timeout, GElementTimeoutStrategy strategy } +GElementRef GElement::operator--(int) { + CGRAPH_FUNCTION_BEGIN + CGRAPH_ASSERT_INIT_THROW_ERROR(false) + return (*this); +} + + +GElementRef GElement::operator>(GElementPtr element) { + CGRAPH_FUNCTION_BEGIN + CGRAPH_ASSERT_INIT_THROW_ERROR(false) + CGRAPH_ASSERT_NOT_NULL_THROW_ERROR(element) + CGRAPH_THROW_EXCEPTION_BY_STATUS(element->addDependGElements({this})) + return (*this); +} + + +GElementRef GElement::operator&(GElementPtr element) { + return operator>(element); +} + + CBool GElement::isRunnable() const { return 0 >= this->left_depend_ && !this->done_; } diff --git a/src/GraphCtrl/GraphElement/GElement.h b/src/GraphCtrl/GraphElement/GElement.h index fb821b32..d0aabf6e 100644 --- a/src/GraphCtrl/GraphElement/GElement.h +++ b/src/GraphCtrl/GraphElement/GElement.h @@ -100,7 +100,7 @@ class GElement : public GElementObject, * 设定绑定的线程id * @param index,需要绑定的 thread id 信息 * @return - * @notice 若不了解调度机制,不建议使用本接口,否则可能导致运行时阻塞 + * @notice 本接口仅保证绑定线程优先调度,但不保证最终一定在绑定线程上执行。若不了解调度机制,不建议使用本接口,否则可能导致运行时阻塞。 */ GElement* setBindingIndex(CIndex index); @@ -119,6 +119,17 @@ class GElement : public GElementObject, */ CBool isGroup() const; + /** + * 实现连续注册的语法糖,形如: + * (*a)-->b&c; + * (*b)-->d; + * (*c)-->d; + * @return + */ + GElement& operator--(int); + GElement& operator>(GElement* element); + GElement& operator&(GElement* element); + protected: /** * 构造函数 @@ -404,6 +415,7 @@ class GElement : public GElementObject, CGRAPH_DECLARE_GEVENT_MANAGER_WRAPPER_WITH_MEMBER }; +using GElementRef = GElement &; using GElementPtr = GElement *; using GElementPPtr = GElementPtr *; using GElementPtrArr = std::vector; diff --git a/xmake.lua b/xmake.lua index e00f3eaf..fffc4daf 100644 --- a/xmake.lua +++ b/xmake.lua @@ -2,7 +2,7 @@ set_project("CGraph") -- set project version -set_version("2.5.0") +set_version("2.5.3") -- set language: c++11 set_languages("c++11")