A toolkit for working with phylogenetic data.
v0.19.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
node_data.hpp
Go to the documentation of this file.
1 #ifndef GENESIS_TREE_TREE_NODE_DATA_H_
2 #define GENESIS_TREE_TREE_NODE_DATA_H_
3 
4 /*
5  Genesis - A toolkit for working with phylogenetic data.
6  Copyright (C) 2014-2017 Lucas Czech
7 
8  This program is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program. If not, see <http://www.gnu.org/licenses/>.
20 
21  Contact:
22  Lucas Czech <lucas.czech@h-its.org>
23  Exelixis Lab, Heidelberg Institute for Theoretical Studies
24  Schloss-Wolfsbrunnenweg 35, D-69118 Heidelberg, Germany
25 */
26 
34 #include <memory>
35 
36 namespace genesis {
37 namespace tree {
38 
39 // =================================================================================================
40 // Tree Node Data Base
41 // =================================================================================================
42 
67 {
68  // -------------------------------------------------------------------
69  // Constructor and Rule of Five
70  // -------------------------------------------------------------------
71 
72 public:
73 
77  virtual ~BaseNodeData() = default;
78 
85  BaseNodeData( BaseNodeData&& ) = delete;
86 
93  BaseNodeData& operator= ( BaseNodeData&& ) = delete;
94 
95 protected:
96 
100  BaseNodeData() = default;
101 
105  BaseNodeData( BaseNodeData const& ) = default;
106 
110  BaseNodeData& operator= ( BaseNodeData const& ) = default;
111 
112 public:
113 
117  static std::unique_ptr< BaseNodeData > create()
118  {
119  return std::unique_ptr< BaseNodeData >( new BaseNodeData() );
120  };
121 
126  virtual std::unique_ptr< BaseNodeData > recreate() const
127  {
128  return std::unique_ptr< BaseNodeData >( new BaseNodeData() );
129  };
130 
134  virtual std::unique_ptr< BaseNodeData > clone() const
135  {
136  return std::unique_ptr< BaseNodeData >( new BaseNodeData( *this ));
137  };
138 
139 };
140 
141 } // namespace tree
142 } // namespace genesis
143 
144 #endif // include guard
virtual std::unique_ptr< BaseNodeData > clone() const
Polymorphically copy an instance of this class. Use instead of copy constructor.
Definition: node_data.hpp:134
static std::unique_ptr< BaseNodeData > create()
Create a new instance of this class. Use instead of default constructor.
Definition: node_data.hpp:117
Base class for storing data on Nodes of a Tree.
Definition: node_data.hpp:66
BaseNodeData & operator=(BaseNodeData &&)=delete
Deleted move assignment.
virtual std::unique_ptr< BaseNodeData > recreate() const
Polymorphically create a default-constructed instance of this class with the same derived type as it ...
Definition: node_data.hpp:126
BaseNodeData()=default
Protected default constructor. Called from the create() function.
virtual ~BaseNodeData()=default
Virtual destructor. Needed for polymorphism.