LMs // Use frozen structs on all subLMs.

This commit is contained in:
ShikiSuen 2022-05-03 23:24:35 +08:00
parent 25f1a85e9e
commit d0425f78c5
5 changed files with 24 additions and 49 deletions

View File

@ -31,8 +31,8 @@ import Foundation
// //
// LMInstantiator 100MB // LMInstantiator 100MB
private let lmCNS = vChewing.LMLite(consolidate: false) private var lmCNS = vChewing.LMLite(consolidate: false)
private let lmSymbols = vChewing.LMCore(reverse: true, consolidate: false, defaultScore: -13.0, forceDefaultScore: true) private var lmSymbols = vChewing.LMCore(reverse: true, consolidate: false, defaultScore: -13.0, forceDefaultScore: true)
extension vChewing { extension vChewing {
/// LMInstantiator is a facade for managing a set of models including /// LMInstantiator is a facade for managing a set of models including
@ -69,22 +69,21 @@ extension vChewing {
/// 使 LMLite /// 使 LMLite
/// LMLite /// LMLite
/// LMLite LMCore /// LMLite LMCore
/// 使 LMLiteMono
/// LMReplacements LMAssociates 使 /// LMReplacements LMAssociates 使
// //
/// Reverse /// Reverse
/// Reverse /// Reverse
let lmCore = LMCore(reverse: false, consolidate: false, defaultScore: -9.5, forceDefaultScore: false) var lmCore = LMCore(reverse: false, consolidate: false, defaultScore: -9.5, forceDefaultScore: false)
let lmMisc = LMCore(reverse: true, consolidate: false, defaultScore: -1, forceDefaultScore: false) var lmMisc = LMCore(reverse: true, consolidate: false, defaultScore: -1, forceDefaultScore: false)
// 使 // 使
// 使使 // 使使
let lmUserPhrases = LMLiteMono(consolidate: true) var lmUserPhrases = LMLite(consolidate: true)
let lmFiltered = LMLiteMono(consolidate: true) var lmFiltered = LMLite(consolidate: true)
let lmUserSymbols = LMLiteMono(consolidate: true) var lmUserSymbols = LMLite(consolidate: true)
let lmReplacements = LMReplacments() var lmReplacements = LMReplacments()
let lmAssociates = LMAssociates() var lmAssociates = LMAssociates()
// //
override init() {} override init() {}

View File

@ -27,7 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import Foundation import Foundation
extension vChewing { extension vChewing {
public class LMAssociates { @frozen public struct LMAssociates {
var keyValueMap: [String: [Megrez.KeyValuePair]] = [:] var keyValueMap: [String: [Megrez.KeyValuePair]] = [:]
var theData: String = "" var theData: String = ""
@ -36,17 +36,11 @@ extension vChewing {
theData = "" theData = ""
} }
deinit {
if isLoaded() {
close()
}
}
public func isLoaded() -> Bool { public func isLoaded() -> Bool {
!keyValueMap.isEmpty !keyValueMap.isEmpty
} }
@discardableResult public func open(_ path: String) -> Bool { @discardableResult mutating public func open(_ path: String) -> Bool {
if isLoaded() { if isLoaded() {
return false return false
} }
@ -98,7 +92,7 @@ extension vChewing {
return true return true
} }
public func close() { mutating public func close() {
if isLoaded() { if isLoaded() {
keyValueMap.removeAll() keyValueMap.removeAll()
} }

View File

@ -27,7 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import Foundation import Foundation
extension vChewing { extension vChewing {
public class LMCore { @frozen public struct LMCore {
var keyValueScoreMap: [String: [Megrez.Unigram]] = [:] var keyValueScoreMap: [String: [Megrez.Unigram]] = [:]
var theData: String = "" var theData: String = ""
var shouldReverse: Bool = false var shouldReverse: Bool = false
@ -47,17 +47,11 @@ extension vChewing {
shouldForceDefaultScore = forceDefaultScore shouldForceDefaultScore = forceDefaultScore
} }
deinit {
if isLoaded() {
close()
}
}
public func isLoaded() -> Bool { public func isLoaded() -> Bool {
!keyValueScoreMap.isEmpty !keyValueScoreMap.isEmpty
} }
@discardableResult public func open(_ path: String) -> Bool { @discardableResult mutating public func open(_ path: String) -> Bool {
if isLoaded() { if isLoaded() {
return false return false
} }
@ -132,7 +126,7 @@ extension vChewing {
return true return true
} }
public func close() { mutating public func close() {
if isLoaded() { if isLoaded() {
keyValueScoreMap.removeAll() keyValueScoreMap.removeAll()
} }
@ -152,17 +146,17 @@ extension vChewing {
IME.prtDebugIntel(strDump) IME.prtDebugIntel(strDump)
} }
open func bigramsForKeys(precedingKey: String, key: String) -> [Megrez.Bigram] { public func bigramsForKeys(precedingKey: String, key: String) -> [Megrez.Bigram] {
// Swift // Swift
// [Megrez.Bigram]() // [Megrez.Bigram]()
precedingKey == key ? [Megrez.Bigram]() : [Megrez.Bigram]() precedingKey == key ? [Megrez.Bigram]() : [Megrez.Bigram]()
} }
open func unigramsFor(key: String) -> [Megrez.Unigram] { public func unigramsFor(key: String) -> [Megrez.Unigram] {
keyValueScoreMap[key] ?? [Megrez.Unigram]() keyValueScoreMap[key] ?? [Megrez.Unigram]()
} }
open func hasUnigramsFor(key: String) -> Bool { public func hasUnigramsFor(key: String) -> Bool {
keyValueScoreMap[key] != nil keyValueScoreMap[key] != nil
} }
} }

View File

@ -27,7 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import Foundation import Foundation
extension vChewing { extension vChewing {
public class LMLite { @frozen public struct LMLite {
var keyValueMap: [String: [Megrez.KeyValuePair]] = [:] var keyValueMap: [String: [Megrez.KeyValuePair]] = [:]
var theData: String = "" var theData: String = ""
var allowConsolidation = false var allowConsolidation = false
@ -38,17 +38,11 @@ extension vChewing {
allowConsolidation = consolidate allowConsolidation = consolidate
} }
deinit {
if isLoaded() {
close()
}
}
public func isLoaded() -> Bool { public func isLoaded() -> Bool {
!keyValueMap.isEmpty !keyValueMap.isEmpty
} }
@discardableResult public func open(_ path: String) -> Bool { @discardableResult mutating public func open(_ path: String) -> Bool {
if isLoaded() { if isLoaded() {
return false return false
} }
@ -105,7 +99,7 @@ extension vChewing {
return true return true
} }
public func close() { mutating public func close() {
if isLoaded() { if isLoaded() {
keyValueMap.removeAll() keyValueMap.removeAll()
} }

View File

@ -27,7 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import Foundation import Foundation
extension vChewing { extension vChewing {
public class LMReplacments { @frozen public struct LMReplacments {
var keyValueMap: [String: String] = [:] var keyValueMap: [String: String] = [:]
var theData: String = "" var theData: String = ""
@ -36,17 +36,11 @@ extension vChewing {
theData = "" theData = ""
} }
deinit {
if isLoaded() {
close()
}
}
public func isLoaded() -> Bool { public func isLoaded() -> Bool {
!keyValueMap.isEmpty !keyValueMap.isEmpty
} }
@discardableResult public func open(_ path: String) -> Bool { @discardableResult mutating public func open(_ path: String) -> Bool {
if isLoaded() { if isLoaded() {
return false return false
} }
@ -98,7 +92,7 @@ extension vChewing {
return true return true
} }
public func close() { mutating public func close() {
if isLoaded() { if isLoaded() {
keyValueMap.removeAll() keyValueMap.removeAll()
} }