SST/macro
keyword_registration.h
Go to the documentation of this file.
1 #ifndef sprockit_keyword_registration_H
2 #define sprockit_keyword_registration_H
3 
4 #include <sprockit/spkt_config.h>
5 #include <sprockit/unordered.h>
6 
7 #include <string>
8 #include <cstdio>
9 #include <list>
10 
11 namespace sprockit {
12 
14 {
15 
16  private:
17  static spkt_unordered_set<std::string>* valid_keywords_;
18 
19  static spkt_unordered_set<std::string>* valid_namespaces_;
20 
21 #if !SPKT_DISABLE_REGEX
22  static std::list<std::string>* regexps_;
23 #endif
24 
25  static spkt_unordered_set<std::string>* removed_;
26 
27  static bool inited_;
28 
29  static void init();
30 
31  public:
32  static void register_regexp(const std::string& regexp);
33 
34  static void register_namespace(const std::string& ns);
35 
36  static void register_keyword(const std::string& name);
37 
38  static bool is_valid_keyword(const std::string& name);
39 
40  static bool is_valid_namespace(const std::string& ns);
41 
42  static void validate_namespace(const std::string& ns);
43 
44  static void validate_keyword(const std::string& name, const std::string& val);
45 
46  static void delete_statics();
47 
48  static bool do_validation_;
49 
50 };
51 
53 {
54  public:
55  StaticNamespaceRegister(const char* ns);
56 
57  StaticNamespaceRegister(int num_ns, const char* namespaces[]);
58 };
59 
61 {
62  public:
63  StaticKeywordRegister(int num_keywords, const char* keywords[]);
64 };
65 
66 
67 #if !SPKT_DISABLE_REGEX
69 {
70  public:
71  StaticKeywordRegisterRegexp(const char* regexp);
72 };
73 #endif
74 
75 }
76 
77 #define RegisterKeywords(...) \
78  static const char* _keywords_[] = { __VA_ARGS__ }; \
79  static ::sprockit::StaticKeywordRegister _keyword_register_(sizeof(_keywords_) / sizeof(const char*), _keywords_)
80 
81 #define RegisterNamespaces(...) \
82  static const char* _namespaces_[] = { __VA_ARGS__ }; \
83  static ::sprockit::StaticNamespaceRegister _namespace_register_(sizeof(_namespaces_) / sizeof(const char*), _namespaces_)
84 
85 #endif
86 
static void validate_namespace(const std::string &ns)
static bool is_valid_namespace(const std::string &ns)
static void validate_keyword(const std::string &name, const std::string &val)
static std::list< std::string > * regexps_
static spkt_unordered_set< std::string > * valid_keywords_
static spkt_unordered_set< std::string > * removed_
static spkt_unordered_set< std::string > * valid_namespaces_
static void register_namespace(const std::string &ns)
static void register_keyword(const std::string &name)
static void register_regexp(const std::string &regexp)
static bool is_valid_keyword(const std::string &name)