| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| // |
| // ObjectWrapper.swift |
| // Utility type for adapting implementors of a `class` protocol to `Hashable` |
| // |
| |
| /// A `Hashable` representation of an object and its `ObjectIdentifier`. This is |
| /// useful because Swift classes aren't implicitly hashable based on identity. |
| internal struct ObjectWrapper<T>: Hashable { |
| let object: T |
| let objectIdentifier: ObjectIdentifier |
| |
| var hashValue: Int { return objectIdentifier.hashValue } |
| } |
| |
| internal func ==<T>(lhs: ObjectWrapper<T>, rhs: ObjectWrapper<T>) -> Bool { |
| return lhs.objectIdentifier == rhs.objectIdentifier |
| } |