Add compress regular tree

This commit is contained in:
MaxanRus 2021-09-27 03:12:08 +03:00
parent f3848d88b3
commit 8e014193cc
2 changed files with 12 additions and 0 deletions

View file

@ -28,6 +28,7 @@ class RegularTree {
Modifier modifier = Modifier::None;
private:
void ParseCurrentType(const std::string_view);
void Compression();
void Print(int nesting_level) const;
};

View file

@ -9,6 +9,7 @@ RegularTree::Node::Node(Type type) : type(type) {}
void RegularTree::Node::Parse(const std::string& regular) {
type = Type::Addition;
ParseCurrentType(std::string_view(regular.c_str(), regular.size()));
Compression();
}
void RegularTree::Node::Print() const {
@ -135,6 +136,16 @@ void RegularTree::Node::ParseCurrentType(const std::string_view regular) {
}
}
void RegularTree::Node::Compression() {
for (auto& i: children) {
i->Compression();
}
if (children.size() == 1 && modifier == Modifier::None) {
auto tmp = std::move(*children[0]);
*this = std::move(tmp);
}
}
void RegularTree::Node::Print(int nesting_level) const {
auto PrintNesingLevel = [](int nesting_level) {
for (int i = 0; i < nesting_level; ++i) {