2 #ifndef READ_PHYTREE_HPP
3 #define READ_PHYTREE_HPP
8 #include "utils/phylo_typedefs.hpp"
11 static std::string delimeters(
"\t\n ,");
12 static std::string open_brackets(
"([{");
13 static std::string close_brackets(
"}])");
14 static std::string newlines(
"\r\n");
15 static std::string non_name_chars(delimeters + open_brackets + close_brackets);
18 bool read_rooted_tree_from_brackets_internal(PhyloNet& N,
const PhyloNet::InternVertex& parent, std::istream& in){
22 if(in.eof())
return false;
24 PhyloNet::InternVertex root = N.add_vertex(parent);
27 if(open_brackets.find(in.peek()) != std::string::npos){
33 if(!read_rooted_tree_from_brackets_internal(N, root, in))
return false;
35 }
while(delimeters.find(in.peek()) != std::string::npos);
40 if(close_brackets.find(c) == std::string::npos)
return false;
46 if(non_name_chars.find(c) != std::string::npos)
break;
50 N.make_leaf(root, name);
55 bool read_rooted_tree_from_brackets(PhyloNet& N, std::istream& in){
56 return read_rooted_tree_from_brackets_internal(N, N.set_root(), in);
Definition: read_phytree.hpp:10