addPathAsSegments method
void
addPathAsSegments(})
Implementation
void addPathAsSegments(Iterable<String> segments, T value,
{Iterable<String> tags: const ['*'], Map<String, String>? pathRegEx}) {
pathRegEx ??= {};
SubTree<T> subtree = _tree;
final int numSegs = segments.length;
for (int i = 0; i < numSegs; i++) {
String seg = segments.elementAt(i);
if (i == numSegs - 1 &&
(seg == '*' || (seg.startsWith(':') && seg.endsWith('*')))) {
for (String tag in tags) {
// TODO what if there is already a value here?
subtree.globValue[tag] = value;
}
return;
} else if (seg.startsWith(':')) {
String name = seg.substring(1);
if (!pathRegEx.containsKey(name)) {
SubTree<T>? next = subtree.varSubTree;
if (next == null) {
next = SubTree<T>();
subtree.varSubTree = next;
}
subtree = next;
} else {
SubTree<T> next = SubTree<T>();
subtree.regexes.add(MapEntry(RegExp(pathRegEx[name]!), next));
subtree = next;
}
} else {
SubTree<T>? next = subtree.fixed[seg];
if (next == null) {
next = SubTree<T>();
subtree.fixed[seg] = next;
}
subtree = next;
}
}
for (String tag in tags) {
// TODO what if there is already a value here?
subtree.value[tag] = value;
}
}