pathtree implements a tree for fast path lookup.
- Paths must be a '/'-separated list of strings, like a URL or Unix filesystem. - All paths must begin with a '/'. - Path elements may not contain a '/'. - Path elements beginning with a ':' or '*' will be interpreted as wildcards. - Trailing slashes are inconsequential.
Wildcards are named path elements that may match any strings in that location. Two different kinds of wildcards are permitted:
- :var - names beginning with ':' will match any single path element. - *var - names beginning with '*' will match one or more path elements. (however, no path elements may come after a star wildcard)
Single element wildcards in the last path element can optionally end with an extension. This allows for routes like '/users/:id.json', which will not conflict with '/users/:id'.
Paths are mapped to the tree in the following way:
- Each '/' is a Node in the tree. The root node is the leading '/'. - Each Node has edges to other nodes. The edges are named according to the possible path elements at that depth in the path. - Any Node may have an associated Leaf. Leafs are terminals containing the data associated with the path as traversed from the root to that Node.
Edges are implemented as a map from the path element name to the next node in the path.