Fix concurrency thread-safe exception
This commit is contained in:
@@ -62,6 +62,7 @@ public class MTMathAtomFactory {
|
||||
"rfloor" : "\u{230B}"
|
||||
]
|
||||
|
||||
private static let delimValueLock = NSLock()
|
||||
static var _delimValueToName = [String: String]()
|
||||
public static var delimValueToName: [String: String] {
|
||||
if _delimValueToName.isEmpty {
|
||||
@@ -78,7 +79,11 @@ public class MTMathAtomFactory {
|
||||
}
|
||||
output[value] = key
|
||||
}
|
||||
_delimValueToName = output
|
||||
delimValueLock.lock()
|
||||
defer { delimValueLock.unlock() }
|
||||
if _delimValueToName.isEmpty {
|
||||
_delimValueToName = output
|
||||
}
|
||||
}
|
||||
return _delimValueToName
|
||||
}
|
||||
@@ -98,6 +103,7 @@ public class MTMathAtomFactory {
|
||||
"widetilde" : "\u{0303}"
|
||||
]
|
||||
|
||||
private static let accentValueLock = NSLock()
|
||||
static var _accentValueToName: [String: String]? = nil
|
||||
public static var accentValueToName: [String: String] {
|
||||
if _accentValueToName == nil {
|
||||
@@ -115,7 +121,11 @@ public class MTMathAtomFactory {
|
||||
}
|
||||
output[value] = key
|
||||
}
|
||||
_accentValueToName = output
|
||||
accentValueLock.lock()
|
||||
defer { accentValueLock.unlock() }
|
||||
if _accentValueToName == nil {
|
||||
_accentValueToName = output
|
||||
}
|
||||
}
|
||||
return _accentValueToName!
|
||||
}
|
||||
@@ -390,6 +400,7 @@ public class MTMathAtomFactory {
|
||||
"scriptscriptstyle" : MTMathStyle(style: .scriptOfScript),
|
||||
]
|
||||
|
||||
private static let textToLatexLock = NSLock()
|
||||
static var _textToLatexSymbolName: [String: String]? = nil
|
||||
public static var textToLatexSymbolName: [String: String] {
|
||||
get {
|
||||
@@ -413,13 +424,17 @@ public class MTMathAtomFactory {
|
||||
}
|
||||
output[atom.nucleus] = key
|
||||
}
|
||||
self._textToLatexSymbolName = output
|
||||
textToLatexLock.lock()
|
||||
defer { textToLatexLock.unlock() }
|
||||
if self._textToLatexSymbolName == nil {
|
||||
self._textToLatexSymbolName = output
|
||||
}
|
||||
}
|
||||
return self._textToLatexSymbolName!
|
||||
}
|
||||
set {
|
||||
self._textToLatexSymbolName = newValue
|
||||
}
|
||||
// set {
|
||||
// self._textToLatexSymbolName = newValue
|
||||
// }
|
||||
}
|
||||
|
||||
// public static let sharedInstance = MTMathAtomFactory()
|
||||
@@ -603,8 +618,13 @@ public class MTMathAtomFactory {
|
||||
e.g. to define a symbol for "lcm" one can call:
|
||||
`MTMathAtomFactory.add(latexSymbol:"lcm", value:MTMathAtomFactory.operatorWithName("lcm", limits: false))` */
|
||||
public static func add(latexSymbol name: String, value: MTMathAtom) {
|
||||
let _ = Self.textToLatexSymbolName
|
||||
// above force textToLatexSymbolName to instantiate first, _textToLatexSymbolName also initialized.
|
||||
textToLatexLock.lock()
|
||||
defer { textToLatexLock.unlock() }
|
||||
supportedLatexSymbols[name] = value
|
||||
Self.textToLatexSymbolName[value.nucleus] = name
|
||||
// below update the underlying dictionary entry.
|
||||
Self._textToLatexSymbolName?[value.nucleus] = name
|
||||
}
|
||||
|
||||
/** Returns a large opertor for the given name. If limits is true, limits are set up on
|
||||
|
||||
@@ -21,9 +21,15 @@ enum InterElementSpaceType : Int {
|
||||
}
|
||||
|
||||
var interElementSpaceArray = [[InterElementSpaceType]]()
|
||||
private let interElementLock = NSLock()
|
||||
|
||||
func getInterElementSpaces() -> [[InterElementSpaceType]] {
|
||||
if interElementSpaceArray.isEmpty {
|
||||
|
||||
interElementLock.lock()
|
||||
defer { interElementLock.unlock() }
|
||||
guard interElementSpaceArray.isEmpty else { return interElementSpaceArray }
|
||||
|
||||
interElementSpaceArray =
|
||||
// ordinary operator binary relation open close punct fraction
|
||||
[ [.none, .thin, .nsMedium, .nsThick, .none, .none, .none, .nsThin], // ordinary
|
||||
|
||||
Reference in New Issue
Block a user