Updated for swift 5. Removed Perfect-Thread dependency

This commit is contained in:
Kyle Jessup 2020-05-19 14:01:00 -04:00
parent 06c2bf73b3
commit 0d5e45e95c
2 changed files with 13 additions and 13 deletions

View File

@ -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"])
]
)

View File

@ -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 {