1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-02 02:49:28 +00:00

Attempts to implement tree construction.

This commit is contained in:
Thomas Harte 2021-06-04 19:03:07 -04:00
parent f4db4c3a73
commit 2e999889bd
2 changed files with 21 additions and 4 deletions

View File

@ -18,14 +18,29 @@ Request::Request(Name name, bool optional) {
node.is_optional = optional; node.is_optional = optional;
} }
Request Request::append(Node::Type type, const Request &rhs) {
// Start with the easiest case: this is already an ::All request, and
// so is the new thing.
if(node.type == type && rhs.node.type == type) {
Request new_request = *this;
new_request.node.children.insert(new_request.node.children.end(), rhs.node.children.begin(), rhs.node.children.end());
return new_request;
}
// Otherwise create a new parent node.
Request parent;
parent.node.type = type;
parent.node.children.push_back(this->node);
parent.node.children.push_back(rhs.node);
return parent;
}
Request Request::operator &&(const Request &rhs) { Request Request::operator &&(const Request &rhs) {
(void)rhs; return append(Node::Type::All, rhs);
return *this;
} }
Request Request::operator ||(const Request &rhs) { Request Request::operator ||(const Request &rhs) {
(void)rhs; return append(Node::Type::Any, rhs);
return *this;
} }
bool Request::validate(Map &map) const { bool Request::validate(Map &map) const {

View File

@ -179,6 +179,8 @@ struct Request {
bool validate(Map &) const; bool validate(Map &) const;
}; };
Node node; Node node;
Request append(Node::Type type, const Request &rhs);
}; };
} }