#ifndef __GUT_PVARIABLE_HPP #define __GUT_PVARIABLE_HPP #include "variable.hpp" namespace gut { class pvariable { private: variable *m_ptr; unsigned long *m_count; public: pvariable(void); pvariable(pvariable &rhs); pvariable(variable *ptr); ~pvariable(void); void set(variable *ptr); inline const variable *get(void) const { return m_ptr; } inline const pvariable operator =(pvariable &rhs) { if (m_count != NULL) { if (*m_count == 0) { delete m_count; delete m_ptr; } else { *m_count -= 1; } } m_count = rhs.m_count; m_ptr = rhs.m_ptr; if (m_count != NULL) { *m_count += 1; } return *this; } inline const pvariable operator =(variable *ptr) { if (m_count != NULL) { if (*m_count == 0) { delete m_count; delete m_ptr; } else { *m_count -= 1; } } else { m_count = new unsigned long(); } *m_count = 0; m_ptr = ptr; return *this; } }; } // namespace gut #endif // __GUT_PVARIABLE_HPP