diff options
author | Jisi Liu <jisi.liu@gmail.com> | 2015-02-03 18:15:12 -0800 |
---|---|---|
committer | Jisi Liu <jisi.liu@gmail.com> | 2015-02-03 18:15:12 -0800 |
commit | d5839d2b4d45a6af02fe5852ace768ab3d40b5ff (patch) | |
tree | 8c96257c57185590736778b2a3d183c886f96cbc /src | |
parent | 4d64e65f0974f56310dacd3c6f6a7425ff8e9bf3 (diff) | |
download | protobuf-d5839d2b4d45a6af02fe5852ace768ab3d40b5ff.tar.gz protobuf-d5839d2b4d45a6af02fe5852ace768ab3d40b5ff.tar.bz2 protobuf-d5839d2b4d45a6af02fe5852ace768ab3d40b5ff.zip |
parsing and serialzation for maps in JavaNano.
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/compiler/javanano/javanano_map_field.cc | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_map_field.cc b/src/google/protobuf/compiler/javanano/javanano_map_field.cc index 4453cdfa..dead3685 100644 --- a/src/google/protobuf/compiler/javanano/javanano_map_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_map_field.cc @@ -89,6 +89,7 @@ void SetMapVariables(const Params& params, const FieldDescriptor* value = ValueField(descriptor); (*variables)["name"] = RenameJavaKeywords(UnderscoresToCamelCase(descriptor)); + (*variables)["number"] = SimpleItoa(descriptor->number()); (*variables)["key_type"] = TypeName(params, key, false); (*variables)["boxed_key_type"] = TypeName(params,key, true); (*variables)["key_desc_type"] = @@ -101,9 +102,9 @@ void SetMapVariables(const Params& params, (*variables)["value_tag"] = SimpleItoa(internal::WireFormat::MakeTag(value)); (*variables)["type_parameters"] = (*variables)["boxed_key_type"] + ", " + (*variables)["boxed_value_type"]; - (*variables)["value_default"] = + (*variables)["value_class"] = value->type() == FieldDescriptor::TYPE_MESSAGE - ? "new " + (*variables)["value_type"] + "()" + ? (*variables)["value_type"] + ".class" : "null"; } } // namespace @@ -132,21 +133,35 @@ GenerateClearCode(io::Printer* printer) const { void MapFieldGenerator:: GenerateMergingCode(io::Printer* printer) const { printer->Print(variables_, - "$name$ = com.google.protobuf.nano.MapUtil.mergeEntry(\n" - " $name$, input,\n" + "this.$name$ = com.google.protobuf.nano.MapUtil.Internal.mergeEntry(\n" + " input, this.$name$,\n" " com.google.protobuf.nano.InternalNano.$key_desc_type$,\n" " com.google.protobuf.nano.InternalNano.$value_desc_type$,\n" - " $value_default$,\n" + " $value_class$,\n" " $key_tag$, $value_tag$);\n" "\n"); } void MapFieldGenerator:: GenerateSerializationCode(io::Printer* printer) const { + printer->Print(variables_, + "if (this.$name$ != null) {\n" + " com.google.protobuf.nano.MapUtil.Internal.serializeMapField(\n" + " output, this.$name$, $number$,\n" + " com.google.protobuf.nano.InternalNano.$key_desc_type$,\n" + " com.google.protobuf.nano.InternalNano.$value_desc_type$);\n" + "}\n"); } void MapFieldGenerator:: GenerateSerializedSizeCode(io::Printer* printer) const { + printer->Print(variables_, + "if (this.$name$ != null) {\n" + " size += com.google.protobuf.nano.MapUtil.Internal.computeMapFieldSize(\n" + " this.$name$, $number$,\n" + " com.google.protobuf.nano.InternalNano.$key_desc_type$,\n" + " com.google.protobuf.nano.InternalNano.$value_desc_type$);\n" + "}\n"); } void MapFieldGenerator:: |