diff --git a/Sources/WeakMapTable/WeakMapTable.swift b/Sources/WeakMapTable/WeakMapTable.swift index b5e74c1..e996334 100644 --- a/Sources/WeakMapTable/WeakMapTable.swift +++ b/Sources/WeakMapTable/WeakMapTable.swift @@ -68,6 +68,13 @@ final public class WeakMapTable where Key: AnyObject { } } + public func removeAll() { + self.lock.lock() + defer { + self.lock.unlock() + } + self.dictionary.removeAll() + } // MARK: Getting and Setting Values without Locking diff --git a/Tests/WeakMapTableTests/WeakMapTableTests.swift b/Tests/WeakMapTableTests/WeakMapTableTests.swift index 344ad89..e1cb70e 100644 --- a/Tests/WeakMapTableTests/WeakMapTableTests.swift +++ b/Tests/WeakMapTableTests/WeakMapTableTests.swift @@ -81,6 +81,23 @@ final class WeakMapTableTests: XCTestCase { XCTAssertNil(weakKey) XCTAssertNil(weakValue) } + + func testRemoveAll() { + let map = WeakMapTable() + let key = KeyObject() + weak var weakValue: ValueObject? + + _ = { + let value = ValueObject() + map.setValue(value, forKey: key) + weakValue = value + + map.removeAll() + }() + + XCTAssertNil(map.value(forKey: key)) + XCTAssertNil(weakValue) + } } private final class KeyObject {