| 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) | |
| { | |
| if (obj is ObjectIntPair<T>) | |
| { | |
| return Equals((ObjectIntPair<T>)obj); | |
| } | |
| return false; | |
| } | |
| public override int GetHashCode() | |
| { | |
| return obj.GetHashCode() * ((1 << 16) - 1) + number; | |
| } | |
| } | |
| } |