73 lines
1.8 KiB
Plaintext
73 lines
1.8 KiB
Plaintext
// Copyright (C) 2010, Guy Barrand. All rights reserved.
|
|
// See the file tools.license for terms.
|
|
|
|
#ifndef tools_raxml
|
|
#define tools_raxml
|
|
|
|
#include <tools/xml/aidas>
|
|
|
|
#include "xml/loader"
|
|
|
|
namespace tools {
|
|
|
|
class raxml : public tools::xml::aidas, public xml::loader {
|
|
typedef tools::xml::aidas parent_aidas;
|
|
typedef xml::loader parent;
|
|
public:
|
|
raxml(tools::xml::factory& a_fac,std::ostream& a_out,bool a_verbose = false)
|
|
:parent_aidas()
|
|
,parent(a_fac,a_out,a_verbose)
|
|
,m_read_tag(0)
|
|
{
|
|
set_default_tags(parent::m_tags);
|
|
}
|
|
virtual ~raxml() {}
|
|
public:
|
|
void set_read_tag(void* a_tag) {m_read_tag = a_tag;}
|
|
protected:
|
|
raxml(const raxml& a_from)
|
|
:parent_aidas(a_from)
|
|
,parent(a_from)
|
|
{}
|
|
raxml& operator=(const raxml& a_from){
|
|
parent_aidas::operator=(a_from);
|
|
parent::operator=(a_from);
|
|
return *this;
|
|
}
|
|
public:
|
|
bool load_file(const std::string& a_file,bool a_compressed){
|
|
m_objects.clear();
|
|
if(!parent::load_file(a_file,a_compressed)) return false;
|
|
tools::xml::tree* top = top_item();
|
|
if(!top) return false;
|
|
const std::string& tag_name = top->tag_name();
|
|
if(tag_name!=s_aida()) return false;
|
|
|
|
{tools::xml::looper _for(*top);
|
|
while(tools::xml::tree* _tree = _for.next_tree()) {
|
|
|
|
const std::string& _tag_name = _tree->tag_name();
|
|
reader rder = find_reader(_tag_name);
|
|
if(!rder) {
|
|
m_out << "tools::raxml::load_file :"
|
|
<< " reader not found for " << tools::sout(_tag_name)
|
|
<< std::endl;
|
|
//m_objects.clear(); //keep already loaded objects.
|
|
return false;
|
|
} else {
|
|
tools::raxml_out ro = rder(*_tree,m_out,m_verbose,m_read_tag);
|
|
if(ro.object()) m_objects.push_back(ro);
|
|
}
|
|
|
|
}}
|
|
|
|
return true;
|
|
}
|
|
protected:
|
|
void* m_read_tag;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|