From 236dc9fc43ceec38bed853e8326f828de2dbf87c Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 16 Aug 2013 14:18:31 +0200 Subject: [PATCH] replaced binary filter node with a n-ary node --- apps/opencs/CMakeLists.txt | 2 +- apps/opencs/model/filter/binarynode.cpp | 58 ------------------ apps/opencs/model/filter/narynode.cpp | 61 +++++++++++++++++++ .../filter/{binarynode.hpp => narynode.hpp} | 21 +++---- 4 files changed, 71 insertions(+), 71 deletions(-) delete mode 100644 apps/opencs/model/filter/binarynode.cpp create mode 100644 apps/opencs/model/filter/narynode.cpp rename apps/opencs/model/filter/{binarynode.hpp => narynode.hpp} (64%) diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index d363eeedc..8a1949e51 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -108,7 +108,7 @@ opencs_units_noqt (model/settings ) opencs_units_noqt (model/filter - node unarynode binarynode leafnode booleannode + node unarynode narynode leafnode booleannode ) opencs_hdrs_noqt (model/filter diff --git a/apps/opencs/model/filter/binarynode.cpp b/apps/opencs/model/filter/binarynode.cpp deleted file mode 100644 index c0c7fde37..000000000 --- a/apps/opencs/model/filter/binarynode.cpp +++ /dev/null @@ -1,58 +0,0 @@ - -#include "binarynode.hpp" - -CSMFilter::BinaryNode::BinaryNode (boost::shared_ptr left, boost::shared_ptr right) -: mLeft (left), mRight (right) -{} - -const CSMFilter::Node& CSMFilter::BinaryNode::getLeft() const -{ - return *mLeft; -} - -CSMFilter::Node& CSMFilter::BinaryNode::getLeft() -{ - return *mLeft; -} - -const CSMFilter::Node& CSMFilter::BinaryNode::getRight() const -{ - return *mRight; -} - -CSMFilter::Node& CSMFilter::BinaryNode::getRight() -{ - return *mRight; -} - -std::vector CSMFilter::BinaryNode::getReferencedFilters() const -{ - std::vector left = mLeft->getReferencedFilters(); - - std::vector right = mRight->getReferencedFilters(); - - left.insert (left.end(), right.begin(), right.end()); - - return left; -} - -std::vector CSMFilter::BinaryNode::getReferencedColumns() const -{ - std::vector left = mLeft->getReferencedColumns(); - - std::vector right = mRight->getReferencedColumns(); - - left.insert (left.end(), right.begin(), right.end()); - - return left; -} - -bool CSMFilter::BinaryNode::isSimple() const -{ - return false; -} - -bool CSMFilter::BinaryNode::hasUserValue() const -{ - return mLeft->hasUserValue() || mRight->hasUserValue(); -} diff --git a/apps/opencs/model/filter/narynode.cpp b/apps/opencs/model/filter/narynode.cpp new file mode 100644 index 000000000..0756f6707 --- /dev/null +++ b/apps/opencs/model/filter/narynode.cpp @@ -0,0 +1,61 @@ + +#include "narynode.hpp" + +CSMFilter::NAryNode::NAryNode (const std::vector >& nodes) +: mNodes (nodes) +{} + +int CSMFilter::NAryNode::getSize() const +{ + return mNodes.size(); +} + +const CSMFilter::Node& CSMFilter::NAryNode::operator[] (int index) const +{ + return *mNodes.at (index); +} + +std::vector CSMFilter::NAryNode::getReferencedFilters() const +{ + std::vector filters; + + for (std::vector >::const_iterator iter (mNodes.begin()); + iter!=mNodes.end(); ++iter) + { + std::vector filters2 = (*iter)->getReferencedFilters(); + + filters.insert (filters.end(), filters2.begin(), filters2.end()); + } + + return filters; +} + +std::vector CSMFilter::NAryNode::getReferencedColumns() const +{ + std::vector columns; + + for (std::vector >::const_iterator iter (mNodes.begin()); + iter!=mNodes.end(); ++iter) + { + std::vector columns2 = (*iter)->getReferencedColumns(); + + columns.insert (columns.end(), columns2.begin(), columns2.end()); + } + + return columns; +} + +bool CSMFilter::NAryNode::isSimple() const +{ + return false; +} + +bool CSMFilter::NAryNode::hasUserValue() const +{ + for (std::vector >::const_iterator iter (mNodes.begin()); + iter!=mNodes.end(); ++iter) + if ((*iter)->hasUserValue()) + return true; + + return false; +} diff --git a/apps/opencs/model/filter/binarynode.hpp b/apps/opencs/model/filter/narynode.hpp similarity index 64% rename from apps/opencs/model/filter/binarynode.hpp rename to apps/opencs/model/filter/narynode.hpp index c2b4041d2..65e12d1ed 100644 --- a/apps/opencs/model/filter/binarynode.hpp +++ b/apps/opencs/model/filter/narynode.hpp @@ -1,5 +1,7 @@ -#ifndef CSM_FILTER_BINARYNODE_H -#define CSM_FILTER_BINARYNODE_H +#ifndef CSM_FILTER_NARYNODE_H +#define CSM_FILTER_NARYNODE_H + +#include #include @@ -7,22 +9,17 @@ namespace CSMFilter { - class BinaryNode : public Node + class NAryNode : public Node { - boost::shared_ptr mLeft; - boost::shared_ptr mRight; + std::vector > mNodes; public: - BinaryNode (boost::shared_ptr left, boost::shared_ptr right); + NAryNode (const std::vector >& nodes); - const Node& getLeft() const; + int getSize() const; - Node& getLeft(); - - const Node& getRight() const; - - Node& getRight(); + const Node& operator[] (int index) const; virtual std::vector getReferencedFilters() const; ///< Return a list of filters that are used by this node (and must be passed as