Skip to content

Commit 00d9ef9

Browse files
committed
[chg] 优化aspect逻辑功能
1 parent 57ead91 commit 00d9ef9

7 files changed

Lines changed: 130 additions & 33 deletions

File tree

src/GraphCtrl/GraphElement/GAspect/GAspect.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
@File: GAspect.h
55
@Time: 2021/9/27 11:28 下午
6-
@Desc:
6+
@Desc: 提供了6个位置的切面信息,供调用
77
***************************/
88

99
#ifndef CGRAPH_GASPECT_H
@@ -16,22 +16,34 @@ template <typename T>
1616
class GAspect : public GAspectObject<T> {
1717
public:
1818
/**
19-
* 切面开始期间动作
19+
* init()函数切面开始期间动作
2020
*/
21-
virtual void begin() = 0;
21+
virtual void beginInit();
2222

23+
/**
24+
* init()函数切面结束期间动作
25+
*/
26+
virtual void finishInit(CSTATUS status);
2327

2428
/**
25-
* 切面结束期间动作
29+
* run()函数切面开始期间动作
2630
*/
27-
virtual void finish() = 0;
31+
virtual void beginRun();
2832

33+
/**
34+
* run()函数切面结束期间动作
35+
*/
36+
virtual void finishRun(CSTATUS status);
37+
38+
/**
39+
* deinit()函数切面开始期间动作
40+
*/
41+
virtual void beginDeinit();
2942

3043
/**
31-
* 切面执行函数
32-
* @return
44+
* init()函数切面结束期间动作
3345
*/
34-
CSTATUS run() override;
46+
virtual void finishDeinit(CSTATUS status);
3547
};
3648

3749
template <typename T>

src/GraphCtrl/GraphElement/GAspect/GAspect.inl

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,28 @@
66
@Desc:
77
***************************/
88

9+
template <typename T>
10+
void GAspect<T>::beginInit() {
11+
}
12+
13+
template <typename T>
14+
void GAspect<T>::finishInit(CSTATUS status) {
15+
}
16+
17+
template <typename T>
18+
void GAspect<T>::beginRun() {
19+
}
20+
21+
template <typename T>
22+
void GAspect<T>::finishRun(CSTATUS status) {
23+
}
24+
25+
template <typename T>
26+
void GAspect<T>::beginDeinit() {
27+
}
928

1029
template <typename T>
11-
CSTATUS GAspect<T>::run() {
12-
CGRAPH_FUNCTION_BEGIN
30+
void GAspect<T>::finishDeinit(CSTATUS status) {
31+
}
1332

14-
CGRAPH_ASSERT_NOT_NULL(GAspectObject<T>::element_obj_);
15-
begin();
16-
status = dynamic_cast<GElementPtr>(GAspectObject<T>::element_obj_)->run();
17-
finish();
18-
CGRAPH_FUNCTION_CHECK_STATUS
1933

20-
CGRAPH_FUNCTION_END
21-
}

src/GraphCtrl/GraphElement/GAspect/GAspectObject.h

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class GAspectObject : public GElement {
2222
element_obj_ = CGRAPH_SAFE_MALLOC_COBJECT(T);
2323
}
2424

25-
2625
/**
2726
* aspect类析构函数
2827
* 析构element信息
@@ -31,28 +30,85 @@ class GAspectObject : public GElement {
3130
CGRAPH_DELETE_PTR(element_obj_)
3231
}
3332

33+
/**
34+
* init()函数切面开始期间动作
35+
*/
36+
virtual void beginInit() = 0;
37+
38+
/**
39+
* init()函数切面结束期间动作
40+
*/
41+
virtual void finishInit(CSTATUS status) = 0;
42+
43+
/**
44+
* run()函数切面开始期间动作
45+
*/
46+
virtual void beginRun() = 0;
47+
48+
/**
49+
* run()函数切面结束期间动作
50+
*/
51+
virtual void finishRun(CSTATUS status) = 0;
52+
53+
/**
54+
* deinit()函数切面开始期间动作
55+
*/
56+
virtual void beginDeinit() = 0;
57+
58+
/**
59+
* init()函数切面结束期间动作
60+
*/
61+
virtual void finishDeinit(CSTATUS status) = 0;
3462

3563
/**
3664
* 初始化函数
3765
* @return
3866
*/
3967
CSTATUS init() final {
68+
CGRAPH_FUNCTION_BEGIN
69+
4070
CGRAPH_ASSERT_NOT_NULL(element_obj_)
71+
/* 对内部值name等信息,进行赋值 */
4172
auto ptr = dynamic_cast<GElementPtr>(element_obj_);
4273
ptr->name_ = this->name_;
43-
ptr->session_ = this->session_;
44-
return ptr->init();
74+
ptr->param_manager_ = this->param_manager_;
75+
76+
beginInit();
77+
status = ptr->init();
78+
finishInit(status);
79+
80+
CGRAPH_FUNCTION_END
4581
}
4682

83+
/**
84+
* 执行函数
85+
* @return
86+
*/
87+
CSTATUS run() final {
88+
CGRAPH_FUNCTION_BEGIN
89+
90+
CGRAPH_ASSERT_NOT_NULL(GAspectObject<T>::element_obj_);
91+
beginRun();
92+
status = dynamic_cast<GElementPtr>(GAspectObject<T>::element_obj_)->run();
93+
finishRun(status);
94+
95+
CGRAPH_FUNCTION_END
96+
}
4797

4898
/**
4999
* 逆初始化函数
50100
* @return
51101
*/
52102
CSTATUS deinit() final {
103+
CGRAPH_FUNCTION_BEGIN
53104
CGRAPH_ASSERT_NOT_NULL(element_obj_)
54105
auto ptr = dynamic_cast<GElementPtr>(element_obj_);
55-
return ptr->deinit();
106+
107+
beginDeinit();
108+
status = ptr->deinit();
109+
finishDeinit(status);
110+
111+
CGRAPH_FUNCTION_END
56112
}
57113

58114

src/GraphCtrl/GraphPipeline/GPipeline.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ CSTATUS GPipeline::registerGElement(GElementPtr *elementRef,
3939
* 如果不是group信息的话,且属于element(包含node和aspect)
4040
* 则直接内部创建该信息
4141
*/
42-
(*elementRef) = CGRAPH_SAFE_MALLOC_COBJECT(T);
42+
(*elementRef) = new(std::nothrow) T();
4343
}
4444

4545
CGRAPH_ASSERT_NOT_NULL(*elementRef)
@@ -65,10 +65,10 @@ GElementPtr GPipeline::createGNode(const GNodeInfo &info) {
6565
if (std::is_base_of<GNode, T>::value) {
6666
node = CGRAPH_SAFE_MALLOC_COBJECT(T);
6767
status = node->addDependElements(info.dependence);
68-
6968
if (STATUS_OK != status) {
7069
return nullptr;
7170
}
71+
7272
node->setName(info.name);
7373
node->setLoop(info.loop);
7474
node->setParamManager(this->param_manager_); // 设置参数信息类

tutorial/MyGAspect/MyLoggerAspect.h

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,28 @@
1313

1414
template <typename T>
1515
class MyLoggerAspect : public GAspect<T> {
16-
1716
public:
18-
void begin() override {
19-
CGRAPH_ECHO("----> begin to run this node ...");
17+
/**
18+
* 实现几个切面函数逻辑,模拟在对应执行的位置,输出log内容
19+
*/
20+
void beginInit() override {
21+
CGRAPH_ECHO("[MyLoggerAspect] ----> [%s] begin init ...", this->getName().c_str());
22+
}
23+
24+
/**
25+
* 根据run方法执行的结果,记录对应的信息
26+
* @param status
27+
*/
28+
void finishRun(CSTATUS status) override {
29+
if (STATUS_OK == status) {
30+
CGRAPH_ECHO("[MyLoggerAspect] ----> [%s] run finished, status is ok ...", this->getName().c_str());
31+
} else {
32+
CGRAPH_ECHO("[MyLoggerAspect] ----> [%s] run finished, error code is [%d] ...", this->getName().c_str(), status);
33+
}
2034
}
2135

22-
void finish() override {
23-
CGRAPH_ECHO("----> run this node finished ...");
36+
void beginDeinit() override {
37+
CGRAPH_ECHO("[MyLoggerAspect] ----> [%s] begin deinit ...", this->getName().c_str());
2438
}
2539
};
2640

tutorial/MyGAspect/MyTimerAspect.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
template <typename T>
1616
class MyTimerAspect : public GAspect<T> {
1717
public:
18-
void begin() override {
18+
/**
19+
* 实现计时切面逻辑,打印 run() 方法的执行时间
20+
*/
21+
void beginRun() override {
1922
start_ts_ = std::chrono::high_resolution_clock::now();
2023
}
2124

22-
void finish() override {
25+
void finishRun(CSTATUS status) override {
2326
std::chrono::duration<double, std::milli> time_span = std::chrono::high_resolution_clock::now() - start_ts_;
24-
CGRAPH_ECHO("----> this node time cost is : [%0.2lf] ms", time_span.count());
27+
CGRAPH_ECHO("[MyTimerAspect] ----> [%s] time cost is : [%0.2lf] ms", this->getName().c_str(), time_span.count());
2528
}
2629

2730
private:

tutorial/T09-Aspect.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
@File: T09-Aspect.cpp
55
@Time: 2021/9/28 10:40 下午
6-
@Desc:
6+
@Desc:
77
***************************/
88

99
#include "MyGNode/HelloWorldNode.h"
@@ -18,7 +18,7 @@ void tutorial_aspect() {
1818
GElementPtr a, b, c = nullptr;
1919

2020
/* 给 HelloWorldNode 类型的节点,添加 MyLoggerAspect 类型的切面 */
21-
pipeline->registerGElement<MyLoggerAspect<HelloWorldNode>>(&a);
21+
pipeline->registerGElement<MyLoggerAspect<HelloWorldNode>>(&a, {}, "nodeA");
2222

2323
pipeline->registerGElement<MyTimerAspect<MyNode1>>(&b, {a}, "nodeB", 2);
2424

0 commit comments

Comments
 (0)