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 // Generated automatically by Perfect Assistant
// Date: 2018-05-31 18:31:13 +0000 // Date: 2018-05-31 18:31:13 +0000
import PackageDescription import PackageDescription
let package = Package( let package = Package(
name: "PerfectMustache", name: "PerfectMustache",
platforms: [
.macOS(.v10_15)
],
products: [ products: [
.library(name: "PerfectMustache", targets: ["PerfectMustache"]) .library(name: "PerfectMustache", targets: ["PerfectMustache"])
], ],
dependencies: [ dependencies: [
.package(url: "https://github.com/PerfectlySoft/Perfect-Thread.git", from: "3.0.0"), .package(url: "https://github.com/PerfectlySoft/PerfectLib.git", from: "4.0.0"),
.package(url: "https://github.com/PerfectlySoft/PerfectLib.git", from: "3.0.0"),
], ],
targets: [ targets: [
.target(name: "PerfectMustache", dependencies: ["PerfectThread", "PerfectLib"]), .target(name: "PerfectMustache", dependencies: ["PerfectLib"]),
.testTarget(name: "PerfectMustacheTests", dependencies: ["PerfectMustache"]) .testTarget(name: "PerfectMustacheTests", dependencies: ["PerfectMustache"])
] ]
) )

View File

@ -17,31 +17,29 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
import PerfectThread
import PerfectLib import PerfectLib
import Foundation import Foundation
let mustacheExtension = "mustache" let mustacheExtension = "mustache"
private var mustacheTemplateCache = [String: (Int, MustacheTemplate)]() 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 { private func getTemplateFromCache(_ path: String) throws -> MustacheTemplate {
let file = File(path) let file = File(path)
var template: MustacheTemplate?
let modDate = file.modificationTime let modDate = file.modificationTime
var template: MustacheTemplate? = mustacheTemplateCacheQueue.sync {
mustacheTemplateCacheLock.doWithReadLock {
if let fnd = mustacheTemplateCache[path], fnd.0 == modDate { 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 { if let templateW = template?.clone() as? MustacheTemplate {
return templateW return templateW
} }
try mustacheTemplateCacheLock.doWithWriteLock { template = try mustacheTemplateCacheQueue.sync(flags: .barrier) {
if let fnd = mustacheTemplateCache[path], fnd.0 == modDate { if let fnd = mustacheTemplateCache[path], fnd.0 == modDate {
template = fnd.1.clone() as? MustacheTemplate return fnd.1.clone() as? MustacheTemplate
} else { } else {
try file.open() try file.open()
defer { file.close() } defer { file.close() }
@ -51,7 +49,7 @@ private func getTemplateFromCache(_ path: String) throws -> MustacheTemplate {
let str = UTF8Encoding.encode(bytes: bytes) let str = UTF8Encoding.encode(bytes: bytes)
let templateW = try parser.parse(string: str) let templateW = try parser.parse(string: str)
mustacheTemplateCache[path] = (modDate, templateW) mustacheTemplateCache[path] = (modDate, templateW)
template = templateW.clone() as? MustacheTemplate return templateW.clone() as? MustacheTemplate
} }
} }
guard let templateW = template else { guard let templateW = template else {