Files
geant4/source/analysis/g4tools/include/tools/raxml
T
2016-12-09 12:35:28 +01:00

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