Lines Matching full:current
55 let mut current = self; in insert() localVariable
59 let len = min(prefix.len(), current.prefix.len()); in insert()
61 .find(|&i| prefix[i] != current.prefix[i]) in insert()
64 // the common prefix is a substring of the current node's prefix, split the node in insert()
65 if common_prefix < current.prefix.len() { in insert()
67 prefix: current.prefix[common_prefix..].to_owned(), in insert()
68 children: mem::take(&mut current.children), in insert()
69 wild_child: current.wild_child, in insert()
70 indices: current.indices.clone(), in insert()
71 value: current.value.take(), in insert()
72 param_remapping: mem::take(&mut current.param_remapping), in insert()
73 priority: current.priority - 1, in insert()
77 // the current node now holds only the common prefix in insert()
78 current.children = vec![child]; in insert()
79 current.indices = vec![current.prefix[common_prefix]]; in insert()
80 current.prefix = prefix[..common_prefix].to_owned(); in insert()
81 current.wild_child = false; in insert()
91 if current.node_type == NodeType::Param in insert()
93 && current.children.len() == 1 in insert()
95 current = &mut current.children[0]; in insert()
96 current.priority += 1; in insert()
102 for mut i in 0..current.indices.len() { in insert()
104 if next == current.indices[i] { in insert()
105 i = current.update_child_priority(i); in insert()
106 current = &mut current.children[i]; in insert()
112 if !matches!(next, b':' | b'*') && current.node_type != NodeType::CatchAll { in insert()
113 current.indices.push(next); in insert()
114 let mut child = current.add_child(Node::default()); in insert()
115 child = current.update_child_priority(child); in insert()
118 let last = current.children[child].insert_child(prefix, &route, val)?; in insert()
124 if current.wild_child { in insert()
126 current = current.children.last_mut().unwrap(); in insert()
127 current.priority += 1; in insert()
130 if prefix.len() < current.prefix.len() in insert()
131 || current.prefix != prefix[..current.prefix.len()] in insert()
133 || current.node_type == NodeType::CatchAll in insert()
135 || (current.prefix.len() < prefix.len() in insert()
136 && prefix[current.prefix.len()] != b'/') in insert()
138 return Err(InsertError::conflict(&route, prefix, current)); in insert()
145 let last = current.insert_child(prefix, &route, val)?; in insert()
151 if current.value.is_some() { in insert()
152 return Err(InsertError::conflict(&route, prefix, current)); in insert()
155 // add the value to current node in insert()
156 current.value = Some(UnsafeCell::new(val)); in insert()
157 current.param_remapping = param_remapping; in insert()
212 let mut current = self; in insert_child() localVariable
218 // no wildcard, simply use the current node in insert_child()
220 current.value = Some(UnsafeCell::new(val)); in insert_child()
221 current.prefix = prefix.to_owned(); in insert_child()
222 return Ok(current); in insert_child()
228 // insert prefix before the current wildcard in insert_child()
230 current.prefix = prefix[..wildcard_index].to_owned(); in insert_child()
240 let child = current.add_child(child); in insert_child()
241 current.wild_child = true; in insert_child()
242 current = &mut current.children[child]; in insert_child()
243 current.priority += 1; in insert_child()
254 let child = current.add_child(child); in insert_child()
255 current = &mut current.children[child]; in insert_child()
260 current.value = Some(UnsafeCell::new(val)); in insert_child()
261 return Ok(current); in insert_child()
282 // insert prefix before the current wildcard in insert_child()
284 current.prefix = prefix[..wildcard_index].to_owned(); in insert_child()
296 let i = current.add_child(child); in insert_child()
297 current.wild_child = true; in insert_child()
299 return Ok(&mut current.children[i]); in insert_child()
313 …($skipped_nodes:ident, $path:ident, $current:ident, $params:ident, $backtracking:ident, $walk:life…
321 $current = &skipped.node;
340 let mut current = self; in at() localVariable
347 backtracker!(skipped_nodes, path, current, params, backtracking, 'walk); in at()
350 if path.len() > current.prefix.len() { in at()
351 let (prefix, rest) = path.split_at(current.prefix.len()); in at()
354 if prefix == current.prefix { in at()
362 if let Some(i) = current.indices.iter().position(|&c| c == first) { in at()
365 if current.wild_child { in at()
368 node: current, in at()
375 && current.children[i].prefix != b"/" in at()
376 && current.value.is_some() in at()
382 current = ¤t.children[i]; in at()
388 if !current.wild_child { in at()
390 if path == b"/" && current.value.is_some() { in at()
404 current = current.children.last().unwrap(); in at()
406 match current.node_type { in at()
413 if let [child] = current.children.as_slice() { in at()
417 && current.value.is_some() in at()
423 params.push(¤t.prefix[1..], param); in at()
427 current = child; in at()
448 params.push(¤t.prefix[1..], path); in at()
451 if let Some(ref value) = current.value { in at()
454 *key = ¤t.param_remapping[i][1..] in at()
461 if let [child] = current.children.as_slice() { in at()
462 current = child; in at()
464 if (current.prefix == b"/" && current.value.is_some()) in at()
465 || (current.prefix.is_empty() in at()
466 && current.indices == b"/") in at()
485 return match current.value { in at()
489 *key = ¤t.param_remapping[i][1..] in at()
493 params.push(¤t.prefix[1..], path); in at()
506 if path == current.prefix { in at()
507 if let Some(ref value) = current.value { in at()
509 params.for_each_key_mut(|(i, key)| *key = ¤t.param_remapping[i][1..]); in at()
519 if path == b"/" && current.wild_child && current.node_type != NodeType::Root { in at()
525 if let Some(i) = current.indices.iter().position(|&c| c == b'/') { in at()
526 current = ¤t.children[i]; in at()
528 if current.prefix.len() == 1 && current.value.is_some() { in at()
538 if current.prefix.split_last() == Some((&b'/', path)) && current.value.is_some() { in at()