From 98e7f0930d8fd7a1487f19e8b77fafa1437b10c6 Mon Sep 17 00:00:00 2001 From: Woollim Date: Fri, 5 Sep 2025 15:47:51 +0900 Subject: [PATCH] Add removeAll() method to WeakMapTable --- Sources/WeakMapTable/WeakMapTable.swift | 7 +++++++ Tests/WeakMapTableTests/WeakMapTableTests.swift | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) 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 {