~ubuntu-branches/ubuntu/saucy/libbpp-core/saucy

« back to all changes in this revision

Viewing changes to src/Bpp/Graph/BasicTNode.h

  • Committer: Package Import Robot
  • Author(s): Julien Dutheil
  • Date: 2012-02-09 13:00:00 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120209130000-je7bujslsp6ixsaw
Tags: 2.0.3-1
* New range classes
* Linear assigment method
* Improved string tokenizer and text tools.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 {
 
47
  /**
 
48
   * @brief Simple implementation of TNode
 
49
   *
 
50
   * Contains only methods for node manipulation.
 
51
   *
 
52
   * @author Sylvain Gaillard
 
53
   */
 
54
  class BasicTNode: public TNode {
 
55
    private:
 
56
      std::vector< BasicTNode * > sons_;
 
57
      BasicTNode * father_;
 
58
 
 
59
    public:
 
60
      /**
 
61
       * @brief Simple constructor.
 
62
       */
 
63
      BasicTNode(): sons_(), father_(0) {};
 
64
 
 
65
      /**
 
66
       * @brief Destructor.
 
67
       *
 
68
       * When destroyed, the node remove himself as son of its father and as
 
69
       * father of its sons.
 
70
       */
 
71
      virtual ~BasicTNode();
 
72
 
 
73
      /**
 
74
       * @brief Copy constructor.
 
75
       */
 
76
      BasicTNode(const BasicTNode& node);
 
77
 
 
78
      /**
 
79
       * @brief Assignation operator.
 
80
       */
 
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
 
 
99
      /**
 
100
       * @brief Tell if the node has a father.
 
101
       */
 
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;
 
109
      BasicTNode* getFather();
 
110
 
 
111
      /**
 
112
       * @brief Tell if the node is a father of this node.
 
113
       */
 
114
      virtual bool isFather(const BasicTNode* node) const;
 
115
 
 
116
      /**
 
117
       * @brief Add a father to this node.
 
118
       */
 
119
      virtual void addFather(BasicTNode* node);
 
120
 
 
121
      /**
 
122
       * @brief Remove the father of this node.
 
123
       *
 
124
       * @return A pointer to the removed father node.
 
125
       */
 
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
 
 
135
      /**
 
136
       * @brief Tell if a node is son of this node.
 
137
       */
 
138
      virtual bool isSon(const BasicTNode* node) const;
 
139
 
 
140
      /**
 
141
       * @brief Add a son to this node.
 
142
       */
 
143
      virtual void addSon(BasicTNode* node);
 
144
 
 
145
      /**
 
146
       * @brief Remove a son of this node.
 
147
       */
 
148
      virtual void removeSon(BasicTNode* son);
 
149
 
 
150
      /**
 
151
       * @brief Remove a son of this node.
 
152
       *
 
153
       * @return A pointer to the removed son node or a Null pointer if son is
 
154
       * not found.
 
155
       */
 
156
      virtual BasicTNode* removeSon(int pos);
 
157
  };
 
158
}
 
159
 
 
160
#endif //_BPP_GRAPH_BASICTNODE_H_