Index: lib/unknown_field_set.dart |
diff --git a/lib/unknown_field_set.dart b/lib/unknown_field_set.dart |
index f35cbc5806d68b9e45424c11d1d438c8b143e15a..76caa746f51e2fbd260bfadda7a54ca3b441b45b 100644 |
--- a/lib/unknown_field_set.dart |
+++ b/lib/unknown_field_set.dart |
@@ -120,7 +120,14 @@ class UnknownFieldSet { |
return _areMapsEqual(o._fields, _fields); |
} |
- int get hashCode => _fields.hashCode; |
+ int get hashCode { |
+ int hash = 0; |
+ _fields.forEach((number, value) { |
+ hash = ((37 * hash) + number) & 0x3fffffff; |
+ hash = ((53 * hash) + value.hashCode) & 0x3fffffff; |
+ }); |
+ return hash; |
+ } |
String toString() => _toString(''); |
@@ -181,7 +188,28 @@ class UnknownFieldSetField { |
return true; |
} |
- int get hashCode => lengthDelimited.hashCode; |
+ int get hashCode { |
+ int hash = 0; |
+ lengthDelimited.forEach((value) { |
+ for (int i = 0; i < value.length; i++) { |
+ hash = (hash + value[i]) & 0x3fffffff; |
+ hash = (hash + hash << 10) & 0x3fffffff; |
+ hash = (hash ^ hash >> 6) & 0x3fffffff; |
+ } |
+ hash = (hash + hash << 3) & 0x3fffffff; |
+ hash = (hash ^ hash >> 11) & 0x3fffffff; |
+ hash = (hash + hash << 15) & 0x3fffffff; |
+ }); |
+ varints.forEach( |
+ (value) => hash = (hash + 7 * value.hashCode) & 0x3fffffff); |
+ fixed32s.forEach( |
+ (value) => hash = (hash + 37 * value.hashCode) & 0x3fffffff); |
+ fixed64s.forEach( |
+ (value) => hash = (hash + 53 * value.hashCode) & 0x3fffffff); |
+ groups.forEach( |
+ (value) => hash = (hash + value.hashCode) & 0x3fffffff); |
+ return hash; |
+ } |
List get values => [] |
..addAll(lengthDelimited) |