Created
October 6, 2021 14:41
-
-
Save igrechuhin/863b8cc3768a96cd951fde8913412aa5 to your computer and use it in GitHub Desktop.
DebugPrinter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| final class DebugPrinter { | |
| private var address2Name: [UnsafeMutableRawPointer: String] = [:] | |
| private var typeIndex: [String: Int] = [:] | |
| private let marker: String | |
| private let formatter: DateFormatter = { | |
| let formatter = DateFormatter() | |
| formatter.dateFormat = "HH:mm:ss.SSS" | |
| return formatter | |
| }() | |
| private var now: String { | |
| formatter.string(from: Date()) | |
| } | |
| init(marker: String = "[T]") { | |
| self.marker = marker | |
| } | |
| func add<Instance>(_ object: Instance?, name: String? = nil) { | |
| guard let object = object else { return } | |
| let pointer = Unmanaged.passUnretained(object as AnyObject).toOpaque() | |
| guard address2Name[pointer] == nil else { return } | |
| let name = name ?? String(describing: type(of: object)) | |
| typeIndex[name, default: 0] += 1 | |
| let index = typeIndex[name]! | |
| address2Name[pointer] = "<\(name) #\(index)>" | |
| } | |
| func print<Instance>( | |
| _ object: Instance?, | |
| function: String = #function, | |
| _ extra: String = "" | |
| ) { | |
| Swift.print(marker, now, "\(name(object)).\(function)", extra) | |
| } | |
| func name<Instance>(_ object: Instance?) -> String { | |
| let typeName = String(describing: type(of: object)) | |
| guard let object = object else { return "\(typeName).nil" } | |
| add(object) | |
| let pointer = Unmanaged.passUnretained(object as AnyObject).toOpaque() | |
| return address2Name[pointer]! | |
| } | |
| } | |
| let debugPrinter = DebugPrinter() |
Author
debugPrinter.print(self, "\(debugPrinter.name(oldValue)) -> \(debugPrinter.name(owner))")
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.