From 8e014193cc61259c42c0bffa8fe23f16f09b7cc4 Mon Sep 17 00:00:00 2001 From: MaxanRus Date: Mon, 27 Sep 2021 03:12:08 +0300 Subject: [PATCH] Add compress regular tree --- include/regular/RegularTree.hpp | 1 + src/regular/RegularTree.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/include/regular/RegularTree.hpp b/include/regular/RegularTree.hpp index 7cbae74..d6c031e 100644 --- a/include/regular/RegularTree.hpp +++ b/include/regular/RegularTree.hpp @@ -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; }; diff --git a/src/regular/RegularTree.cpp b/src/regular/RegularTree.cpp index 24e840c..712c3d2 100644 --- a/src/regular/RegularTree.cpp +++ b/src/regular/RegularTree.cpp @@ -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) {