diff options
author | Yi Jin <jinyithu@google.com> | 2017-11-01 17:08:27 -0700 |
---|---|---|
committer | Yi Jin <jinyithu@google.com> | 2017-11-10 17:34:07 -0800 |
commit | e2f7f79d023f0b3ba2fee374492dde61f525ece6 (patch) | |
tree | 8ea7efe3b552f1cb23c2f4c2ef379be6fb02f19b /tools/streaming_proto | |
parent | 9a753af26b2ce27c10ad215aa70cf1bcd44d7915 (diff) |
Implement Cpu Info Section
Support carriage return in Read class, and add a new way to parse lines
which is not able to split purly by delimiters
Bug: 65642861
Test: unit test and on device test
Change-Id: Ib82dd4e458bb7d2fa33462b23fbe11b828325916
Diffstat (limited to 'tools/streaming_proto')
-rw-r--r-- | tools/streaming_proto/cpp/main.cpp | 25 | ||||
-rw-r--r-- | tools/streaming_proto/stream.proto | 14 | ||||
-rw-r--r-- | tools/streaming_proto/string_utils.cpp | 11 | ||||
-rw-r--r-- | tools/streaming_proto/string_utils.h | 9 |
4 files changed, 54 insertions, 5 deletions
diff --git a/tools/streaming_proto/cpp/main.cpp b/tools/streaming_proto/cpp/main.cpp index 481698432711..9aef56270ee2 100644 --- a/tools/streaming_proto/cpp/main.cpp +++ b/tools/streaming_proto/cpp/main.cpp @@ -18,6 +18,12 @@ make_filename(const FileDescriptorProto& file_descriptor) return file_descriptor.name() + ".h"; } +static inline bool +should_generate_enums_mapping(const EnumDescriptorProto& enu) +{ + return enu.options().GetExtension(stream_enum).enable_enums_mapping(); +} + static void write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& indent) { @@ -29,6 +35,23 @@ write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& ind << make_constant_name(value.name()) << " = " << value.number() << ";" << endl; } + + if (should_generate_enums_mapping(enu)) { + string name = make_constant_name(enu.name()); + string prefix = name + "_"; + text << indent << "const int _ENUM_" << name << "_COUNT = " << N << ";" << endl; + text << indent << "const char* _ENUM_" << name << "_NAMES[" << N << "] = {" << endl; + for (int i=0; i<N; i++) { + text << indent << INDENT << "\"" << stripPrefix(enu.value(i).name(), prefix) << "\"," << endl; + } + text << indent << "};" << endl; + text << indent << "const uint32_t _ENUM_" << name << "_VALUES[" << N << "] = {" << endl; + for (int i=0; i<N; i++) { + text << indent << INDENT << make_constant_name(enu.value(i).name()) << "," << endl; + } + text << indent << "};" << endl; + } + text << endl; } @@ -59,7 +82,7 @@ write_field(stringstream& text, const FieldDescriptorProto& field, const string& static inline bool should_generate_fields_mapping(const DescriptorProto& message) { - return message.options().GetExtension(stream).enable_fields_mapping(); + return message.options().GetExtension(stream_msg).enable_fields_mapping(); } static void diff --git a/tools/streaming_proto/stream.proto b/tools/streaming_proto/stream.proto index 123506c03cfd..c08120986cc7 100644 --- a/tools/streaming_proto/stream.proto +++ b/tools/streaming_proto/stream.proto @@ -21,12 +21,22 @@ import "google/protobuf/descriptor.proto"; package android.stream_proto; // This option tells streaming proto plugin to compile .proto files with extra features. -message StreamFlags { +message MessageOptions { // creates a mapping of field names of the message to its field ids optional bool enable_fields_mapping = 1; } extend google.protobuf.MessageOptions { // Flags used by streaming proto plugins - optional StreamFlags stream = 126856794; + optional MessageOptions stream_msg = 126856794; +} + +message EnumOptions { + // creates a mapping of enum names to its values, strip its prefix enum type for each value + optional bool enable_enums_mapping = 1; +} + +extend google.protobuf.EnumOptions { + // Flags used by streaming proto plugins + optional EnumOptions stream_enum = 126856794; } diff --git a/tools/streaming_proto/string_utils.cpp b/tools/streaming_proto/string_utils.cpp index bd34ab7aa44d..607d820033ff 100644 --- a/tools/streaming_proto/string_utils.cpp +++ b/tools/streaming_proto/string_utils.cpp @@ -108,6 +108,17 @@ split(const string& str, const char delimiter) return result; } +string +stripPrefix(const string& str, const string& prefix) +{ + if (str.size() <= prefix.size()) return str; + size_t i = 0, len = prefix.size(); + for (; i<len; i++) { + if (str[i] != prefix[i]) return str; + } + return str.substr(i); +} + } // namespace stream_proto } // namespace android diff --git a/tools/streaming_proto/string_utils.h b/tools/streaming_proto/string_utils.h index d6f195f67188..315b27531afd 100644 --- a/tools/streaming_proto/string_utils.h +++ b/tools/streaming_proto/string_utils.h @@ -26,15 +26,20 @@ string make_constant_name(const string& str); string file_base_name(const string& str); /** - * Replace all occurances of 'replace' with 'with'. + * Replaces all occurances of 'replace' with 'with'. */ string replace_string(const string& str, const char replace, const char with); /** - * Split a string to parts by delimiter. + * Splits a string to parts by delimiter. */ vector<string> split(const string& str, const char delimiter); +/** + * Returns the rest of str if it has prefix, otherwise return all. + */ +string stripPrefix(const string& str, const string& prefix); + } // namespace stream_proto } // namespace android |