summaryrefslogtreecommitdiff
path: root/swift/src/Ice/ValueFactoryManagerI.swift
blob: 0902d57fddc713dba4d6b195e75f5593cb7f74d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//

class ValueFactoryManagerI: ValueFactoryManager {
    private var factories = [String: ValueFactory]()
    private var mutex = Mutex()

    func add(factory: @escaping ValueFactory, id: String) throws {
        try mutex.sync {
            if factories[id] != nil {
                throw AlreadyRegisteredException(kindOfObject: "value factory", id: id, file: #file, line: #line)
            }
            factories[id] = factory
        }
    }

    func find(_ id: String) -> ValueFactory? {
        return mutex.sync {
            factories[id]
        }
    }
}