0001    import Foundation
0002    
0003    private class Node
PathTree.swift:4
    var nodes = [String: Node<T>]()
PathTree.swift:10
    private var rootNode = Node<T>()
PathTree.swift:26
    private func inflateTreeToPath(path: String) -> Node<T> {
PathTree.swift:32
    private func inflateTreeWithGenerator(inout generator: IndexingGenerator<[String]>, inout node: Node<T>) -> Node<T> {
PathTree.swift:32
    private func inflateTreeWithGenerator(inout generator: IndexingGenerator<[String]>, inout node: Node<T>) -> Node<T> {
PathTree.swift:42
            var nextNode = Node<T>()
PathTree.swift:71
    private func findValues(inout node: Node<T>, inout params: [String: String], inout generator: IndexingGenerator<[String]>, values: [T], exclude: Bool = false) -> [T] {
<T
PathTree.swift:4
    var nodes = [String: Node<T>]()
PathTree.swift:5
    var handler: [T] = []
> { 0004 var nodes
PathTree.swift:38
            if let _ = node.nodes[pathSegment] {
PathTree.swift:39
                return inflateTreeWithGenerator(&generator, node: &node.nodes[pathSegment]!)
PathTree.swift:44
            node.nodes[pathSegment] = nextNode
PathTree.swift:82
            let variableNodes = node.nodes.filter {
PathTree.swift:88
                return findValues(&node.nodes[variableNode.0]!, params: &params, generator: &generator, values: values, exclude: exclude)
PathTree.swift:91
            if let handlerNode = node.nodes[pathToken] {
PathTree.swift:97
                let nextValues = findValues(&node.nodes[pathToken]!, params: &params, generator: &generator, values: values, exclude: exclude)
PathTree.swift:102
            if let handlerNode = node.nodes["*"] {
PathTree.swift:106
                let nextValues = findValues(&node.nodes["*"]!, params: &params, generator: &generator,
= [String: Node<T>]() 0005 var handler
PathTree.swift:15
            node.handler = [handler]
PathTree.swift:17
            node.handler.append(handler)
PathTree.swift:77
                    values.appendContentsOf(node.handler)
PathTree.swift:94
                    values.appendContentsOf(handlerNode.handler)
PathTree.swift:104
                    values.appendContentsOf(handlerNode.handler)
: [T] = [] 0006 } 0007 0008 class PathTree
HandlerManager.swift:16
    let pathTree: PathTree<Handler>
HandlerManager.swift:20
        pathTree = PathTree<Handler>()
<T
PathTree.swift:10
    private var rootNode = Node<T>()
PathTree.swift:12
    func addHandler(handler: T, toPath path: String, overwrite: Bool) {
PathTree.swift:26
    private func inflateTreeToPath(path: String) -> Node<T> {
PathTree.swift:32
    private func inflateTreeWithGenerator(inout generator: IndexingGenerator<[String]>, inout node: Node<T>) -> Node<T> {
PathTree.swift:32
    private func inflateTreeWithGenerator(inout generator: IndexingGenerator<[String]>, inout node: Node<T>) -> Node<T> {
PathTree.swift:42
            var nextNode = Node<T>()
PathTree.swift:52
    func findValue(path: String) -> (handler: T?, params: [String: String]) {
PathTree.swift:62
    func findValues(path: String) -> (handlers: [T], params: [String: String]) {
PathTree.swift:71
    private func findValues(inout node: Node<T>, inout params: [String: String], inout generator: IndexingGenerator<[String]>, values: [T], exclude: Bool = false) -> [T] {
PathTree.swift:71
    private func findValues(inout node: Node<T>, inout params: [String: String], inout generator: IndexingGenerator<[String]>, values: [T], exclude: Bool = false) -> [T] {
PathTree.swift:71
    private func findValues(inout node: Node<T>, inout params: [String: String], inout generator: IndexingGenerator<[String]>, values: [T], exclude: Bool = false) -> [T] {
> { 0009 0010 private var rootNode
PathTree.swift:29
        return inflateTreeWithGenerator(&generator, node: &rootNode)
PathTree.swift:57
        let handler = findValues(&rootNode, params: &params, generator: &generator, values: [], exclude: true).first
PathTree.swift:67
        let handlers = findValues(&rootNode, params: &params, generator: &generator, values: [])
= Node<T>() 0011 0012 func addHandler
HandlerManager.swift:39
        pathTree.addHandler(handler, toPath: path, overwrite: !allowsMultiples)
HandlerManager.swift:51
        pathTree.addHandler(handler, toPath: path, overwrite: allowsMultiples)
(handler: T, toPath path: String, overwrite: Bool) { 0013 let node = inflateTreeToPath(path) 0014 if overwrite { 0015 node.handler = [handler] 0016 } else { 0017 node.handler.append(handler) 0018 } 0019 } 0020 0021 func paramsForPath
HandlerManager.swift:34
        return pathTree.paramsForPath(fullPath)
(path: String) -> [String: String] { 0022 let result = findValue(path) 0023 return result.params 0024 } 0025 0026 private func inflateTreeToPath
PathTree.swift:13
        let node = inflateTreeToPath(path)
(path: String) -> Node<T> { 0027 var generator = segmentsForPath(path) 0028 0029 return inflateTreeWithGenerator(&generator, node: &rootNode) 0030 } 0031 0032 private func inflateTreeWithGenerator
PathTree.swift:29
        return inflateTreeWithGenerator(&generator, node: &rootNode)
PathTree.swift:39
                return inflateTreeWithGenerator(&generator, node: &node.nodes[pathSegment]!)
PathTree.swift:46
            return inflateTreeWithGenerator(&generator, node: &nextNode)
(inout generator: IndexingGenerator<[String]>, inout node: Node<T>) -> Node<T> { 0033 0034 var generator = generator 0035 0036 if let pathSegment = generator.next() { 0037 0038 if let _ = node.nodes[pathSegment] { 0039 return inflateTreeWithGenerator(&generator, node: &node.nodes[pathSegment]!) 0040 } 0041 0042 var nextNode = Node<T>() 0043 0044 node.nodes[pathSegment] = nextNode 0045 0046 return inflateTreeWithGenerator(&generator, node: &nextNode) 0047 } 0048 0049 return node 0050 } 0051 0052 func findValue
HandlerManager.swift:64
        let result = pathTree.findValue(path)
PathTree.swift:22
        let result = findValue(path)
(path: String) -> (handler: T?, params: [String: String]) { 0053 var generator = segmentsForPath(path) 0054 0055 var params = [String:String]() 0056 0057 let handler = findValues(&rootNode, params: &params, generator: &generator, values: [], exclude: true).first 0058 0059 return (handler: handler, params: params) 0060 } 0061 0062 func findValues
HandlerManager.swift:83
        let result = pathTree.findValues(path)
(path: String) -> (handlers: [T], params: [String: String]) { 0063 0064 var generator = segmentsForPath(path) 0065 0066 var params = [String:String]() 0067 let handlers = findValues(&rootNode, params: &params, generator: &generator, values: []) 0068 return (handlers: handlers, params: params) 0069 } 0070 0071 private func findValues
PathTree.swift:57
        let handler = findValues(&rootNode, params: &params, generator: &generator, values: [], exclude: true).first
PathTree.swift:67
        let handlers = findValues(&rootNode, params: &params, generator: &generator, values: [])
PathTree.swift:88
                return findValues(&node.nodes[variableNode.0]!, params: &params, generator: &generator, values: values, exclude: exclude)
PathTree.swift:97
                let nextValues = findValues(&node.nodes[pathToken]!, params: &params, generator: &generator, values: values, exclude: exclude)
PathTree.swift:106
                let nextValues = findValues(&node.nodes["*"]!, params: &params, generator: &generator,
(inout node: Node<T>, inout params: [String: String], inout generator: IndexingGenerator<[String]>, values: [T], exclude: Bool = false) -> [T] { 0072 0073 var values = values 0074 0075 guard let pathToken = generator.next() else { 0076 if exclude { 0077 values.appendContentsOf(node.handler) 0078 } 0079 return values 0080 } 0081 0082 let variableNodes = node.nodes.filter { 0083 $0.0.characters.first == ":" 0084 } 0085 0086 if let variableNode = variableNodes.first { 0087 params[variableNode.0] = pathToken 0088 return findValues(&node.nodes[variableNode.0]!, params: &params, generator: &generator, values: values, exclude: exclude) 0089 } 0090 0091 if let handlerNode = node.nodes[pathToken] { 0092 0093 if !exclude { 0094 values.appendContentsOf(handlerNode.handler) 0095 } 0096 0097 let nextValues = findValues(&node.nodes[pathToken]!, params: &params, generator: &generator, values: values, exclude: exclude) 0098 0099 return nextValues 0100 } 0101 0102 if let handlerNode = node.nodes["*"] { 0103 if !exclude { 0104 values.appendContentsOf(handlerNode.handler) 0105 } 0106 let nextValues = findValues(&node.nodes["*"]!, params: &params, generator: &generator, 0107 values: values, exclude: exclude) 0108 return nextValues 0109 } 0110 0111 return values 0112 } 0113 0114 private func segmentsForPath
PathTree.swift:27
        var generator = segmentsForPath(path)
PathTree.swift:53
        var generator = segmentsForPath(path)
PathTree.swift:64
        var generator = segmentsForPath(path)
(path: String) -> IndexingGenerator<[String]> { 0115 let pathSegments: [String] = (stripQuery(path)).split("/") 0116 return pathSegments.generate() 0117 } 0118 0119 private func stripQuery
PathTree.swift:115
        let pathSegments: [String] = (stripQuery(path)).split("/")
(path: String) -> String { 0120 0121 if let path = path.split("?").first { 0122 return path 0123 } 0124 return path 0125 } 0126 } 0127