// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_wroot_branch_object #define tools_wroot_branch_object #include "branch" namespace tools { namespace wroot { class branch_object : public branch { typedef branch parent; #ifdef TOOLS_MEM static const std::string& s_class() { static const std::string s_v("tools::wroot::branch_object"); return s_v; } #endif public: //ibo virtual const std::string& store_cls() const { static const std::string s_v("TBranchObject"); return s_v; } virtual bool stream(buffer& a_buffer) const { if(fClassName.empty()) { m_out << "tools::wroot::branch_object::stream : fClassName is empty." << std::endl; return false; } unsigned int c; if(!a_buffer.write_version(1,c)) return false; if(!parent::stream(a_buffer)) return false; if(!a_buffer.write(fClassName)) return false; if(!a_buffer.set_byte_count(c)) return false; return true; } public: branch_object(std::ostream& a_out,bool a_byte_swap,uint32 a_compression, seek a_seek_directory,const std::string& a_name,const std::string& a_title, bool a_verbose) :parent(a_out,a_byte_swap,a_compression,a_seek_directory,a_name,a_title,a_verbose) ,fClassName() { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } virtual ~branch_object(){ #ifdef TOOLS_MEM mem::decrement(s_class().c_str()); #endif } protected: branch_object(const branch_object& a_from):ibo(a_from),parent(a_from) {} branch_object& operator=(const branch_object& a_from){parent::operator=(a_from);return *this;} public: leaf_object* create_leaf(const std::string& a_name,const iobject& a_obj){ fClassName = a_obj.store_class_name(); leaf_object* lf = new leaf_object(m_out,a_name,a_obj); m_leaves.push_back(lf); return lf; } protected: std::string fClassName; //Class name of referenced object }; }} #endif