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
|
// 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"])
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue