| 220 | } |
| 221 | |
| 222 | void ToolCodeRender::GenerateToolImplCpp(SyntaxTree *stree, FILE *write) { |
| 223 | char file_name[128]{'\0'}; |
| 224 | name_render_.GetToolImplFileName(stree->GetName(), file_name, sizeof(file_name)); |
| 225 | |
| 226 | string buffer; |
| 227 | name_render_.GetCopyright("phxrpc_pb2tool", stree->GetProtoFile(), &buffer, false); |
| 228 | |
| 229 | fprintf(write, "/* %s.cpp\n", file_name); |
| 230 | fprintf(write, "%s", buffer.c_str()); |
| 231 | fprintf(write, "*/\n"); |
| 232 | fprintf(write, "\n"); |
| 233 | |
| 234 | fprintf(write, "#include \"%s.h\"\n", file_name); |
| 235 | fprintf(write, "\n"); |
| 236 | |
| 237 | name_render_.GetClientFileName(stree->GetName(), file_name, sizeof(file_name)); |
| 238 | fprintf(write, "#include \"%s.h\"\n", file_name); |
| 239 | fprintf(write, "\n"); |
| 240 | fprintf(write, "#include \"phxrpc/file.h\"\n"); |
| 241 | |
| 242 | fprintf(write, "\n"); |
| 243 | fprintf(write, "\n"); |
| 244 | |
| 245 | fprintf(write, "using namespace phxrpc;\n"); |
| 246 | fprintf(write, "using namespace std;\n"); |
| 247 | |
| 248 | fprintf(write, "\n"); |
| 249 | fprintf(write, "\n"); |
| 250 | |
| 251 | char class_name[128]{'\0'}; |
| 252 | name_render_.GetToolImplClassName(stree->GetName(), class_name, sizeof(class_name)); |
| 253 | |
| 254 | fprintf(write, "%s::%s() {\n", class_name, class_name); |
| 255 | fprintf(write, "}\n"); |
| 256 | fprintf(write, "\n"); |
| 257 | |
| 258 | fprintf(write, "%s::~%s() {\n", class_name, class_name); |
| 259 | fprintf(write, "}\n"); |
| 260 | fprintf(write, "\n"); |
| 261 | |
| 262 | char client_class[128]{'\0'}, req_class[128]{'\0'}, resp_class[128]{'\0'}; |
| 263 | name_render_.GetClientClassName(stree->GetName(), client_class, sizeof(client_class)); |
| 264 | |
| 265 | SyntaxFuncVector *flist{stree->GetFuncList()}; |
| 266 | auto fit(flist->cbegin()); |
| 267 | for (; flist->cend() != fit; ++fit) { |
| 268 | name_render_.GetMessageClassName(fit->GetReq()->GetType(), req_class, sizeof(req_class)); |
| 269 | name_render_.GetMessageClassName(fit->GetResp()->GetType(), resp_class, sizeof(resp_class)); |
| 270 | |
| 271 | fprintf(write, "int %s::%s(phxrpc::OptMap &opt_map) {\n", class_name, fit->GetName()); |
| 272 | fprintf(write, " %s req;\n", req_class); |
| 273 | fprintf(write, " %s resp;\n", resp_class); |
| 274 | fprintf(write, "\n"); |
| 275 | |
| 276 | if (0 == strcmp("PHXEcho", fit->GetName())) { |
| 277 | fprintf(write, " if (nullptr == opt_map.Get('s')) return -1;\n\n"); |
| 278 | fprintf(write, " req.set_value(opt_map.Get('s'));\n"); |
| 279 | } else { |
no test coverage detected