aboutsummaryrefslogtreecommitdiff
path: root/src/ProtoGen/RepeatedEnumFieldGenerator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ProtoGen/RepeatedEnumFieldGenerator.cs')
-rw-r--r--src/ProtoGen/RepeatedEnumFieldGenerator.cs27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/ProtoGen/RepeatedEnumFieldGenerator.cs b/src/ProtoGen/RepeatedEnumFieldGenerator.cs
index b2f2aa53..c500d38b 100644
--- a/src/ProtoGen/RepeatedEnumFieldGenerator.cs
+++ b/src/ProtoGen/RepeatedEnumFieldGenerator.cs
@@ -43,7 +43,7 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
public void GenerateMembers(TextGenerator writer) {
- if (Descriptor.IsPacked && Descriptor.File.Options.OptimizeFor == FileOptions.Types.OptimizeMode.SPEED) {
+ if (Descriptor.IsPacked && OptimizeSpeed) {
writer.WriteLine("private int {0}MemoizedSerializedSize;", Name);
}
writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);
@@ -114,10 +114,12 @@ namespace Google.ProtocolBuffers.ProtoGen {
// TODO(jonskeet): Make a more efficient way of doing this
writer.WriteLine("int rawValue = input.ReadEnum();");
writer.WriteLine("if (!global::System.Enum.IsDefined(typeof({0}), rawValue)) {{", TypeName);
- writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now
- writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");
- writer.WriteLine(" }");
- writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong) rawValue);", Number);
+ if (!UseLiteRuntime) {
+ writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now
+ writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");
+ writer.WriteLine(" }");
+ writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong) rawValue);", Number);
+ }
writer.WriteLine("} else {");
writer.WriteLine(" Add{0}(({1}) rawValue);", PropertyName, TypeName);
writer.WriteLine("}");
@@ -173,5 +175,20 @@ namespace Google.ProtocolBuffers.ProtoGen {
writer.Outdent();
writer.WriteLine("}");
}
+
+ public override void WriteHash(TextGenerator writer) {
+ writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);
+ writer.WriteLine(" hash ^= i.GetHashCode();");
+ }
+
+ public override void WriteEquals(TextGenerator writer) {
+ writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);
+ writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);
+ writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);
+ }
+
+ public override void WriteToString(TextGenerator writer) {
+ writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name);
+ }
}
}