aboutsummaryrefslogtreecommitdiff
path: root/contrib/protoc-bnet/BnetCodeGenerator.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-03-26 01:24:11 +0100
committerShauren <shauren.trinity@gmail.com>2016-03-26 01:24:11 +0100
commit499a15993293bf3a793690bd8fe75a2459febb73 (patch)
tree5e53f24f98fb04ea808bee5c0fd0a686919cae49 /contrib/protoc-bnet/BnetCodeGenerator.cpp
parent092d52080f3c8378bc3e5f35b7066c03500314e2 (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.cpp68
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;
+}
+