diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-03-26 01:24:11 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-03-26 01:24:11 +0100 |
commit | 499a15993293bf3a793690bd8fe75a2459febb73 (patch) | |
tree | 5e53f24f98fb04ea808bee5c0fd0a686919cae49 /contrib/protoc-bnet/BnetCodeGenerator.cpp | |
parent | 092d52080f3c8378bc3e5f35b7066c03500314e2 (diff) |
Contrib: Added sources of the protoc plugin used to generate services
Diffstat (limited to 'contrib/protoc-bnet/BnetCodeGenerator.cpp')
-rw-r--r-- | contrib/protoc-bnet/BnetCodeGenerator.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/contrib/protoc-bnet/BnetCodeGenerator.cpp b/contrib/protoc-bnet/BnetCodeGenerator.cpp new file mode 100644 index 00000000000..f3627192755 --- /dev/null +++ b/contrib/protoc-bnet/BnetCodeGenerator.cpp @@ -0,0 +1,68 @@ +// +// Created by tea on 10.03.16. +// + +#include <vector> +#include "BnetFileGenerator.h" +#include "google/protobuf/compiler/cpp/cpp_helpers.h" +#include <google/protobuf/io/printer.h> +#include <google/protobuf/io/zero_copy_stream.h> +#include <google/protobuf/descriptor.pb.h> + +#include "BnetCodeGenerator.h" + +bool BnetCodeGenerator::Generate(pb::FileDescriptor const* file, std::string const& parameter, + pbc::GeneratorContext* generator_context, std::string* error) const +{ + std::vector<std::pair<std::string, std::string>> options; + google::protobuf::compiler::ParseGeneratorParameter(parameter, &options); + + // ----------------------------------------------------------------- + // parse generator options + + google::protobuf::compiler::cpp::Options file_options; + + for (int i = 0; i < options.size(); i++) + { + if (options[i].first == "dllexport_decl") + { + file_options.dllexport_decl = options[i].second; + } + else if (options[i].first == "safe_boundary_check") + { + file_options.safe_boundary_check = true; + } + else + { + *error = "Unknown generator option: " + options[i].first; + return false; + } + } + + // ----------------------------------------------------------------- + + + std::string basename = google::protobuf::compiler::cpp::StripProto(file->name()); + basename.append(".pb"); + + BnetFileGenerator file_generator(file, file_options); + + // Generate header. + { + pb::scoped_ptr <google::protobuf::io::ZeroCopyOutputStream> output( + generator_context->Open(basename + ".h")); + google::protobuf::io::Printer printer(output.get(), '$'); + file_generator.GenerateHeader(&printer); + } + + // Generate cc file. + { + pb::scoped_ptr <google::protobuf::io::ZeroCopyOutputStream> output( + generator_context->Open(basename + ".cc")); + google::protobuf::io::Printer printer(output.get(), '$'); + file_generator.GenerateSource(&printer); + } + + return true; +} + |