initial
This commit is contained in:
98
Pods/SwiftEntryKit/Source/Infra/EntryCachingHeuristic.swift
generated
Normal file
98
Pods/SwiftEntryKit/Source/Infra/EntryCachingHeuristic.swift
generated
Normal file
@@ -0,0 +1,98 @@
|
||||
//
|
||||
// EKEntryCacher.swift
|
||||
// SwiftEntryKit
|
||||
//
|
||||
// Created by Daniel Huri on 9/1/18.
|
||||
// Copyright © 2018 CocoaPods. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct CachedEntry {
|
||||
let view: EKEntryView
|
||||
let presentInsideKeyWindow: Bool
|
||||
let rollbackWindow: SwiftEntryKit.RollbackWindow
|
||||
}
|
||||
|
||||
protocol EntryCachingHeuristic: AnyObject {
|
||||
var entries: [CachedEntry] { set get }
|
||||
var isEmpty: Bool { get }
|
||||
|
||||
func dequeue() -> CachedEntry?
|
||||
func enqueue(entry: CachedEntry)
|
||||
|
||||
func removeEntries(by name: String)
|
||||
func removeEntries(withPriorityLowerOrEqualTo priority: EKAttributes.Precedence.Priority)
|
||||
func remove(entry: CachedEntry)
|
||||
func removeAll()
|
||||
|
||||
func contains(entryNamed name: String) -> Bool
|
||||
}
|
||||
|
||||
extension EntryCachingHeuristic {
|
||||
|
||||
var isEmpty: Bool {
|
||||
return entries.isEmpty
|
||||
}
|
||||
|
||||
func contains(entryNamed name: String) -> Bool {
|
||||
return entries.contains { $0.view.attributes.name == name }
|
||||
}
|
||||
|
||||
func dequeue() -> CachedEntry? {
|
||||
guard let first = entries.first else {
|
||||
return nil
|
||||
}
|
||||
entries.removeFirst()
|
||||
return first
|
||||
}
|
||||
|
||||
func removeEntries(withPriorityLowerOrEqualTo priority: EKAttributes.Precedence.Priority) {
|
||||
while let index = (entries.firstIndex { $0.view.attributes.precedence.priority <= priority }) {
|
||||
entries.remove(at: index)
|
||||
}
|
||||
}
|
||||
|
||||
func removeEntries(by name: String) {
|
||||
while let index = (entries.firstIndex { $0.view.attributes.name == name }) {
|
||||
entries.remove(at: index)
|
||||
}
|
||||
}
|
||||
|
||||
func remove(entry: CachedEntry) {
|
||||
guard let index = (entries.firstIndex { $0.view == entry.view }) else {
|
||||
return
|
||||
}
|
||||
entries.remove(at: index)
|
||||
}
|
||||
|
||||
func removeAll() {
|
||||
entries.removeAll()
|
||||
}
|
||||
}
|
||||
|
||||
class EKEntryChronologicalQueue: EntryCachingHeuristic {
|
||||
|
||||
var entries: [CachedEntry] = []
|
||||
|
||||
func enqueue(entry: CachedEntry) {
|
||||
entries.append(entry)
|
||||
}
|
||||
}
|
||||
|
||||
class EKEntryPriorityQueue: EntryCachingHeuristic {
|
||||
|
||||
var entries: [CachedEntry] = []
|
||||
|
||||
func enqueue(entry: CachedEntry) {
|
||||
let entryPriority = entry.view.attributes.precedence.priority
|
||||
let index = entries.firstIndex {
|
||||
return entryPriority > $0.view.attributes.precedence.priority
|
||||
}
|
||||
if let index = index {
|
||||
entries.insert(entry, at: index)
|
||||
} else {
|
||||
entries.append(entry)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user