| #region Copyright notice and license |
| // Protocol Buffers - Google's data interchange format |
| // Copyright 2015 Google Inc. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| #endregion |
| |
| 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; |
| } |
| } |
| } |