Skip to content

Commit bd59622

Browse files
authored
Merge pull request #892 from os-fpga/add_generated_unique_blocks_uxsdcxx
add generated unique_blocks_uxsdcxx to include/openfpga/annotation
2 parents b54a3f0 + 804682e commit bd59622

10 files changed

+1885
-1
lines changed

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,11 @@ set(DIFF_FILE ${PATCH_DIR}/libpugiutil_fix/DIFF/pugixml_util_cpp.diff)
208208
apply_patch(${DIFF_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/OpenFPGA/vtr-verilog-to-routing/libs/libpugiutil/src "pugixml_util.cpp")
209209

210210
# copy RS additions and patch CMakefiles
211-
message(STATUS "NOTE: COPYING OpenFPGA CMakefile..")
211+
message(STATUS "NOTE: COPYING/PATCHING OpenFPGA CMakefiles..")
212212
#set(DIFF_FILE ${PATCH_DIR}/CMAKE_fix/OpenFPGA_CMake.diff)
213213
#apply_patch(${DIFF_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/OpenFPGA "OpenFPGA CMakefile")
214+
set(DIFF_FILE ${PATCH_DIR}/CMAKE_fix/PATCHED_OpenFPGA/libs_cmakefile.diff)
215+
apply_patch(${DIFF_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/OpenFPGA/libs "OpenFPGA/libs CMakefile")
214216

215217
# temporarily swithed to copying because of "partial patch" issue in Raptor build.
216218
file(COPY
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
2+
index de555d3af..0abd99c90 100644
3+
--- a/libs/CMakeLists.txt
4+
+++ b/libs/CMakeLists.txt
5+
@@ -10,4 +10,4 @@ add_subdirectory(libpcf)
6+
add_subdirectory(libbusgroup)
7+
add_subdirectory(libnamemanager)
8+
add_subdirectory(libtileconfig)
9+
-add_subdirectory(libopenfpgacapnproto)
10+
+#add_subdirectory(libopenfpgacapnproto) # replaced by generated src
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# This file is generated by uxsdcap 0.1.0.
2+
# https://github.com/duck2/uxsdcxx
3+
# Modify only if your build process doesn't involve regenerating this file.
4+
#
5+
# Cmdline: uxsdcxx/uxsdcap.py /home/serge/bes/13oct/Backend/OpenFPGA/libs/libopenfpgacapnproto/gen/unique_blocks.xsd unique_blocks_capnproto_generate/unique_blocks_uxsdcxx.h unique_blocks_capnproto_generate/unique_blocks_uxsdcxx_capnp.h unique_blocks_capnproto_generate/unique_blocks_uxsdcxx_interface.h /home/serge/bes/13oct/Backend/OpenFPGA/libs/libopenfpgacapnproto/gen
6+
# Input file: /home/serge/bes/13oct/Backend/OpenFPGA/libs/libopenfpgacapnproto/gen/unique_blocks.xsd
7+
# md5sum of input file: 1db9d740309076fa51f61413bae1e072
8+
9+
@0xacc1f04555994b8c;
10+
using Cxx = import "/capnp/c++.capnp";
11+
$Cxx.namespace("ucap");
12+
13+
enum Type {
14+
uxsdInvalid @0;
15+
cbx @1;
16+
cby @2;
17+
sb @3;
18+
}
19+
20+
struct Instance {
21+
x @0 :UInt32;
22+
y @1 :UInt32;
23+
}
24+
25+
struct Block {
26+
type @0 :Type;
27+
x @1 :UInt32;
28+
y @2 :UInt32;
29+
instances @3 :List(Instance);
30+
}
31+
32+
struct UniqueBlocks {
33+
blocks @0 :List(Block);
34+
}
Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
// Generated by Cap'n Proto compiler, DO NOT EDIT
2+
// source: unique_blocks_uxsdcxx.capnp
3+
4+
#include "unique_blocks_uxsdcxx.capnp.h"
5+
6+
namespace capnp {
7+
namespace schemas {
8+
static const ::capnp::_::AlignedData<36> b_c16da73cfbff13c7 = {
9+
{ 0, 0, 0, 0, 5, 0, 6, 0,
10+
199, 19, 255, 251, 60, 167, 109, 193,
11+
32, 0, 0, 0, 2, 0, 0, 0,
12+
140, 75, 153, 85, 69, 240, 193, 172,
13+
0, 0, 0, 0, 0, 0, 0, 0,
14+
0, 0, 0, 0, 0, 0, 0, 0,
15+
21, 0, 0, 0, 42, 1, 0, 0,
16+
37, 0, 0, 0, 7, 0, 0, 0,
17+
0, 0, 0, 0, 0, 0, 0, 0,
18+
33, 0, 0, 0, 103, 0, 0, 0,
19+
0, 0, 0, 0, 0, 0, 0, 0,
20+
0, 0, 0, 0, 0, 0, 0, 0,
21+
103, 101, 110, 47, 117, 110, 105, 113,
22+
117, 101, 95, 98, 108, 111, 99, 107,
23+
115, 95, 117, 120, 115, 100, 99, 120,
24+
120, 46, 99, 97, 112, 110, 112, 58,
25+
84, 121, 112, 101, 0, 0, 0, 0,
26+
0, 0, 0, 0, 1, 0, 1, 0,
27+
16, 0, 0, 0, 1, 0, 2, 0,
28+
0, 0, 0, 0, 0, 0, 0, 0,
29+
41, 0, 0, 0, 98, 0, 0, 0,
30+
0, 0, 0, 0, 0, 0, 0, 0,
31+
1, 0, 0, 0, 0, 0, 0, 0,
32+
37, 0, 0, 0, 34, 0, 0, 0,
33+
0, 0, 0, 0, 0, 0, 0, 0,
34+
2, 0, 0, 0, 0, 0, 0, 0,
35+
29, 0, 0, 0, 34, 0, 0, 0,
36+
0, 0, 0, 0, 0, 0, 0, 0,
37+
3, 0, 0, 0, 0, 0, 0, 0,
38+
21, 0, 0, 0, 26, 0, 0, 0,
39+
0, 0, 0, 0, 0, 0, 0, 0,
40+
117, 120, 115, 100, 73, 110, 118, 97,
41+
108, 105, 100, 0, 0, 0, 0, 0,
42+
99, 98, 120, 0, 0, 0, 0, 0,
43+
99, 98, 121, 0, 0, 0, 0, 0,
44+
115, 98, 0, 0, 0, 0, 0, 0, }
45+
};
46+
::capnp::word const* const bp_c16da73cfbff13c7 = b_c16da73cfbff13c7.words;
47+
#if !CAPNP_LITE
48+
static const uint16_t m_c16da73cfbff13c7[] = {1, 2, 3, 0};
49+
const ::capnp::_::RawSchema s_c16da73cfbff13c7 = {
50+
0xc16da73cfbff13c7, b_c16da73cfbff13c7.words, 36, nullptr, m_c16da73cfbff13c7,
51+
0, 4, nullptr, nullptr, nullptr, { &s_c16da73cfbff13c7, nullptr, nullptr, 0, 0, nullptr }, false
52+
};
53+
#endif // !CAPNP_LITE
54+
CAPNP_DEFINE_ENUM(Type_c16da73cfbff13c7, c16da73cfbff13c7);
55+
static const ::capnp::_::AlignedData<50> b_cc86674979cf0fd6 = {
56+
{ 0, 0, 0, 0, 5, 0, 6, 0,
57+
214, 15, 207, 121, 73, 103, 134, 204,
58+
32, 0, 0, 0, 1, 0, 1, 0,
59+
140, 75, 153, 85, 69, 240, 193, 172,
60+
0, 0, 7, 0, 0, 0, 0, 0,
61+
0, 0, 0, 0, 0, 0, 0, 0,
62+
21, 0, 0, 0, 74, 1, 0, 0,
63+
41, 0, 0, 0, 7, 0, 0, 0,
64+
0, 0, 0, 0, 0, 0, 0, 0,
65+
37, 0, 0, 0, 119, 0, 0, 0,
66+
0, 0, 0, 0, 0, 0, 0, 0,
67+
0, 0, 0, 0, 0, 0, 0, 0,
68+
103, 101, 110, 47, 117, 110, 105, 113,
69+
117, 101, 95, 98, 108, 111, 99, 107,
70+
115, 95, 117, 120, 115, 100, 99, 120,
71+
120, 46, 99, 97, 112, 110, 112, 58,
72+
73, 110, 115, 116, 97, 110, 99, 101,
73+
0, 0, 0, 0, 0, 0, 0, 0,
74+
0, 0, 0, 0, 1, 0, 1, 0,
75+
8, 0, 0, 0, 3, 0, 4, 0,
76+
0, 0, 0, 0, 0, 0, 0, 0,
77+
0, 0, 1, 0, 0, 0, 0, 0,
78+
0, 0, 0, 0, 0, 0, 0, 0,
79+
41, 0, 0, 0, 18, 0, 0, 0,
80+
0, 0, 0, 0, 0, 0, 0, 0,
81+
36, 0, 0, 0, 3, 0, 1, 0,
82+
48, 0, 0, 0, 2, 0, 1, 0,
83+
1, 0, 0, 0, 1, 0, 0, 0,
84+
0, 0, 1, 0, 1, 0, 0, 0,
85+
0, 0, 0, 0, 0, 0, 0, 0,
86+
45, 0, 0, 0, 18, 0, 0, 0,
87+
0, 0, 0, 0, 0, 0, 0, 0,
88+
40, 0, 0, 0, 3, 0, 1, 0,
89+
52, 0, 0, 0, 2, 0, 1, 0,
90+
120, 0, 0, 0, 0, 0, 0, 0,
91+
8, 0, 0, 0, 0, 0, 0, 0,
92+
0, 0, 0, 0, 0, 0, 0, 0,
93+
0, 0, 0, 0, 0, 0, 0, 0,
94+
0, 0, 0, 0, 0, 0, 0, 0,
95+
8, 0, 0, 0, 0, 0, 0, 0,
96+
0, 0, 0, 0, 0, 0, 0, 0,
97+
0, 0, 0, 0, 0, 0, 0, 0,
98+
121, 0, 0, 0, 0, 0, 0, 0,
99+
8, 0, 0, 0, 0, 0, 0, 0,
100+
0, 0, 0, 0, 0, 0, 0, 0,
101+
0, 0, 0, 0, 0, 0, 0, 0,
102+
0, 0, 0, 0, 0, 0, 0, 0,
103+
8, 0, 0, 0, 0, 0, 0, 0,
104+
0, 0, 0, 0, 0, 0, 0, 0,
105+
0, 0, 0, 0, 0, 0, 0, 0, }
106+
};
107+
::capnp::word const* const bp_cc86674979cf0fd6 = b_cc86674979cf0fd6.words;
108+
#if !CAPNP_LITE
109+
static const uint16_t m_cc86674979cf0fd6[] = {0, 1};
110+
static const uint16_t i_cc86674979cf0fd6[] = {0, 1};
111+
const ::capnp::_::RawSchema s_cc86674979cf0fd6 = {
112+
0xcc86674979cf0fd6, b_cc86674979cf0fd6.words, 50, nullptr, m_cc86674979cf0fd6,
113+
0, 2, i_cc86674979cf0fd6, nullptr, nullptr, { &s_cc86674979cf0fd6, nullptr, nullptr, 0, 0, nullptr }, false
114+
};
115+
#endif // !CAPNP_LITE
116+
static const ::capnp::_::AlignedData<84> b_e65125b552e5bccc = {
117+
{ 0, 0, 0, 0, 5, 0, 6, 0,
118+
204, 188, 229, 82, 181, 37, 81, 230,
119+
32, 0, 0, 0, 1, 0, 2, 0,
120+
140, 75, 153, 85, 69, 240, 193, 172,
121+
1, 0, 7, 0, 0, 0, 0, 0,
122+
0, 0, 0, 0, 0, 0, 0, 0,
123+
21, 0, 0, 0, 50, 1, 0, 0,
124+
37, 0, 0, 0, 7, 0, 0, 0,
125+
0, 0, 0, 0, 0, 0, 0, 0,
126+
33, 0, 0, 0, 231, 0, 0, 0,
127+
0, 0, 0, 0, 0, 0, 0, 0,
128+
0, 0, 0, 0, 0, 0, 0, 0,
129+
103, 101, 110, 47, 117, 110, 105, 113,
130+
117, 101, 95, 98, 108, 111, 99, 107,
131+
115, 95, 117, 120, 115, 100, 99, 120,
132+
120, 46, 99, 97, 112, 110, 112, 58,
133+
66, 108, 111, 99, 107, 0, 0, 0,
134+
0, 0, 0, 0, 1, 0, 1, 0,
135+
16, 0, 0, 0, 3, 0, 4, 0,
136+
0, 0, 0, 0, 0, 0, 0, 0,
137+
0, 0, 1, 0, 0, 0, 0, 0,
138+
0, 0, 0, 0, 0, 0, 0, 0,
139+
97, 0, 0, 0, 42, 0, 0, 0,
140+
0, 0, 0, 0, 0, 0, 0, 0,
141+
92, 0, 0, 0, 3, 0, 1, 0,
142+
104, 0, 0, 0, 2, 0, 1, 0,
143+
1, 0, 0, 0, 1, 0, 0, 0,
144+
0, 0, 1, 0, 1, 0, 0, 0,
145+
0, 0, 0, 0, 0, 0, 0, 0,
146+
101, 0, 0, 0, 18, 0, 0, 0,
147+
0, 0, 0, 0, 0, 0, 0, 0,
148+
96, 0, 0, 0, 3, 0, 1, 0,
149+
108, 0, 0, 0, 2, 0, 1, 0,
150+
2, 0, 0, 0, 2, 0, 0, 0,
151+
0, 0, 1, 0, 2, 0, 0, 0,
152+
0, 0, 0, 0, 0, 0, 0, 0,
153+
105, 0, 0, 0, 18, 0, 0, 0,
154+
0, 0, 0, 0, 0, 0, 0, 0,
155+
100, 0, 0, 0, 3, 0, 1, 0,
156+
112, 0, 0, 0, 2, 0, 1, 0,
157+
3, 0, 0, 0, 0, 0, 0, 0,
158+
0, 0, 1, 0, 3, 0, 0, 0,
159+
0, 0, 0, 0, 0, 0, 0, 0,
160+
109, 0, 0, 0, 82, 0, 0, 0,
161+
0, 0, 0, 0, 0, 0, 0, 0,
162+
108, 0, 0, 0, 3, 0, 1, 0,
163+
136, 0, 0, 0, 2, 0, 1, 0,
164+
116, 121, 112, 101, 0, 0, 0, 0,
165+
15, 0, 0, 0, 0, 0, 0, 0,
166+
199, 19, 255, 251, 60, 167, 109, 193,
167+
0, 0, 0, 0, 0, 0, 0, 0,
168+
0, 0, 0, 0, 0, 0, 0, 0,
169+
15, 0, 0, 0, 0, 0, 0, 0,
170+
0, 0, 0, 0, 0, 0, 0, 0,
171+
0, 0, 0, 0, 0, 0, 0, 0,
172+
120, 0, 0, 0, 0, 0, 0, 0,
173+
8, 0, 0, 0, 0, 0, 0, 0,
174+
0, 0, 0, 0, 0, 0, 0, 0,
175+
0, 0, 0, 0, 0, 0, 0, 0,
176+
0, 0, 0, 0, 0, 0, 0, 0,
177+
8, 0, 0, 0, 0, 0, 0, 0,
178+
0, 0, 0, 0, 0, 0, 0, 0,
179+
0, 0, 0, 0, 0, 0, 0, 0,
180+
121, 0, 0, 0, 0, 0, 0, 0,
181+
8, 0, 0, 0, 0, 0, 0, 0,
182+
0, 0, 0, 0, 0, 0, 0, 0,
183+
0, 0, 0, 0, 0, 0, 0, 0,
184+
0, 0, 0, 0, 0, 0, 0, 0,
185+
8, 0, 0, 0, 0, 0, 0, 0,
186+
0, 0, 0, 0, 0, 0, 0, 0,
187+
0, 0, 0, 0, 0, 0, 0, 0,
188+
105, 110, 115, 116, 97, 110, 99, 101,
189+
115, 0, 0, 0, 0, 0, 0, 0,
190+
14, 0, 0, 0, 0, 0, 0, 0,
191+
0, 0, 0, 0, 0, 0, 0, 0,
192+
0, 0, 0, 0, 0, 0, 0, 0,
193+
0, 0, 0, 0, 3, 0, 1, 0,
194+
16, 0, 0, 0, 0, 0, 0, 0,
195+
214, 15, 207, 121, 73, 103, 134, 204,
196+
0, 0, 0, 0, 0, 0, 0, 0,
197+
0, 0, 0, 0, 0, 0, 0, 0,
198+
14, 0, 0, 0, 0, 0, 0, 0,
199+
0, 0, 0, 0, 0, 0, 0, 0,
200+
0, 0, 0, 0, 0, 0, 0, 0, }
201+
};
202+
::capnp::word const* const bp_e65125b552e5bccc = b_e65125b552e5bccc.words;
203+
#if !CAPNP_LITE
204+
static const ::capnp::_::RawSchema* const d_e65125b552e5bccc[] = {
205+
&s_c16da73cfbff13c7,
206+
&s_cc86674979cf0fd6,
207+
};
208+
static const uint16_t m_e65125b552e5bccc[] = {3, 0, 1, 2};
209+
static const uint16_t i_e65125b552e5bccc[] = {0, 1, 2, 3};
210+
const ::capnp::_::RawSchema s_e65125b552e5bccc = {
211+
0xe65125b552e5bccc, b_e65125b552e5bccc.words, 84, d_e65125b552e5bccc, m_e65125b552e5bccc,
212+
2, 4, i_e65125b552e5bccc, nullptr, nullptr, { &s_e65125b552e5bccc, nullptr, nullptr, 0, 0, nullptr }, false
213+
};
214+
#endif // !CAPNP_LITE
215+
static const ::capnp::_::AlignedData<39> b_f6ad8a85615a2b06 = {
216+
{ 0, 0, 0, 0, 5, 0, 6, 0,
217+
6, 43, 90, 97, 133, 138, 173, 246,
218+
32, 0, 0, 0, 1, 0, 0, 0,
219+
140, 75, 153, 85, 69, 240, 193, 172,
220+
1, 0, 7, 0, 0, 0, 0, 0,
221+
0, 0, 0, 0, 0, 0, 0, 0,
222+
21, 0, 0, 0, 106, 1, 0, 0,
223+
41, 0, 0, 0, 7, 0, 0, 0,
224+
0, 0, 0, 0, 0, 0, 0, 0,
225+
37, 0, 0, 0, 63, 0, 0, 0,
226+
0, 0, 0, 0, 0, 0, 0, 0,
227+
0, 0, 0, 0, 0, 0, 0, 0,
228+
103, 101, 110, 47, 117, 110, 105, 113,
229+
117, 101, 95, 98, 108, 111, 99, 107,
230+
115, 95, 117, 120, 115, 100, 99, 120,
231+
120, 46, 99, 97, 112, 110, 112, 58,
232+
85, 110, 105, 113, 117, 101, 66, 108,
233+
111, 99, 107, 115, 0, 0, 0, 0,
234+
0, 0, 0, 0, 1, 0, 1, 0,
235+
4, 0, 0, 0, 3, 0, 4, 0,
236+
0, 0, 0, 0, 0, 0, 0, 0,
237+
0, 0, 1, 0, 0, 0, 0, 0,
238+
0, 0, 0, 0, 0, 0, 0, 0,
239+
13, 0, 0, 0, 58, 0, 0, 0,
240+
0, 0, 0, 0, 0, 0, 0, 0,
241+
8, 0, 0, 0, 3, 0, 1, 0,
242+
36, 0, 0, 0, 2, 0, 1, 0,
243+
98, 108, 111, 99, 107, 115, 0, 0,
244+
14, 0, 0, 0, 0, 0, 0, 0,
245+
0, 0, 0, 0, 0, 0, 0, 0,
246+
0, 0, 0, 0, 0, 0, 0, 0,
247+
0, 0, 0, 0, 3, 0, 1, 0,
248+
16, 0, 0, 0, 0, 0, 0, 0,
249+
204, 188, 229, 82, 181, 37, 81, 230,
250+
0, 0, 0, 0, 0, 0, 0, 0,
251+
0, 0, 0, 0, 0, 0, 0, 0,
252+
14, 0, 0, 0, 0, 0, 0, 0,
253+
0, 0, 0, 0, 0, 0, 0, 0,
254+
0, 0, 0, 0, 0, 0, 0, 0, }
255+
};
256+
::capnp::word const* const bp_f6ad8a85615a2b06 = b_f6ad8a85615a2b06.words;
257+
#if !CAPNP_LITE
258+
static const ::capnp::_::RawSchema* const d_f6ad8a85615a2b06[] = {
259+
&s_e65125b552e5bccc,
260+
};
261+
static const uint16_t m_f6ad8a85615a2b06[] = {0};
262+
static const uint16_t i_f6ad8a85615a2b06[] = {0};
263+
const ::capnp::_::RawSchema s_f6ad8a85615a2b06 = {
264+
0xf6ad8a85615a2b06, b_f6ad8a85615a2b06.words, 39, d_f6ad8a85615a2b06, m_f6ad8a85615a2b06,
265+
1, 1, i_f6ad8a85615a2b06, nullptr, nullptr, { &s_f6ad8a85615a2b06, nullptr, nullptr, 0, 0, nullptr }, false
266+
};
267+
#endif // !CAPNP_LITE
268+
} // namespace schemas
269+
} // namespace capnp
270+
271+
// =======================================================================================
272+
273+
namespace ucap {
274+
275+
// Instance
276+
#if CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
277+
constexpr uint16_t Instance::_capnpPrivate::dataWordSize;
278+
constexpr uint16_t Instance::_capnpPrivate::pointerCount;
279+
#endif // !CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
280+
#if !CAPNP_LITE
281+
#if CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
282+
constexpr ::capnp::Kind Instance::_capnpPrivate::kind;
283+
constexpr ::capnp::_::RawSchema const* Instance::_capnpPrivate::schema;
284+
#endif // !CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
285+
#endif // !CAPNP_LITE
286+
287+
// Block
288+
#if CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
289+
constexpr uint16_t Block::_capnpPrivate::dataWordSize;
290+
constexpr uint16_t Block::_capnpPrivate::pointerCount;
291+
#endif // !CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
292+
#if !CAPNP_LITE
293+
#if CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
294+
constexpr ::capnp::Kind Block::_capnpPrivate::kind;
295+
constexpr ::capnp::_::RawSchema const* Block::_capnpPrivate::schema;
296+
#endif // !CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
297+
#endif // !CAPNP_LITE
298+
299+
// UniqueBlocks
300+
#if CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
301+
constexpr uint16_t UniqueBlocks::_capnpPrivate::dataWordSize;
302+
constexpr uint16_t UniqueBlocks::_capnpPrivate::pointerCount;
303+
#endif // !CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
304+
#if !CAPNP_LITE
305+
#if CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
306+
constexpr ::capnp::Kind UniqueBlocks::_capnpPrivate::kind;
307+
constexpr ::capnp::_::RawSchema const* UniqueBlocks::_capnpPrivate::schema;
308+
#endif // !CAPNP_NEED_REDUNDANT_CONSTEXPR_DECL
309+
#endif // !CAPNP_LITE
310+
311+
312+
} // namespace
313+

0 commit comments

Comments
 (0)