aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google
diff options
context:
space:
mode:
authorGravatar Jisi Liu <jisi.liu@gmail.com>2015-02-18 13:47:22 -0800
committerGravatar Jisi Liu <jisi.liu@gmail.com>2015-02-19 16:43:08 -0800
commitf173cdeb02618c117947bbed2646609f6101390e (patch)
tree1291766ddd482f9cda803df7c3e7e8bc1887d8bb /src/google
parent06a2e29855efbd67c86171ee822ec2e217f6fe29 (diff)
hashcode and equals for oneofs in nano.
Diffstat (limited to 'src/google')
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_field.cc22
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_field.h4
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_message_field.cc12
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_primitive_field.cc8
4 files changed, 34 insertions, 12 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_field.cc b/src/google/protobuf/compiler/javanano/javanano_field.cc
index 5565781c..07517567 100644
--- a/src/google/protobuf/compiler/javanano/javanano_field.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_field.cc
@@ -168,6 +168,28 @@ void SetCommonOneofVariables(const FieldDescriptor* descriptor,
SimpleItoa(descriptor->number());
}
+void GenerateOneofFieldEquals(const map<string, string>& variables,
+ io::Printer* printer) {
+ printer->Print(variables,
+ "if (this.has$capitalized_name$()) {\n"
+ " if (!this.$oneof_name$_.equals(other.$oneof_name$_)) {\n"
+ " return false;\n"
+ " }\n"
+ "} else {\n"
+ " if (other.has$capitalized_name$()) {\n"
+ " return false;\n"
+ " }\n"
+ "}\n");
+
+}
+
+void GenerateOneofFieldHashCode(const map<string, string>& variables,
+ io::Printer* printer) {
+ printer->Print(variables,
+ "result = 31 * result +\n"
+ " ($has_oneof_case$ ? this.$oneof_name$_.hashCode() : 0);\n");
+}
+
} // namespace javanano
} // namespace compiler
} // namespace protobuf
diff --git a/src/google/protobuf/compiler/javanano/javanano_field.h b/src/google/protobuf/compiler/javanano/javanano_field.h
index fae79ce4..b31b517b 100644
--- a/src/google/protobuf/compiler/javanano/javanano_field.h
+++ b/src/google/protobuf/compiler/javanano/javanano_field.h
@@ -114,6 +114,10 @@ class FieldGeneratorMap {
void SetCommonOneofVariables(const FieldDescriptor* descriptor,
map<string, string>* variables);
+void GenerateOneofFieldEquals(const map<string, string>& variables,
+ io::Printer* printer);
+void GenerateOneofFieldHashCode(const map<string, string>& variables,
+ io::Printer* printer);
} // namespace javanano
} // namespace compiler
diff --git a/src/google/protobuf/compiler/javanano/javanano_message_field.cc b/src/google/protobuf/compiler/javanano/javanano_message_field.cc
index 527121e6..6e12bf63 100644
--- a/src/google/protobuf/compiler/javanano/javanano_message_field.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_message_field.cc
@@ -214,20 +214,12 @@ GenerateSerializedSizeCode(io::Printer* printer) const {
void MessageOneofFieldGenerator::
GenerateEqualsCode(io::Printer* printer) const {
- printer->Print(variables_,
- "if (this.has$capitalized_name$()) {\n"
- " if (!this.$oneof_name$_.equals(other.$oneof_name$_)) {\n"
- " return false;\n"
- " }\n"
- "} else {\n"
- " if (other.has$capitalized_name$()) {\n"
- " return false;\n"
- " }\n"
- "}\n");
+ GenerateOneofFieldEquals(variables_, printer);
}
void MessageOneofFieldGenerator::
GenerateHashCodeCode(io::Printer* printer) const {
+ GenerateOneofFieldHashCode(variables_, printer);
}
// ===================================================================
diff --git a/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc b/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc
index 4bbaec82..038db6e2 100644
--- a/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc
@@ -765,10 +765,14 @@ void PrimitiveOneofFieldGenerator::GenerateSerializedSizeCode(
"}\n");
}
-void PrimitiveOneofFieldGenerator::GenerateEqualsCode(io::Printer* printer) const {
+void PrimitiveOneofFieldGenerator::GenerateEqualsCode(
+ io::Printer* printer) const {
+ GenerateOneofFieldEquals(variables_, printer);
}
-void PrimitiveOneofFieldGenerator::GenerateHashCodeCode(io::Printer* printer) const {
+void PrimitiveOneofFieldGenerator::GenerateHashCodeCode(
+ io::Printer* printer) const {
+ GenerateOneofFieldHashCode(variables_, printer);
}
// ===================================================================