0001 import Foundation 0002 0003 private class Node<T
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] {> { 0004 var nodes
PathTree.swift:4 var nodes = [String: Node<T>]()PathTree.swift:5 var handler: [T] = []= [String: Node<T>]() 0005 var handler
PathTree.swift:38 if let _ = node.nodes[pathSegment] {PathTree.swift:39 return inflateTreeWithGenerator(&generator, node: &node.nodes[pathSegment]!)PathTree.swift:44 node.nodes[pathSegment] = nextNodePathTree.swift:82 let variableNodes = node.nodes.filter {PathTree.swift:88 return findValues(&node.nodes[variableNode.0]!, params: ¶ms, 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: ¶ms, generator: &generator, values: values, exclude: exclude)PathTree.swift:102 if let handlerNode = node.nodes["*"] {PathTree.swift:106 let nextValues = findValues(&node.nodes["*"]!, params: ¶ms, generator: &generator,: [T] = [] 0006 } 0007 0008 class PathTree
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
HandlerManager.swift:16 let pathTree: PathTree<Handler>HandlerManager.swift:20 pathTree = PathTree<Handler>()> { 0009 0010 private var rootNode
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] {= Node<T>() 0011 0012 func addHandler
PathTree.swift:29 return inflateTreeWithGenerator(&generator, node: &rootNode)PathTree.swift:57 let handler = findValues(&rootNode, params: ¶ms, generator: &generator, values: [], exclude: true).firstPathTree.swift:67 let handlers = findValues(&rootNode, params: ¶ms, generator: &generator, values: [])(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:39 pathTree.addHandler(handler, toPath: path, overwrite: !allowsMultiples)HandlerManager.swift:51 pathTree.addHandler(handler, toPath: path, overwrite: allowsMultiples)(path: String) -> [String: String] { 0022 let result = findValue(path) 0023 return result.params 0024 } 0025 0026 private func inflateTreeToPath
HandlerManager.swift:34 return pathTree.paramsForPath(fullPath)(path: String) -> Node<T> { 0027 var generator = segmentsForPath(path) 0028 0029 return inflateTreeWithGenerator(&generator, node: &rootNode) 0030 } 0031 0032 private func inflateTreeWithGenerator
PathTree.swift:13 let node = inflateTreeToPath(path)(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
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)(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: ¶ms, generator: &generator, values: [], exclude: true).first 0058 0059 return (handler: handler, params: params) 0060 } 0061 0062 func findValues
HandlerManager.swift:64 let result = pathTree.findValue(path)PathTree.swift:22 let result = findValue(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: ¶ms, generator: &generator, values: []) 0068 return (handlers: handlers, params: params) 0069 } 0070 0071 private func findValues
HandlerManager.swift:83 let result = pathTree.findValues(path)(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: ¶ms, 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: ¶ms, 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: ¶ms, generator: &generator, 0107 values: values, exclude: exclude) 0108 return nextValues 0109 } 0110 0111 return values 0112 } 0113 0114 private func segmentsForPath
PathTree.swift:57 let handler = findValues(&rootNode, params: ¶ms, generator: &generator, values: [], exclude: true).firstPathTree.swift:67 let handlers = findValues(&rootNode, params: ¶ms, generator: &generator, values: [])PathTree.swift:88 return findValues(&node.nodes[variableNode.0]!, params: ¶ms, generator: &generator, values: values, exclude: exclude)PathTree.swift:97 let nextValues = findValues(&node.nodes[pathToken]!, params: ¶ms, generator: &generator, values: values, exclude: exclude)PathTree.swift:106 let nextValues = findValues(&node.nodes["*"]!, params: ¶ms, generator: &generator,(path: String) -> IndexingGenerator<[String]> { 0115 let pathSegments: [String] = (stripQuery(path)).split("/") 0116 return pathSegments.generate() 0117 } 0118 0119 private func stripQuery
PathTree.swift:27 var generator = segmentsForPath(path)PathTree.swift:53 var generator = segmentsForPath(path)PathTree.swift:64 var generator = segmentsForPath(path)(path: String) -> String { 0120 0121 if let path = path.split("?").first { 0122 return path 0123 } 0124 return path 0125 } 0126 } 0127
PathTree.swift:115 let pathSegments: [String] = (stripQuery(path)).split("/")