🛰️航天仿真算法库 SpaceAST
0.0.1
载入中...
搜索中...
未找到
CommandRouting.hpp
浏览该文件的文档.
1
20
21
#pragma once
22
23
#include "AstGlobal.h"
24
#include "AstUtil/StringView.hpp"
25
#include "AstUtil/ValueView.hpp"
26
#include "CommandUtil.hpp"
27
#include <vector>
28
#include <memory>
29
30
31
AST_NAMESPACE_BEGIN
32
41
class
CommandParams
:
public
std::vector<ValueView>
42
{
43
public
:
44
// todo
45
};
46
47
49
class
CommandHandler
50
{
51
public
:
56
virtual
errc_t
handle
(
const
CommandParams
& params,
CommandResult
& result)
const
= 0;
57
58
virtual
~CommandHandler
() =
default
;
59
};
60
61
63
class
RoutingHandleResult
64
{
65
public
:
66
CommandParams
& params() {
return
params_; }
67
CommandHandler
* handler() {
return
handler_; }
68
void
setHandler(
CommandHandler
* handler) { handler_ = handler; }
69
private
:
70
CommandParams
params_{};
71
CommandHandler
* handler_{
nullptr
};
72
};
73
74
75
77
class
AST_CMD_API
CommandTrie
78
{
79
public
:
80
class
Node
81
{
82
public
:
83
Node
() =
default
;
84
Node
(
StringView
key)
85
: key_(key)
86
{}
88
const
Node
*
findChild
(
StringView
key)
const
89
{
90
for
(
auto
& child : children_)
91
{
92
if
(key == child.key_)
93
return
&child;
94
}
95
return
nullptr
;
96
}
98
Node
&
ensureChild
(
StringView
key)
99
{
100
for
(
auto
& child : children_)
101
{
102
if
(key == child.key_)
103
return
child;
104
}
105
children_.emplace_back(key);
106
auto
& child = children_.back();
107
return
child;
108
}
109
public
:
110
int
numParams_{-1};
111
std::string key_{};
112
std::shared_ptr<CommandHandler> handler_{};
113
std::vector<Node> children_{};
114
};
115
Node& addRule(
StringView
tmpl);
116
void
addRule(
StringView
tmpl, std::shared_ptr<CommandHandler> handler);
117
errc_t find(
StringView
text,
RoutingHandleResult
& result)
const
;
118
private
:
119
Node root_{};
120
};
121
122
125
AST_NAMESPACE_END
ast::CommandHandler
命令处理接口
定义
CommandRouting.hpp:50
ast::CommandHandler::handle
virtual errc_t handle(const CommandParams ¶ms, CommandResult &result) const =0
ast::CommandParams
命令参数
定义
CommandRouting.hpp:42
ast::CommandResult
定义
CommandAPI.hpp:37
ast::CommandTrie::Node
定义
CommandRouting.hpp:81
ast::CommandTrie::Node::findChild
const Node * findChild(StringView key) const
查找子节点
定义
CommandRouting.hpp:88
ast::CommandTrie::Node::ensureChild
Node & ensureChild(StringView key)
确保子节点存在
定义
CommandRouting.hpp:98
ast::CommandTrie
路由树
定义
CommandRouting.hpp:78
ast::RoutingHandleResult
路由结果
定义
CommandRouting.hpp:64
ast::StringViewBasic< char >
src
AstCmd
CommandRouting.hpp
制作者
1.12.0