OSDN Git Service

Doutaku を 1.0 にアップデート
[kcd/KCD.git] / KCD / Queue.swift
1 //
2 //  Queue.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/06.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class Queue<T> {
12     
13     private var contents: [T] = []
14     private let lock = NSCondition()
15     
16     func dequeue() -> T {
17         
18         lock.lock()
19         defer { lock.unlock() }
20         
21         while contents.count == 0 {
22             
23             lock.wait()
24         }
25         
26         return contents.popLast()!
27     }
28     
29     func enqueue(_ obj: T) {
30         
31         lock.lock()
32         defer { lock.unlock() }
33         
34         contents.insert(obj, at: 0)
35         
36         lock.broadcast()
37     }
38 }