public class RadixTreeParser extends Object implements ByteBufferParser<SyslogMessage>
This class uses a RadixTree
to store a tree of parser stages.
Each leaf node of the tree represents a complete parse of an incoming
message. To parse incoming ByteBuffer
messages, the RadixTree
is traversed and each stage is added as a future processing step. When a leaf node
is reached and returns a non-null result, ie. a complete parse, that result is
returned as the parse result.
You can teach the parser new ParserStage
sequences by using the
teach(ParserStage[])
method. This will add the stages to the RadixTree
.
TODO: Make the parser tree construction phased or asynchronous so that tree nodes are added as-needed to complete the parse. In many cases, the first several branches of the tree will result in a complete parse, making it unnecessary to add all possible branches to the execution tree.
TODO: Allow cancellation of in-progress branches when the first non-null result is obtained.
TODO: Score and sort parse branches based on successful parses. If a particular parse branch is successful, we should have a way to increment a score on the stages in that branch so that we can periodically sort the tree based on these scores. This will put heavily utilized parse branches near the front of the tree, making it faster to traverse the branches to a successful parse.
Constructor and Description |
---|
RadixTreeParser() |
Modifier and Type | Method and Description |
---|---|
static void |
compressNode(RadixTreeNode<ParserStage> node) |
CompletableFuture<SyslogMessage> |
parse(ByteBuffer incoming) |
void |
performEdgeCompression() |
int |
size() |
void |
teach(ParserStage[] stages)
Teach a new
ParserStage sequence to this parser. |
public int size()
public void teach(ParserStage[] stages)
ParserStage
sequence to this parser.stages
- public void performEdgeCompression()
public static void compressNode(RadixTreeNode<ParserStage> node)
public CompletableFuture<SyslogMessage> parse(ByteBuffer incoming)
parse
in interface ByteBufferParser<SyslogMessage>
Copyright © 2021. All rights reserved.