diff options
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; +} + |