1 using System;
2 
3 namespace Google.Protobuf
4 {
5     /// <summary>
6     /// Struct used to hold the keys for the fieldByNumber table in DescriptorPool and the keys for the
7     /// extensionByNumber table in ExtensionRegistry.
8     /// </summary>
9     internal struct ObjectIntPair<T> : IEquatable<ObjectIntPair<T>> where T : class
10     {
11         private readonly int number;
12         private readonly T obj;
13 
ObjectIntPairGoogle.Protobuf.ObjectIntPair14         internal ObjectIntPair(T obj, int number)
15         {
16             this.number = number;
17             this.obj = obj;
18         }
19 
EqualsGoogle.Protobuf.ObjectIntPair20         public bool Equals(ObjectIntPair<T> other)
21         {
22             return obj == other.obj
23                    && number == other.number;
24         }
25 
EqualsGoogle.Protobuf.ObjectIntPair26         public override bool Equals(object obj)
27         {
28             if (obj is ObjectIntPair<T>)
29             {
30                 return Equals((ObjectIntPair<T>)obj);
31             }
32             return false;
33         }
34 
GetHashCodeGoogle.Protobuf.ObjectIntPair35         public override int GetHashCode()
36         {
37             return obj.GetHashCode() * ((1 << 16) - 1) + number;
38         }
39     }
40 }
41