Skip to content

Commit e1e2d8b

Browse files
authored
scheduler: pass registry (#13)
1 parent 411234d commit e1e2d8b

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

scheduler/common/pass_register.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include "pass_register.hpp"
2+
3+
namespace deepx
4+
{
5+
6+
PassRegistry &PassRegistry::instance()
7+
{
8+
static PassRegistry registry_ins;
9+
return registry_ins;
10+
}
11+
12+
void PassRegistry::register_pass(const std::string &name, pass_func func)
13+
{
14+
registry_[name] = func;
15+
}
16+
}

scheduler/common/pass_register.hpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <unordered_map>
4+
#include <functional>
5+
6+
/**
7+
* 使用REGISTER_PASS 宏用于注册pass
8+
*/
9+
namespace deepx
10+
{
11+
using pass_func = std::function<void()>;
12+
13+
class PassRegistry
14+
{
15+
public:
16+
static PassRegistry& instance();
17+
18+
void register_pass(const std::string &name, pass_func func);
19+
20+
PassRegistry(const PassRegistry&) = delete;
21+
PassRegistry& operator=(const PassRegistry&) = delete;
22+
23+
private:
24+
PassRegistry() = default;
25+
26+
private:
27+
std::unordered_map<std::string, pass_func> registry_;
28+
};
29+
}
30+
31+
32+
#define REGISTER_PASS(name, func) \
33+
struct Register##name { \
34+
Register##name() { \
35+
PassRegistry::instance().register_pass(#name, func); \
36+
} \
37+
}; \
38+
static Register##name register_##name;

0 commit comments

Comments
 (0)