// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_rroot_fac #define tools_rroot_fac #include "../sout" #include "branch_element" #include "branch_object" #include "leaf" #include "basket" #include "tree_index" #include "stl_vector" #include "dummy" #include "list" namespace tools { namespace rroot { class fac : public virtual ifac { public: static const std::string& s_class() { static const std::string s_v("tools::rroot::fac"); return s_v; } public: //ifac virtual iro* create(const std::string& a_class,const args&) { //m_out << "tools::rroot::fac::create :" // << " create object of class " << a_class << "..." // << std::endl; if(a_class=="TBranch") { return new branch(m_out,*this); } else if(a_class=="TBranchElement") { return new branch_element(m_out,*this); } else if(a_class=="TBranchObject") { return new branch_object(m_out,*this); } else if(a_class=="TLeafB") { return new leaf(m_out,*this); } else if(a_class=="TLeafS") { return new leaf(m_out,*this); } else if(a_class=="TLeafI") { return new leaf(m_out,*this); } else if(a_class=="TLeafF") { return new leaf(m_out,*this); } else if(a_class=="TLeafD") { return new leaf(m_out,*this); } else if(a_class=="TLeafO") { return new leaf(m_out,*this); } else if(a_class=="TLeafC") { return new leaf_string(m_out,*this); } else if(a_class=="TLeafElement") { return new leaf_element(m_out,*this); } else if(a_class=="TLeafObject") { return new leaf_object(m_out,*this); } else if(a_class=="TBasket") { return new basket(m_out); // L.Duflot ATLAS file : } else if(a_class=="TTreeIndex") { return new tree_index(); } else if(a_class=="TList") { return new obj_list(*this,true,true); } else if(a_class=="TNamed") { return new named(); } else if(a_class=="vector") { return new stl_vector(); } else if(a_class=="vector") { return new stl_vector(); } else if(a_class=="vector") { return new stl_vector(); } else if(a_class=="vector") { return new stl_vector(); } else if(a_class=="vector") { return new stl_vector(); } else if(a_class=="vector") { return new stl_vector(); } else if(a_class=="vector") { //beurk return new stl_vector(); //is it ok to map to an uint64 ? } else if(a_class=="vector") { return new stl_vector_string(); } else if(a_class=="vector >") { return new stl_vector_vector(); } else if(a_class=="vector >") { return new stl_vector_vector(); } else if(a_class=="vector >") { return new stl_vector_vector(); } else if(a_class=="vector >") { return new stl_vector_vector(); } else if(a_class=="vector >") { return new stl_vector_vector(); } else if(a_class=="vector >") { return new stl_vector_vector(); } else if(a_class=="TBranchRef") { return new dummy(); } else { m_out << "tools::rroot::fac::create :" << " unknown class " << sout(a_class) << "." << " Create a tools::rroot::dummy object." << std::endl; return new dummy(); } } virtual void destroy(iro*& a_obj) {delete a_obj;a_obj = 0;} public: fac(std::ostream& a_out):m_out(a_out){} virtual ~fac(){} public: fac(const fac& a_from):ifac(a_from),m_out(a_from.m_out){} fac& operator=(const fac&){return *this;} protected: /* branch* arg_branch(const args& a_args) { void* p = ifac::find_args(a_args,ifac::arg_branch()); if(!p) { m_out << "tools::rroot::fac::arg_branch :" << " branch not found in args." << std::endl; return 0; } return (branch*)p; } */ protected: std::ostream& m_out; }; }} #endif