A library for working with phylogenetic and population genetic data.
v0.27.0
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-2019 Lucas Czech and HITS gGmbH
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
genesis::tree::BaseNodeData::create
static std::unique_ptr< BaseNodeData > create()
Create a new instance of this class. Use instead of default constructor.
Definition: node_data.hpp:117
genesis
Container namespace for all symbols of genesis in order to keep them separate when used as a library.
Definition: placement/formats/edge_color.cpp:42
genesis::tree::BaseNodeData
Base class for storing data on Nodes of a Tree.
Definition: node_data.hpp:66
genesis::tree::BaseNodeData::operator=
BaseNodeData & operator=(BaseNodeData &&)=delete
Deleted move assignment.
genesis::tree::BaseNodeData::clone
virtual std::unique_ptr< BaseNodeData > clone() const
Polymorphically copy an instance of this class. Use instead of copy constructor.
Definition: node_data.hpp:134
genesis::tree::BaseNodeData::BaseNodeData
BaseNodeData()=default
Protected default constructor. Called from the create() function.
genesis::tree::BaseNodeData::~BaseNodeData
virtual ~BaseNodeData()=default
Virtual destructor. Needed for polymorphism.
genesis::tree::BaseNodeData::recreate
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