| #include "benchmarks.pb.h" |
| #include "datasets/google_message1/proto2/benchmark_message1_proto2.pb.h" |
| #include "datasets/google_message1/proto3/benchmark_message1_proto3.pb.h" |
| #include "datasets/google_message2/benchmark_message2.pb.h" |
| #include "datasets/google_message3/benchmark_message3.pb.h" |
| #include "datasets/google_message4/benchmark_message4.pb.h" |
| #include "data_proto2_to_proto3_util.h" |
| |
| #include <fstream> |
| |
| using google::protobuf::util::Proto3DataStripper; |
| |
| std::string ReadFile(const std::string& name) { |
| std::ifstream file(name.c_str()); |
| GOOGLE_CHECK(file.is_open()) << "Couldn't find file '" |
| << name |
| << "', please make sure you are running this command from the benchmarks" |
| << " directory.\n"; |
| return std::string((std::istreambuf_iterator<char>(file)), |
| std::istreambuf_iterator<char>()); |
| } |
| |
| int main(int argc, char *argv[]) { |
| if (argc % 2 == 0 || argc == 1) { |
| std::cerr << "Usage: [input_files] [output_file_names] where " << |
| "input_files are one to one mapping to output_file_names." << |
| std::endl; |
| return 1; |
| } |
| |
| for (int i = argc / 2; i > 0; i--) { |
| const std::string &input_file = argv[i]; |
| const std::string &output_file = argv[i + argc / 2]; |
| |
| std::cerr << "Generating " << input_file |
| << " to " << output_file << std::endl; |
| benchmarks::BenchmarkDataset dataset; |
| Message* message; |
| std::string dataset_payload = ReadFile(input_file); |
| GOOGLE_CHECK(dataset.ParseFromString(dataset_payload)) |
| << "Can' t parse data file " << input_file; |
| |
| if (dataset.message_name() == "benchmarks.proto3.GoogleMessage1") { |
| message = new benchmarks::proto3::GoogleMessage1; |
| } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage1") { |
| message = new benchmarks::proto2::GoogleMessage1; |
| } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage2") { |
| message = new benchmarks::proto2::GoogleMessage2; |
| } else if (dataset.message_name() == |
| "benchmarks.google_message3.GoogleMessage3") { |
| message = new benchmarks::google_message3::GoogleMessage3; |
| } else if (dataset.message_name() == |
| "benchmarks.google_message4.GoogleMessage4") { |
| message = new benchmarks::google_message4::GoogleMessage4; |
| } else { |
| std::cerr << "Unknown message type: " << dataset.message_name(); |
| exit(1); |
| } |
| |
| for (int i = 0; i < dataset.payload_size(); i++) { |
| message->ParseFromString(dataset.payload(i)); |
| Proto3DataStripper stripper; |
| stripper.StripMessage(message); |
| dataset.set_payload(i, message->SerializeAsString()); |
| } |
| |
| std::ofstream ofs(output_file); |
| ofs << dataset.SerializeAsString(); |
| ofs.close(); |
| } |
| |
| |
| return 0; |
| } |