-
Notifications
You must be signed in to change notification settings - Fork 0
/
c++-header.template
131 lines (105 loc) · 2.32 KB
/
c++-header.template
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// -*- mode:go-template -*-
// -*- mode:c++ -*-
// Generated from {{.Directory}} {{.BuildTime}}
#include <array>
#include <cstdint>
#include <string>
#include <vector>
#include <map>
#include <set>
{{- range .Imports}}
#include "{{.}}.hpp"
{{end}}
namespace {{.PackageName}} {
{{- if .Typedefs}}
// Typedefs
{{range .Typedefs}}
{{if not .IsEnum}}
using {{.Name}} = {{cpptype .TypeName}};
{{- end}}
{{- end}}
{{- end}}
{{- if .NotEnums}}
// Constants
{{range .NotEnums}}
const {{cpptype .TypeName}} {{.Name}} = {{.Value}};
{{- end}}
{{- end}}
{{- if .Enums}}
{{range .Enums}}
enum {{.Type.Name}} : {{cpptype .Type.TypeName}}
{
{{- range .Enumerators}}
{{.Name}} = {{.Value}},
{{- end}}
};
{{end}}
{{- end}}
{{- if .MapTypes}}
// Maps
{{- range .MapTypes}}
using {{.Name}} = std::map<{{restype .Key}}, {{restype .Value}}>;
{{- end}}
{{- end}}
{{- if .StructTypes}}
// Structs
{{range .StructTypes}}
struct {{.Name}}
{
{{- range .Fields -}}
{{if isslice .TypeName -}}
{{$t:=eltype .TypeName}}std::vector<{{cpptype $t}}> _{{decap .Name}};
{{else}}
{{$t:=eltype .TypeName}}{{restype $t}} _{{decap .Name}} {{dims .TypeName}};
{{- end}}
{{- end}}
};
{{end}}
{{- end}}
{{- if .ArrayTypes}}
// Arrays
{{- range .ArrayTypes}}
{{- if .IsVariableLength}}
using {{.Name}} = std::vector<{{cpptype .ElTypeName}}>;
{{else}}
using {{.Name}} = std::array<{{cpptype .ElTypeName}}, {{.Length}}>;
{{- end}}
{{- end}}
{{- end}}
{{if .Interfaces}}
// Interface arguments and results
{{range .Interfaces -}}
{{$interface := .Name}}
{{- range .Methods -}}
{{- if .Results}}
{{$n := len .Results}}
{{- if eq $n 1 -}}
{{- else -}}
struct {{$interface}}_{{.Name}}_Result {
{{- range $index, $arg := .Results}}
{{restype $arg.TypeName}} _{{$arg.Name}};
{{- end}}
};
{{end -}}
{{- end}}
{{- end}}
{{- end}}
// Interfaces
{{- range .Interfaces}}
{{$interface := .Name}}
class {{$interface}} {
public:
virtual ~{{.Name}}() = default;
{{- range .Methods}}
virtual
{{- if .Results -}}
{{- $n := len .Results}}
{{if eq $n 1}}{{$val := index .Results 0}}{{restype $val.TypeName}}{{else}}{{$interface}}_{{.Name}}_Result{{end -}}
{{else}}
void
{{- end}} {{.Name}}({{- range $index, $arg := .Args}}{{if eq $index 0}}{{else}}, {{end}}{{argtype $arg.TypeName}} {{$arg.Name}}{{end}}) = 0;
{{- end}}
};
{{- end}}
{{- end}}
} // namespace {{.PackageName}}