Updated for swift 5. Removed Perfect-Thread dependency
This commit is contained in:
parent
06c2bf73b3
commit
0d5e45e95c
|
@ -1,19 +1,21 @@
|
|||
// swift-tools-version:4.0
|
||||
// swift-tools-version:5.1
|
||||
// Generated automatically by Perfect Assistant
|
||||
// Date: 2018-05-31 18:31:13 +0000
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "PerfectMustache",
|
||||
platforms: [
|
||||
.macOS(.v10_15)
|
||||
],
|
||||
products: [
|
||||
.library(name: "PerfectMustache", targets: ["PerfectMustache"])
|
||||
],
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/PerfectlySoft/Perfect-Thread.git", from: "3.0.0"),
|
||||
.package(url: "https://github.com/PerfectlySoft/PerfectLib.git", from: "3.0.0"),
|
||||
.package(url: "https://github.com/PerfectlySoft/PerfectLib.git", from: "4.0.0"),
|
||||
],
|
||||
targets: [
|
||||
.target(name: "PerfectMustache", dependencies: ["PerfectThread", "PerfectLib"]),
|
||||
.target(name: "PerfectMustache", dependencies: ["PerfectLib"]),
|
||||
.testTarget(name: "PerfectMustacheTests", dependencies: ["PerfectMustache"])
|
||||
]
|
||||
)
|
||||
|
|
|
@ -17,31 +17,29 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
|
||||
import PerfectThread
|
||||
import PerfectLib
|
||||
import Foundation
|
||||
|
||||
let mustacheExtension = "mustache"
|
||||
|
||||
private var mustacheTemplateCache = [String: (Int, MustacheTemplate)]()
|
||||
private let mustacheTemplateCacheLock = Threading.RWLock()
|
||||
private let mustacheTemplateCacheQueue = DispatchQueue(label: "mustacheTemplateCache", attributes: .concurrent)
|
||||
|
||||
private func getTemplateFromCache(_ path: String) throws -> MustacheTemplate {
|
||||
let file = File(path)
|
||||
var template: MustacheTemplate?
|
||||
let modDate = file.modificationTime
|
||||
|
||||
mustacheTemplateCacheLock.doWithReadLock {
|
||||
var template: MustacheTemplate? = mustacheTemplateCacheQueue.sync {
|
||||
if let fnd = mustacheTemplateCache[path], fnd.0 == modDate {
|
||||
template = fnd.1.clone() as? MustacheTemplate
|
||||
return fnd.1.clone() as? MustacheTemplate
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if let templateW = template?.clone() as? MustacheTemplate {
|
||||
return templateW
|
||||
}
|
||||
try mustacheTemplateCacheLock.doWithWriteLock {
|
||||
template = try mustacheTemplateCacheQueue.sync(flags: .barrier) {
|
||||
if let fnd = mustacheTemplateCache[path], fnd.0 == modDate {
|
||||
template = fnd.1.clone() as? MustacheTemplate
|
||||
return fnd.1.clone() as? MustacheTemplate
|
||||
} else {
|
||||
try file.open()
|
||||
defer { file.close() }
|
||||
|
@ -51,7 +49,7 @@ private func getTemplateFromCache(_ path: String) throws -> MustacheTemplate {
|
|||
let str = UTF8Encoding.encode(bytes: bytes)
|
||||
let templateW = try parser.parse(string: str)
|
||||
mustacheTemplateCache[path] = (modDate, templateW)
|
||||
template = templateW.clone() as? MustacheTemplate
|
||||
return templateW.clone() as? MustacheTemplate
|
||||
}
|
||||
}
|
||||
guard let templateW = template else {
|
||||
|
|
Loading…
Reference in New Issue