// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_sg_h2plot_cp #define tools_sg_h2plot_cp // Inheritance : #include "h2plot" namespace tools { namespace sg { class h1d2plot_cp : public h1d2plot { public: TOOLS_SCLASS(tools::sg::h1d2plot_cp) public: virtual void* cast(const std::string& a_class) const { if(void* p = cmp_cast(this,a_class)) {return p;} return h1d2plot::cast(a_class); } public: virtual plottable* copy() const {return new h1d2plot_cp(*this);} public: h1d2plot_cp(const histo::h1d& a_data) :h1d2plot(m_cp) //give ref of m_cp to h1d2plot. ,m_cp(a_data) //do a local copy. //WARNING : the upper is ok as long as h1d2plot constructor does nothing // else than keeping the ref to m_cp. Else it would do // something on an empty histo (and not on a copy of the // passed a_data). { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } virtual ~h1d2plot_cp(){ #ifdef TOOLS_MEM mem::decrement(s_class().c_str()); #endif } public: h1d2plot_cp(const h1d2plot_cp& a_from) :plottable(a_from) ,bins1D(a_from) ,h1d2plot(m_cp) ,m_cp(a_from.m_cp) { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } h1d2plot_cp& operator=(const h1d2plot_cp& a_from){ h1d2plot::operator=(a_from); m_cp = a_from.m_cp; return *this; } public: const histo::h1d& data() const {return m_cp;} histo::h1d& data() {return m_cp;} protected: histo::h1d m_cp; }; class h2d2plot_cp : public h2d2plot { public: TOOLS_SCLASS(tools::sg::h2d2plot_cp) public: virtual void* cast(const std::string& a_class) const { if(void* p = cmp_cast(this,a_class)) {return p;} return h2d2plot::cast(a_class); } public: virtual plottable* copy() const {return new h2d2plot_cp(*this);} public: h2d2plot_cp(const histo::h2d& a_data) :h2d2plot(m_cp) ,m_cp(a_data) { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } virtual ~h2d2plot_cp(){ #ifdef TOOLS_MEM mem::decrement(s_class().c_str()); #endif } public: h2d2plot_cp(const h2d2plot_cp& a_from) :plottable(a_from),bins2D(a_from),h2d2plot(m_cp) ,m_cp(a_from.m_cp) { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } h2d2plot_cp& operator=(const h2d2plot_cp& a_from){ h2d2plot::operator=(a_from); m_cp = a_from.m_cp; return *this; } protected: histo::h2d m_cp; }; class p1d2plot_cp : public p1d2plot { public: TOOLS_SCLASS(tools::sg::p1d2plot_cp) public: virtual void* cast(const std::string& a_class) const { if(void* p = cmp_cast(this,a_class)) {return p;} return p1d2plot::cast(a_class); } public: virtual plottable* copy() const {return new p1d2plot_cp(*this);} public: p1d2plot_cp(const histo::p1d& a_data) :p1d2plot(m_cp) ,m_cp(a_data) { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } virtual ~p1d2plot_cp(){ #ifdef TOOLS_MEM mem::decrement(s_class().c_str()); #endif } public: p1d2plot_cp(const p1d2plot_cp& a_from) :plottable(a_from),bins1D(a_from),p1d2plot(m_cp) ,m_cp(a_from.m_cp) { #ifdef TOOLS_MEM mem::increment(s_class().c_str()); #endif } p1d2plot_cp& operator=(const p1d2plot_cp& a_from){ p1d2plot::operator=(a_from); m_cp = a_from.m_cp; return *this; } protected: histo::p1d m_cp; }; }} #endif