| using System; |
| |
| namespace Google.Protobuf |
| { |
| /// <summary> |
| /// Struct used to hold the keys for the fieldByNumber table in DescriptorPool and the keys for the |
| /// extensionByNumber table in ExtensionRegistry. |
| /// </summary> |
| internal struct ObjectIntPair<T> : IEquatable<ObjectIntPair<T>> where T : class |
| { |
| private readonly int number; |
| private readonly T obj; |
| |
| internal ObjectIntPair(T obj, int number) |
| { |
| this.number = number; |
| this.obj = obj; |
| } |
| |
| public bool Equals(ObjectIntPair<T> other) |
| { |
| return obj == other.obj |
| && number == other.number; |
| } |
| |
| public override bool Equals(object obj) => obj is ObjectIntPair<T> pair && Equals(pair); |
| |
| public override int GetHashCode() |
| { |
| return obj.GetHashCode() * ((1 << 16) - 1) + number; |
| } |
| } |
| } |