This repository has been archived by the owner on Jul 6, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtemplate.json
78 lines (78 loc) · 3.41 KB
/
template.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
"class" : "Resource",
"header" : "ris_lib/template.h",
"namespace" : "ris",
"resources" : [
{
"name" : "header_preamble",
"source" : "/* This file has been generated using ris, do not modify! */\n",
"source_type" : "string"
},
{
"name" : "header_includes",
"source" : "#include <string>\n",
"source_type" : "string"
},
{
"name" : "class_name",
"source" : "Resource",
"source_type" : "string"
},
{
"name" : "source_preamble",
"source" : "/* This file has been generated using ris, do not modify! */",
"source_type" : "string"
},
{
"name" : "source_includes",
"source" : "#include <unordered_map>",
"source_type" : "string"
},
{
"name" : "header",
"source" : "#pragma once\n{{header_preamble}}\n{{header_includes}}\nnamespace {{namespace_name}} {\nclass {{class_name}} /*final*/ {\npublic:\n{{header_declarations}}\npublic:\n typedef std::string(*ResourceGetter)();\npublic: // key/value api\ntemplate <typename TInserter>\nstatic void GetKeys(TInserter inserter) {\n static const char* keys[] = {\n{{header_resource_names}} };\n for (auto key : keys) {\n inserter(key);\n }\n}\npublic: // key/value api\n static std::string Get(std::string const& key);\n{{header_on_no_key}}};\n}\n",
"source_type" : "string"
},
{
"name" : "source",
"source" : "{{source_preamble}}\n{{source_default_include}}\n{{source_includes}}\n{{optional_compression_header}}namespace {{namespace_name}} {\n{{source_definitions}}std::string {{class_name}}::Get(std::string const& key) {\n static std::unordered_map<std::string,ResourceGetter> getters = {\n{{source_getters}} };\n auto getter = getters.find(key);\n if (getter == getters.end())\n return OnNoKey(key);\n return getter->second();\n}\n}\n",
"source_type" : "string"
},
{
"name" : "header_single_declaration",
"source" : " static std::string {{resource_member_name}}();\n",
"source_type" : "string"
},
{
"name" : "source_single_definition",
"source" : "std::string {{class_name}}::{{resource_member_name}}() {\n static char const literal[] = {{{source_literal_bytes}}\n };\n{{source_return_literal}}\n}\n",
"source_type" : "string"
},
{
"name" : "source_single_getter",
"source" : " { \"{{resource_name}}\", {{class_name}}::{{resource_member_name}} },\n",
"source_type" : "string"
},
{
"name" : "header_single_resource_name",
"source" : " \"{{resource_name}}\",\n",
"source_type" : "string"
},
{
"name" : "source_return_plain_literal",
"source" : " return std::string(literal, sizeof(literal)/sizeof(char));",
"source_type" : "string"
},
{
"name" : "source_return_compressed_literal",
"source" : " return bundle::unpack(std::string(literal, sizeof(literal)/sizeof(char)));",
"source_type" : "string"
},
{
"name" : "header_on_no_key",
"source" : "public:\n static std::string OnNoKey(std::string const& key=\"\") {\n return \"\";\n }\n",
"source_type" : "string"
}
],
"source" : "ris_lib/template.cpp"
}