Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_raxml_out 5 #define tools_raxml_out 6 7 #include "handle" 8 9 namespace tools { 10 11 class raxml_out { 12 public: 13 raxml_out():m_hdl(0){} 14 raxml_out(base_handle* a_hdl,const std::string& a_class,const std::string& a_path,const std::string& a_name) 15 :m_hdl(a_hdl) //take ownership of a_hdl 16 ,m_class(a_class) 17 ,m_path(a_path),m_name(a_name) 18 {} 19 virtual ~raxml_out(){delete m_hdl;} 20 public: 21 raxml_out(const raxml_out& a_from) 22 :m_hdl(a_from.m_hdl?a_from.m_hdl->copy():0) 23 ,m_class(a_from.m_class) 24 ,m_path(a_from.m_path),m_name(a_from.m_name) 25 {} 26 raxml_out& operator=(const raxml_out& a_from){ 27 if(&a_from==this) return *this; 28 29 delete m_hdl; 30 m_hdl = a_from.m_hdl?a_from.m_hdl->copy():0; 31 32 m_class = a_from.m_class; 33 m_path = a_from.m_path; 34 m_name = a_from.m_name; 35 36 return *this; 37 } 38 public: 39 void* object() const { 40 if(!m_hdl) return 0; 41 return m_hdl->object(); 42 } 43 const std::string& cls() const {return m_class;} 44 const std::string& path() const {return m_path;} 45 const std::string& name() const {return m_name;} 46 void disown() {if(m_hdl) m_hdl->disown();} 47 protected: 48 base_handle* m_hdl; 49 std::string m_class; 50 std::string m_path; 51 std::string m_name; 52 }; 53 54 } 55 56 #include <vector> 57 58 namespace tools { 59 60 //for tools::holder<raxml_outs> 61 class raxml_outs : public std::vector<raxml_out> { 62 public: 63 static const std::string& s_class() { 64 static const std::string s_v("tools::raxml_outs"); 65 return s_v; 66 } 67 public: 68 raxml_outs(){} 69 raxml_outs(const std::vector<raxml_out>& a_v) 70 :std::vector<raxml_out>(a_v) 71 {} 72 public: 73 raxml_outs(const raxml_outs& a_from) 74 :std::vector<raxml_out>(a_from) 75 {} 76 raxml_outs& operator=(const raxml_outs& a_from){ 77 std::vector<raxml_out>::operator=(a_from); 78 return *this; 79 } 80 }; 81 82 } 83 84 #endif