diff --git a/alib2data/src/tree/TreeFromXMLParser.cpp b/alib2data/src/tree/TreeFromXMLParser.cpp index 3337f077fd23a191702b6e748070ad0d31dbc74d..76442f1fa7e2fe18a343e43282aeaa4699d2bea0 100644 --- a/alib2data/src/tree/TreeFromXMLParser.cpp +++ b/alib2data/src/tree/TreeFromXMLParser.cpp @@ -33,7 +33,8 @@ RankedTree TreeFromXMLParser::parseRankedTree(std::deque<sax::Token>& input) con std::set<alphabet::RankedSymbol> rankedAlphabet = parseRankedAlphabet(input); RankedNode * root = parseRankedNode(input); - RankedTree tree(rankedAlphabet, std::move(*root)); + RankedTree tree(std::move(rankedAlphabet), std::move(*root)); + delete root; popToken(input, sax::Token::TokenType::END_ELEMENT, alib::Names::TREE_RANKED_TREE); return tree; } @@ -43,7 +44,7 @@ PrefixRankedNotation TreeFromXMLParser::parsePrefixRankedNotation(std::deque<sax std::set<alphabet::RankedSymbol> rankedAlphabet = parseRankedAlphabet(input); std::vector<alphabet::RankedSymbol> data = parseContentData(input); - PrefixRankedNotation tree(rankedAlphabet, std::move(data)); + PrefixRankedNotation tree(std::move(rankedAlphabet), std::move(data)); popToken(input, sax::Token::TokenType::END_ELEMENT, alib::Names::TREE_PREFIX_RANKED_NOTATION); return tree; @@ -54,7 +55,8 @@ UnrankedTree TreeFromXMLParser::parseUnrankedTree(std::deque<sax::Token>& input) std::set<alphabet::LabeledSymbol> alphabet = parseAlphabet(input); UnrankedNode * root = parseUnrankedNode(input); - UnrankedTree tree(alphabet, std::move(*root)); + UnrankedTree tree(std::move(alphabet), std::move(*root)); + delete root; popToken(input, sax::Token::TokenType::END_ELEMENT, alib::Names::TREE_UNRANKED_TREE); return tree; } diff --git a/alib2data/src/tree/ranked/PrefixRankedNotation.cpp b/alib2data/src/tree/ranked/PrefixRankedNotation.cpp index cca535d8ca73becd9e99f9ee3a05e42dacd0614a..dac30fdc5b34864c87cbd53757afbac9d3557639 100644 --- a/alib2data/src/tree/ranked/PrefixRankedNotation.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedNotation.cpp @@ -16,22 +16,19 @@ namespace tree { -PrefixRankedNotation::PrefixRankedNotation(const std::set<alphabet::RankedSymbol>& alphabet, const std::vector<alphabet::RankedSymbol>& data) { - this->alphabet = alphabet; - setContent(data); -} - -PrefixRankedNotation::PrefixRankedNotation(std::set<alphabet::RankedSymbol>&& alphabet, std::vector<alphabet::RankedSymbol>&& data) { +PrefixRankedNotation::PrefixRankedNotation(std::set<alphabet::RankedSymbol> alphabet, std::vector<alphabet::RankedSymbol> data) { this->alphabet = std::move(alphabet); setContent(std::move(data)); } -PrefixRankedNotation::PrefixRankedNotation(const std::vector<alphabet::RankedSymbol>& data) { - alphabet = std::set<alphabet::RankedSymbol>(data.begin(), data.end()); - m_Data = data; -} +PrefixRankedNotation::PrefixRankedNotation(std::vector<alphabet::RankedSymbol> data) { + int arityChecksum = 1; + for(const alphabet::RankedSymbol& symbol : data) { + arityChecksum += symbol.getRank().getData() - 1; + } + + if(arityChecksum != 0) throw exception::AlibException("The string does not form a tree"); -PrefixRankedNotation::PrefixRankedNotation(std::vector<alphabet::RankedSymbol>&& data) { alphabet = std::set<alphabet::RankedSymbol>(data.begin(), data.end()); m_Data = std::move(data); } @@ -70,6 +67,13 @@ const std::vector<alphabet::RankedSymbol>& PrefixRankedNotation::getContent() co } void PrefixRankedNotation::setContent(std::vector<alphabet::RankedSymbol> data) { + int arityChecksum = 1; + for(const alphabet::RankedSymbol& symbol : data) { + arityChecksum += symbol.getRank().getData() - 1; + } + + if(arityChecksum != 0) throw exception::AlibException("The string does not form a tree"); + std::set<alphabet::RankedSymbol> minimalAlphabet(data.begin(), data.end()); std::set<alphabet::RankedSymbol> unknownSymbols; std::set_difference(minimalAlphabet.begin(), minimalAlphabet.end(), alphabet.begin(), alphabet.end(), std::inserter(unknownSymbols, unknownSymbols.end())); diff --git a/alib2data/src/tree/ranked/PrefixRankedNotation.h b/alib2data/src/tree/ranked/PrefixRankedNotation.h index 6ad54a8f63388b376b03045095a603dc6c9afd58..6ac8a80b871ccf0483e0f6f75075aec2fe550f01 100644 --- a/alib2data/src/tree/ranked/PrefixRankedNotation.h +++ b/alib2data/src/tree/ranked/PrefixRankedNotation.h @@ -25,10 +25,8 @@ class PrefixRankedNotation : public std::acceptor<PrefixRankedNotation, Visitabl std::vector<alphabet::RankedSymbol> m_Data; public: - explicit PrefixRankedNotation(const std::set<alphabet::RankedSymbol>& alphabet, const std::vector<alphabet::RankedSymbol>& data); - explicit PrefixRankedNotation(std::set<alphabet::RankedSymbol>&& alphabet, std::vector<alphabet::RankedSymbol>&& data); - explicit PrefixRankedNotation(const std::vector<alphabet::RankedSymbol>& data); - explicit PrefixRankedNotation(std::vector<alphabet::RankedSymbol>&& data); + explicit PrefixRankedNotation(std::set<alphabet::RankedSymbol> alphabet, std::vector<alphabet::RankedSymbol> data); + explicit PrefixRankedNotation(std::vector<alphabet::RankedSymbol> data); explicit PrefixRankedNotation(const RankedTree& tree); virtual TreeBase* clone() const; diff --git a/alib2data/src/tree/ranked/RankedNode.cpp b/alib2data/src/tree/ranked/RankedNode.cpp index 33f631049ba68025dd8da4f80bda6a964cb78e99..12e6c0b739793418fd3b13ecad713c130ecb04ff 100644 --- a/alib2data/src/tree/ranked/RankedNode.cpp +++ b/alib2data/src/tree/ranked/RankedNode.cpp @@ -13,20 +13,8 @@ namespace tree { -RankedNode::RankedNode(const alphabet::RankedSymbol& symbol, const std::vector<RankedNode *> & children) : symbol(symbol) { - if((int) children.size() != symbol.getRank().getData()) throw TreeException("Number of children doesn't match the rank of the symbol"); - for (const auto& element : children) { - this->children.push_back(element->clone()); - } - for (auto& element : this->children) { - element->parent = this; - } - this->parent = NULL; -} - -RankedNode::RankedNode(alphabet::RankedSymbol&& symbol, std::vector<RankedNode *> && children) noexcept : symbol(std::move(symbol)), children(std::move(children)) { +RankedNode::RankedNode(alphabet::RankedSymbol symbol, std::vector<RankedNode *> children) : symbol(std::move(symbol)), children(std::move(children)), parentTree(NULL) { if((int) this->children.size() != this->symbol.getRank().getData()) throw TreeException("Number of children doesn't match the rank of the symbol"); - children.clear(); for (auto& element : this->children) { element->parent = this; } @@ -34,17 +22,18 @@ RankedNode::RankedNode(alphabet::RankedSymbol&& symbol, std::vector<RankedNode * this->parent = NULL; } -RankedNode::RankedNode(const RankedNode& other) : symbol(other.symbol) { +RankedNode::RankedNode(const RankedNode& other) : symbol(other.symbol), parentTree(NULL) { for (const auto& element : other.children) { children.push_back(element->clone()); } for (auto& element : this->children) { element->parent = this; } + this->attachTree(NULL); this->parent = NULL; } -RankedNode::RankedNode(RankedNode&& other) noexcept : symbol(std::move(other.symbol)), children(std::move(other.children)) { +RankedNode::RankedNode(RankedNode&& other) noexcept : symbol(std::move(other.symbol)), children(std::move(other.children)), parentTree(NULL) { other.children.clear(); for (auto& element : this->children) { element->parent = this; @@ -99,9 +88,9 @@ const RankedNode * RankedNode::getParent() const { return parent; } -void RankedNode::setSymbol(const alphabet::RankedSymbol& symbol) { +void RankedNode::setSymbol(alphabet::RankedSymbol symbol) { if(symbol.getRank() != this->symbol.getRank()) throw TreeException("Number of children doesn't match the rank of the symbol"); - this->symbol = symbol; + this->symbol = std::move(symbol); if(this->parentTree != NULL && this->parentTree->getAlphabet().find(this->symbol) == this->parentTree->getAlphabet().end()) throw TreeException("Symbol is not in the alphabet"); } diff --git a/alib2data/src/tree/ranked/RankedNode.h b/alib2data/src/tree/ranked/RankedNode.h index 7fcfd0e19cd29bb23a4cbef0c933507791c50e2e..235d22a29913c767f3694b76dda6e2754fbbe091 100644 --- a/alib2data/src/tree/ranked/RankedNode.h +++ b/alib2data/src/tree/ranked/RankedNode.h @@ -53,8 +53,7 @@ protected: */ void computeMinimalAlphabet( std::set<alphabet::RankedSymbol>& alphabet ) const; public: - explicit RankedNode(const alphabet::RankedSymbol& symbol, const std::vector<RankedNode *> & children); - explicit RankedNode(alphabet::RankedSymbol&& symbol, std::vector<RankedNode *> && children) noexcept; + explicit RankedNode(alphabet::RankedSymbol symbol, std::vector<RankedNode *> children); RankedNode(const RankedNode& other); RankedNode(RankedNode&& other) noexcept; @@ -86,7 +85,7 @@ public: const RankedNode * getParent() const; - void setSymbol(const alphabet::RankedSymbol& symbol); + void setSymbol(alphabet::RankedSymbol symbol); void swap(RankedNode& other); diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp index e096a7c0703f462081ed1ce6555b7c0cc1329c83..f0d69c94b18384bad0cc9a097048d304b4a03d98 100644 --- a/alib2data/src/tree/ranked/RankedTree.cpp +++ b/alib2data/src/tree/ranked/RankedTree.cpp @@ -24,25 +24,13 @@ RankedTree::RankedTree(const UnrankedTree& other) { delete element; } -RankedTree::RankedTree(const std::set<alphabet::RankedSymbol>& alphabet, const RankedNode& tree) { - this->alphabet = alphabet; - this->tree = NULL; - setTree(tree); -} - -RankedTree::RankedTree(std::set<alphabet::RankedSymbol>&& alphabet, RankedNode&& tree) { +RankedTree::RankedTree(std::set<alphabet::RankedSymbol> alphabet, RankedNode tree) { this->alphabet = std::move(alphabet); this->tree = NULL; setTree(std::move(tree)); } -RankedTree::RankedTree(const RankedNode& tree) { - tree.computeMinimalAlphabet(alphabet); - this->tree = NULL; - setTree(tree); -} - -RankedTree::RankedTree(RankedNode&& tree) { +RankedTree::RankedTree(RankedNode tree) { tree.computeMinimalAlphabet(alphabet); this->tree = NULL; setTree(std::move(tree)); @@ -95,18 +83,13 @@ RankedNode& RankedTree::getRoot() { return *tree; } -void RankedTree::setTree(const RankedNode& tree) { - delete this->tree; - this->tree = tree.clone(); - if(!this->tree->attachTree(this)) - throw exception::AlibException("Input symbols not in the alphabet."); -} - -void RankedTree::setTree(RankedNode&& tree) { +void RankedTree::setTree(RankedNode tree) { delete this->tree; this->tree = std::move(tree).plunder(); - if(!this->tree->attachTree(this)) + if(!this->tree->attachTree(this)) { + delete this->tree; throw exception::AlibException("Input symbols not in the alphabet."); + } } bool RankedTree::removeSymbolFromAlphabet(const alphabet::RankedSymbol & symbol) { diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h index ae22cbeacb65fd18d287ecb3fc837b37d4746699..f7ec751144ba2cfb4c7d95b62bf7b5d77c943d9c 100644 --- a/alib2data/src/tree/ranked/RankedTree.h +++ b/alib2data/src/tree/ranked/RankedTree.h @@ -40,10 +40,8 @@ public: virtual TreeBase* plunder() &&; explicit RankedTree(const UnrankedTree& other); - explicit RankedTree(const std::set<alphabet::RankedSymbol>& alphabet, const RankedNode& tree); - explicit RankedTree(std::set<alphabet::RankedSymbol>&& alphabet, RankedNode&& tree); - explicit RankedTree(const RankedNode& tree); - explicit RankedTree(RankedNode&& tree); + explicit RankedTree(std::set<alphabet::RankedSymbol> alphabet, RankedNode tree); + explicit RankedTree(RankedNode tree); /** * Copy constructor. @@ -65,18 +63,11 @@ public: */ RankedNode& getRoot(); - /** - * Sets the root node of the regular expression tree. Doesn't perform copy of the tree param, - * just stores it! - * @param tree root node to set - */ - void setTree(const RankedNode& tree); - /** * Sets the root node of the regular expression tree * @param tree root node to set */ - void setTree(RankedNode&& tree); + void setTree(RankedNode tree); /** * Removes symbol from the alphabet of symbol available in the regular expression diff --git a/alib2data/src/tree/unranked/UnrankedNode.cpp b/alib2data/src/tree/unranked/UnrankedNode.cpp index f791b8cb81af8103b941ccbd2dfd0722d7d726ed..19c30cb7678eca2458c8cdf55ef17605893775d1 100644 --- a/alib2data/src/tree/unranked/UnrankedNode.cpp +++ b/alib2data/src/tree/unranked/UnrankedNode.cpp @@ -14,33 +14,24 @@ namespace tree { -UnrankedNode::UnrankedNode(const alphabet::LabeledSymbol& symbol, const std::vector<UnrankedNode *> & children) : symbol(symbol) { - for (const auto& element : children) { - this->children.push_back(element->clone()); - } - for (auto& element : this->children) { - element->parent = this; - } -} - -UnrankedNode::UnrankedNode(alphabet::LabeledSymbol&& symbol, std::vector<UnrankedNode *> && children) noexcept : symbol(std::move(symbol)), children(std::move(children)) { - children.clear(); +UnrankedNode::UnrankedNode(alphabet::LabeledSymbol symbol, std::vector<UnrankedNode *> children) : symbol(std::move(symbol)), children(std::move(children)), parentTree(NULL) { for (auto& element : this->children) { element->parent = this; } this->attachTree(NULL); } -UnrankedNode::UnrankedNode(const UnrankedNode& other) : symbol(other.symbol) { +UnrankedNode::UnrankedNode(const UnrankedNode& other) : symbol(other.symbol), parentTree(NULL) { for (const auto& element : other.children) { children.push_back(element->clone()); } for (auto& element : this->children) { element->parent = this; } + this->attachTree(NULL); } -UnrankedNode::UnrankedNode(UnrankedNode&& other) noexcept : symbol(std::move(other.symbol)), children(std::move(other.children)) { +UnrankedNode::UnrankedNode(UnrankedNode&& other) noexcept : symbol(std::move(other.symbol)), children(std::move(other.children)), parentTree(NULL) { other.children.clear(); for (auto& element : this->children) { element->parent = this; @@ -94,8 +85,8 @@ const UnrankedNode * UnrankedNode::getParent() const { return parent; } -void UnrankedNode::setSymbol(const alphabet::LabeledSymbol& symbol) { - this->symbol = symbol; +void UnrankedNode::setSymbol(alphabet::LabeledSymbol symbol) { + this->symbol = std::move(symbol); if(this->parentTree != NULL && this->parentTree->getAlphabet().find(this->symbol) == this->parentTree->getAlphabet().end()) throw TreeException("Symbol is not in the alphabet"); } diff --git a/alib2data/src/tree/unranked/UnrankedNode.h b/alib2data/src/tree/unranked/UnrankedNode.h index de6e7c3c5f8474197955182af1696896cd9ca963..e947a0d9858282a127199d4259eb607ffa87df75 100644 --- a/alib2data/src/tree/unranked/UnrankedNode.h +++ b/alib2data/src/tree/unranked/UnrankedNode.h @@ -53,8 +53,7 @@ protected: */ void computeMinimalAlphabet( std::set<alphabet::LabeledSymbol>& alphabet ) const; public: - explicit UnrankedNode(const alphabet::LabeledSymbol& symbol, const std::vector<UnrankedNode *> & children); - explicit UnrankedNode(alphabet::LabeledSymbol&& symbol, std::vector<UnrankedNode *> && children) noexcept; + explicit UnrankedNode(alphabet::LabeledSymbol symbol, std::vector<UnrankedNode *> children); UnrankedNode(const UnrankedNode& other); UnrankedNode(UnrankedNode&& other) noexcept; @@ -86,7 +85,7 @@ public: const UnrankedNode * getParent() const; - void setSymbol(const alphabet::LabeledSymbol& symbol); + void setSymbol(alphabet::LabeledSymbol symbol); void pushBackChild(const UnrankedNode & node); diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp index 948eb780d573d482d2661b5022ffa0e73491f074..cd3d1ebe768e1096cfaf6057305e025b57c5cf9d 100644 --- a/alib2data/src/tree/unranked/UnrankedTree.cpp +++ b/alib2data/src/tree/unranked/UnrankedTree.cpp @@ -24,25 +24,13 @@ UnrankedTree::UnrankedTree(const RankedTree& other) { delete element; } -UnrankedTree::UnrankedTree(const std::set<alphabet::LabeledSymbol>& alphabet, const UnrankedNode& tree) { - this->alphabet = alphabet; - this->tree = NULL; - setTree(tree); -} - -UnrankedTree::UnrankedTree(std::set<alphabet::LabeledSymbol>&& alphabet, UnrankedNode&& tree) { +UnrankedTree::UnrankedTree(std::set<alphabet::LabeledSymbol> alphabet, UnrankedNode tree) { this->alphabet = std::move(alphabet); this->tree = NULL; setTree(std::move(tree)); } -UnrankedTree::UnrankedTree(const UnrankedNode& tree) { - tree.computeMinimalAlphabet(alphabet); - this->tree = NULL; - setTree(tree); -} - -UnrankedTree::UnrankedTree(UnrankedNode&& tree) { +UnrankedTree::UnrankedTree(UnrankedNode tree) { tree.computeMinimalAlphabet(alphabet); this->tree = NULL; setTree(std::move(tree)); @@ -95,18 +83,13 @@ UnrankedNode& UnrankedTree::getRoot() { return *tree; } -void UnrankedTree::setTree(const UnrankedNode& tree) { - delete this->tree; - this->tree = tree.clone(); - if(!this->tree->attachTree(this)) - throw exception::AlibException("Input symbols not in the alphabet."); -} - -void UnrankedTree::setTree(UnrankedNode&& tree) { +void UnrankedTree::setTree(UnrankedNode tree) { delete this->tree; this->tree = std::move(tree).plunder(); - if(!this->tree->attachTree(this)) + if(!this->tree->attachTree(this)) { + delete this->tree; throw exception::AlibException("Input symbols not in the alphabet."); + } } bool UnrankedTree::removeSymbolFromAlphabet(const alphabet::LabeledSymbol & symbol) { diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h index 6c546473004ee5f3497bd215bfc17854f8c10516..a9a0e84367289e88fc886ed67c268721f1511930 100644 --- a/alib2data/src/tree/unranked/UnrankedTree.h +++ b/alib2data/src/tree/unranked/UnrankedTree.h @@ -40,10 +40,8 @@ public: virtual TreeBase* plunder() &&; explicit UnrankedTree(const RankedTree& other); - explicit UnrankedTree(const std::set<alphabet::LabeledSymbol>& alphabet, const UnrankedNode& tree); - explicit UnrankedTree(std::set<alphabet::LabeledSymbol>&& alphabet, UnrankedNode&& tree); - explicit UnrankedTree(const UnrankedNode& tree); - explicit UnrankedTree(UnrankedNode&& tree); + explicit UnrankedTree(std::set<alphabet::LabeledSymbol> alphabet, UnrankedNode tree); + explicit UnrankedTree(UnrankedNode tree); /** * Copy constructor. @@ -65,18 +63,11 @@ public: */ UnrankedNode& getRoot(); - /** - * Sets the root node of the regular expression tree. Doesn't perform copy of the tree param, - * just stores it! - * @param tree root node to set - */ - void setTree(const UnrankedNode& tree); - /** * Sets the root node of the regular expression tree * @param tree root node to set */ - void setTree(UnrankedNode&& tree); + void setTree(UnrankedNode tree); /** * Removes symbol from the alphabet of symbol available in the regular expression diff --git a/alib2data/test-src/tree/TreeTest.cpp b/alib2data/test-src/tree/TreeTest.cpp index 812d23375f0976f34e64da5ed4dad753b27d1fac..a8ad01f9e9a2e5f09c0eb400c1258d22243112d4 100644 --- a/alib2data/test-src/tree/TreeTest.cpp +++ b/alib2data/test-src/tree/TreeTest.cpp @@ -14,6 +14,7 @@ #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y)) +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TreeTest, "tree" ); CPPUNIT_TEST_SUITE_REGISTRATION( TreeTest ); void TreeTest::setUp() { @@ -54,9 +55,9 @@ void TreeTest::testRankedTreeParser() { tree::RankedNode * node3 = new tree::RankedNode(c, {}); tree::RankedNode * node4 = new tree::RankedNode(c, {}); tree::RankedNode * node2 = new tree::RankedNode(b, {node3}); - tree::RankedNode * node1 = new tree::RankedNode(a, {node2, node4}); + tree::RankedNode node1(a, {node2, node4}); - tree::RankedTree tree(alphabet, std::move(*node1)); + tree::RankedTree tree(alphabet, std::move(node1)); CPPUNIT_ASSERT( tree == tree ); tree.getRoot().nicePrint(std::cout); @@ -113,15 +114,15 @@ void TreeTest::testRankedTreeCompare() { tree::RankedNode * node3 = new tree::RankedNode(c, {}); tree::RankedNode * node4 = new tree::RankedNode(c, {}); tree::RankedNode * node2 = new tree::RankedNode(b, {node3}); - tree::RankedNode * node1 = new tree::RankedNode(a, {node2, node4}); + tree::RankedNode node1(a, {node2, node4}); tree::RankedNode * node6 = new tree::RankedNode(c, {}); tree::RankedNode * node8 = new tree::RankedNode(c, {}); tree::RankedNode * node7 = new tree::RankedNode(b, {node8}); - tree::RankedNode * node5 = new tree::RankedNode(a, {node6, node7}); + tree::RankedNode node5(a, {node6, node7}); - tree::RankedTree tree1(alphabet, std::move(*node1)); - tree::RankedTree tree2(alphabet, std::move(*node5)); + tree::RankedTree tree1(alphabet, std::move(node1)); + tree::RankedTree tree2(alphabet, std::move(node5)); CPPUNIT_ASSERT( tree1 != tree2 ); CPPUNIT_ASSERT( tree1 < tree2 ); @@ -141,17 +142,17 @@ void TreeTest::testRankedTreeSymbolValidityCheck() { tree::RankedNode * node3 = new tree::RankedNode(d, {}); tree::RankedNode * node4 = new tree::RankedNode(c, {}); tree::RankedNode * node2 = new tree::RankedNode(b, {node3}); - tree::RankedNode * node1 = new tree::RankedNode(a, {node2, node4}); + tree::RankedNode node1(a, {node2, node4}); - CPPUNIT_ASSERT_THROW(tree::RankedTree tree1(alphabet, *node1), exception::AlibException); + CPPUNIT_ASSERT_THROW(tree::RankedTree(alphabet, std::move(node1)), exception::AlibException); tree::RankedNode * node6 = new tree::RankedNode(e, {}); tree::RankedNode * node8 = new tree::RankedNode(c, {}); tree::RankedNode * node7 = new tree::RankedNode(b, {node8}); - tree::RankedNode * node5 = new tree::RankedNode(a, {node6, node7}); + tree::RankedNode node5(a, {node6, node7}); tree::RankedTree * tree = NULL; - CPPUNIT_ASSERT_NO_THROW(tree = new tree::RankedTree(alphabet, std::move(*node5))); + CPPUNIT_ASSERT_NO_THROW(tree = new tree::RankedTree(alphabet, std::move(node5))); CPPUNIT_ASSERT_NO_THROW(tree -> getRoot().getChildren()[0] -> setSymbol(c)); CPPUNIT_ASSERT_THROW(tree -> getRoot().getChildren()[1] -> setSymbol(d), exception::AlibException); @@ -174,16 +175,16 @@ void TreeTest::testRankedTreeSubtreeSwitch() { tree::RankedNode * node3 = new tree::RankedNode(c, {}); tree::RankedNode * node4 = new tree::RankedNode(c, {}); tree::RankedNode * node2 = new tree::RankedNode(b, {node3}); - tree::RankedNode * node1 = new tree::RankedNode(a, {node2, node4}); + tree::RankedNode node1(a, {node2, node4}); tree::RankedNode * node6 = new tree::RankedNode(d, {}); tree::RankedNode * node8 = new tree::RankedNode(c, {}); tree::RankedNode * node7 = new tree::RankedNode(b, {node8}); - tree::RankedNode * node5 = new tree::RankedNode(a, {node6, node7}); + tree::RankedNode node5(a, {node6, node7}); - tree::RankedTree tree1(alphabet1, std::move(*node1)); + tree::RankedTree tree1(alphabet1, std::move(node1)); tree::RankedTree tree1Copy (tree1); - tree::RankedTree tree2(alphabet2, std::move(*node5)); + tree::RankedTree tree2(alphabet2, std::move(node5)); tree::RankedTree tree2Copy (tree2); tree1.getRoot().getChildren()[0] -> getChildren()[0] -> swap(*(tree2.getRoot().getChildren()[1])); @@ -229,9 +230,9 @@ void TreeTest::testUnrankedTreeParser() { tree::UnrankedNode * node3 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node4 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node2 = new tree::UnrankedNode(b, {node3}); - tree::UnrankedNode * node1 = new tree::UnrankedNode(a, {node2, node4}); + tree::UnrankedNode node1(a, {node2, node4}); - tree::UnrankedTree tree(alphabet, std::move(*node1)); + tree::UnrankedTree tree(alphabet, std::move(node1)); CPPUNIT_ASSERT( tree == tree ); tree.getRoot().nicePrint(std::cout); @@ -280,15 +281,15 @@ void TreeTest::testUnrankedTreeCompare() { tree::UnrankedNode * node3 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node4 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node2 = new tree::UnrankedNode(b, {node3}); - tree::UnrankedNode * node1 = new tree::UnrankedNode(a, {node2, node4}); + tree::UnrankedNode node1(a, {node2, node4}); tree::UnrankedNode * node6 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node8 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node7 = new tree::UnrankedNode(b, {node8}); - tree::UnrankedNode * node5 = new tree::UnrankedNode(a, {node6, node7}); + tree::UnrankedNode node5(a, {node6, node7}); - tree::UnrankedTree tree1(alphabet, std::move(*node1)); - tree::UnrankedTree tree2(alphabet, std::move(*node5)); + tree::UnrankedTree tree1(alphabet, std::move(node1)); + tree::UnrankedTree tree2(alphabet, std::move(node5)); CPPUNIT_ASSERT( tree1 != tree2 ); CPPUNIT_ASSERT( tree1 < tree2 ); @@ -308,17 +309,17 @@ void TreeTest::testUnrankedTreeSymbolValidityCheck() { tree::UnrankedNode * node3 = new tree::UnrankedNode(d, {}); tree::UnrankedNode * node4 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node2 = new tree::UnrankedNode(b, {node3}); - tree::UnrankedNode * node1 = new tree::UnrankedNode(a, {node2, node4}); + tree::UnrankedNode node1(a, {node2, node4}); - CPPUNIT_ASSERT_THROW(tree::UnrankedTree tree1(alphabet, *node1), exception::AlibException); + CPPUNIT_ASSERT_THROW(tree::UnrankedTree(alphabet, std::move(node1)), exception::AlibException); tree::UnrankedNode * node6 = new tree::UnrankedNode(e, {}); tree::UnrankedNode * node8 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node7 = new tree::UnrankedNode(b, {node8}); - tree::UnrankedNode * node5 = new tree::UnrankedNode(a, {node6, node7}); + tree::UnrankedNode node5(a, {node6, node7}); tree::UnrankedTree * tree = NULL; - CPPUNIT_ASSERT_NO_THROW(tree = new tree::UnrankedTree(alphabet, std::move(*node5))); + CPPUNIT_ASSERT_NO_THROW(tree = new tree::UnrankedTree(alphabet, std::move(node5))); CPPUNIT_ASSERT_NO_THROW((*tree -> getRoot().getChildren().begin()) -> setSymbol(c)); CPPUNIT_ASSERT_THROW((*tree -> getRoot().getChildren().begin()) -> setSymbol(d), exception::AlibException); @@ -340,16 +341,16 @@ void TreeTest::testUnrankedTreeSubtreeSwitch() { tree::UnrankedNode * node3 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node4 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node2 = new tree::UnrankedNode(b, {node3}); - tree::UnrankedNode * node1 = new tree::UnrankedNode(a, {node2, node4}); + tree::UnrankedNode node1(a, {node2, node4}); tree::UnrankedNode * node6 = new tree::UnrankedNode(d, {}); tree::UnrankedNode * node8 = new tree::UnrankedNode(c, {}); tree::UnrankedNode * node7 = new tree::UnrankedNode(b, {node8}); - tree::UnrankedNode * node5 = new tree::UnrankedNode(a, {node6, node7}); + tree::UnrankedNode node5(a, {node6, node7}); - tree::UnrankedTree tree1(alphabet1, std::move(*node1)); + tree::UnrankedTree tree1(alphabet1, std::move(node1)); tree::UnrankedTree tree1Copy (tree1); - tree::UnrankedTree tree2(alphabet2, std::move(*node5)); + tree::UnrankedTree tree2(alphabet2, std::move(node5)); tree::UnrankedTree tree2Copy (tree2); (*(*tree1.getRoot().getChildren().begin()) -> getChildren().begin()) -> swap(**(++tree2.getRoot().getChildren().begin()));