X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fcomponenttree.h;h=84d6270218101fbde5c71c01468837d577dae18d;hb=34293060b5be57f6e2ea620ad4c3ff0f94e1d305;hp=212b4d8edc0a03fee77b4c9143adced17cbb8cec;hpb=b0334271ff31ca880f1d481665284a6d3b057162;p=germs.git diff --git a/src/componenttree.h b/src/componenttree.h index 212b4d8..84d6270 100644 --- a/src/componenttree.h +++ b/src/componenttree.h @@ -22,10 +22,17 @@ #define __COMPONENTTREE_H__ #include +#include #include "misc.h" +/** + * Creates and holds a component tree. + */ class ComponentTree { public: + /** + * A node in the component tree. + */ struct Node { Node(Node* parent, Component comp); ~Node(); @@ -48,14 +55,29 @@ class ComponentTree { */ void makeUnoriented(); + /** + * Count the number of leaves in the component tree. + * This is the number of hurdles, if makeUnoriented has been called. + */ + size_t countLeaves(); + + /** + * Number of short branches. + * If makeUnoriented has been called and countLeaves is >= 3 + * then we have a super hurdle if short branches = 0. + */ + size_t shortBranches(); + private: //Disable these, at least for now. void operator=(const ComponentTree&){}; - ComponentTree(const ComponentTree&): _root(0,Component()){}; + ComponentTree(const ComponentTree&): _root(0){}; void removeOriented(Node* n); + size_t countLeaves(Node* n); + void branches (Node* n, std::map & b); - Node _root; + Node* _root; friend class ComponentTreeTest; };