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