bpp-core  2.2.0
BasicTNode.h
Go to the documentation of this file.
1 //
2 // File: BasicTNode.h
3 // Author: Sylvain Gaillard
4 // Created: 13/01/2011 16:39:23
5 //
6 
7 /*
8 Copyright or © or Copr. CNRS, (January 12, 2011)
9 
10 This software is a computer program whose purpose is to provide utilitary
11 classes. This file belongs to the Bio++ Project.
12 
13 This software is governed by the CeCILL license under French law and
14 abiding by the rules of distribution of free software. You can use,
15 modify and/ or redistribute the software under the terms of the CeCILL
16 license as circulated by CEA, CNRS and INRIA at the following URL
17 "http://www.cecill.info".
18 
19 As a counterpart to the access to the source code and rights to copy,
20 modify and redistribute granted by the license, users are provided only
21 with a limited warranty and the software's author, the holder of the
22 economic rights, and the successive licensors have only limited
23 liability.
24 
25 In this respect, the user's attention is drawn to the risks associated
26 with loading, using, modifying and/or developing or reproducing the
27 software by the user in light of its specific status of free software,
28 that may mean that it is complicated to manipulate, and that also
29 therefore means that it is reserved for developers and experienced
30 professionals having in-depth computer knowledge. Users are therefore
31 encouraged to load and test the software's suitability as regards their
32 requirements in conditions enabling the security of their systems and/or
33 data to be ensured and, more generally, to use and operate it in the
34 same conditions as regards security.
35 
36 The fact that you are presently reading this means that you have had
37 knowledge of the CeCILL license and that you accept its terms.
38 */
39 
40 #ifndef _BPP_GRAPH_BASICTNODE_H_
41 #define _BPP_GRAPH_BASICTNODE_H_
42 
43 #include "TNode.h"
44 #include "../Exceptions.h"
45 
46 namespace bpp {
54  class BasicTNode: public TNode {
55  private:
56  std::vector< BasicTNode * > sons_;
58 
59  public:
63  BasicTNode(): sons_(), father_(0) {};
64 
71  virtual ~BasicTNode();
72 
76  BasicTNode(const BasicTNode& node);
77 
81  BasicTNode& operator=(const BasicTNode& node);
82 
83  BasicTNode* clone() const {
84  return new BasicTNode(* this);
85  }
86 
87  // Neighbors
88 
89  const BasicTNode* getNeighbor(int pos) const;
90  BasicTNode* getNeighbor(int pos);
91 
92  int degree() const { return sons_.size() - 1 + father_ ? 1 : 0; }
93 
94  const BasicTNode* operator[](int i) const;
95  BasicTNode* operator[](int i);
96 
97  // Fathers
98 
102  bool hasFather() const { return father_ ? true : false; }
103  bool hasFathers() const { return father_ ? true : false; }
104  int getNumberOfFathers() const { return father_ ? 1 : 0; }
105 
106  const BasicTNode* getFather(int pos) const;
107  BasicTNode* getFather(int pos);
108  const BasicTNode* getFather() const;
110 
114  virtual bool isFather(const BasicTNode* node) const;
115 
119  virtual void addFather(BasicTNode* node);
120 
126  virtual BasicTNode* removeFather();
127 
128  // Sons
129 
130  bool hasSons() const { return !sons_.empty(); }
131  int getNumberOfSons() const { return static_cast<int>(sons_.size()); }
132  const BasicTNode* getSon(int pos) const;
133  BasicTNode* getSon(int pos);
134 
138  virtual bool isSon(const BasicTNode* node) const;
139 
143  virtual void addSon(BasicTNode* node);
144 
148  virtual void removeSon(BasicTNode* son);
149 
156  virtual BasicTNode* removeSon(int pos);
157  };
158 }
159 
160 #endif //_BPP_GRAPH_BASICTNODE_H_
std::vector< BasicTNode *> sons_
Definition: BasicTNode.h:56
virtual void addFather(BasicTNode *node)
Add a father to this node.
Definition: BasicTNode.cpp:136
virtual void addSon(BasicTNode *node)
Add a son to this node.
Definition: BasicTNode.cpp:181
bool hasSons() const
Tell if this node has one or more son nodes.
Definition: BasicTNode.h:130
This class allows to perform a correspondence analysis.
virtual bool isSon(const BasicTNode *node) const
Tell if a node is son of this node.
Definition: BasicTNode.cpp:173
BasicTNode * clone() const
Create a copy of this object and send a pointer to it.
Definition: BasicTNode.h:83
virtual BasicTNode * removeFather()
Remove the father of this node.
Definition: BasicTNode.cpp:147
BasicTNode * father_
Definition: BasicTNode.h:57
virtual bool isFather(const BasicTNode *node) const
Tell if the node is a father of this node.
Definition: BasicTNode.cpp:130
const BasicTNode * getNeighbor(int pos) const
Get a neighbor of this node in const context.
Definition: BasicTNode.cpp:70
Simple implementation of TNode.
Definition: BasicTNode.h:54
BasicTNode & operator=(const BasicTNode &node)
Assignation operator.
Definition: BasicTNode.cpp:62
BasicTNode()
Simple constructor.
Definition: BasicTNode.h:63
int getNumberOfFathers() const
Give the number of father nodes for this node.
Definition: BasicTNode.h:104
bool hasFather() const
Tell if the node has a father.
Definition: BasicTNode.h:102
const BasicTNode * getSon(int pos) const
Get a particular son in const environment.
Definition: BasicTNode.cpp:159
int degree() const
Get the degree i.e. the number of neighbors of this node.
Definition: BasicTNode.h:92
virtual void removeSon(BasicTNode *son)
Remove a son of this node.
Definition: BasicTNode.cpp:190
const BasicTNode * getFather() const
Get the father in const environment.
Definition: BasicTNode.cpp:122
const BasicTNode * operator[](int i) const
Direct access to a neighbor in const context.
Definition: BasicTNode.cpp:90
Tree Node interface.
Definition: TNode.h:54
bool hasFathers() const
Tell if this node has one or more father nodes.
Definition: BasicTNode.h:103
virtual ~BasicTNode()
Destructor.
Definition: BasicTNode.cpp:48
int getNumberOfSons() const
Give the number of son nodes for this node.
Definition: BasicTNode.h:131