#ifndef REMOVALTRANSFORMATION_H #define REMOVALTRANSFORMATION_H #include #include #include "NodeTransformation.h" template class RemovalTransformation: public NodeTransformation { public: RemovalTransformation(T toRemove); ~RemovalTransformation(); virtual NodeTree* transform(NodeTree* from); private: T toRemove; }; #endif template RemovalTransformation::RemovalTransformation(T toRemove) { this->toRemove = toRemove; } template RemovalTransformation::~RemovalTransformation() { // } template NodeTree* RemovalTransformation::transform(NodeTree* from) { std::queue*> toProcess; toProcess.push(from); while(!toProcess.empty()) { NodeTree* node = toProcess.front(); toProcess.pop(); std::vector*> children = node->getChildren(); for (int i = 0; i < children.size(); i++) { if (children[i]->getData() == toRemove) node->removeChild(children[i]); else toProcess.push(children[i]); } } return from; }