NewNet/nnobject.h

00001 /*  NewNet - A networking framework in C++
00002     Copyright (C) 2006 Ingmar K. Steen (iksteen@gmail.com)
00003 
00004     This program is free software; you can redistribute it and/or modify
00005     it under the terms of the GNU General Public License as published by
00006     the Free Software Foundation; either version 2 of the License, or
00007     (at your option) any later version.
00008 
00009     This program is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012     GNU General Public License for more details.
00013 
00014     You should have received a copy of the GNU General Public License
00015     along with this program; if not, write to the Free Software
00016     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018  */
00019 
00020 #ifndef NEWNET_OBJECT_H
00021 #define NEWNET_OBJECT_H
00022 
00023 #include "nnguardobject.h"
00024 #include "nnrefcounter.h"
00025 
00026 #ifdef NN_PTR_DEBUG
00027  #ifdef NN_PTR_DEBUG_ASSERT
00028   #include <assert.h>
00029  #else
00030   #include <iostream>
00031  #endif // NN_PTR_DEBUG_ASSERT
00032 #endif // NN_PTR_DEBUG
00033 
00034 namespace NewNet
00035 {
00037 
00039   class Object
00040   {
00041   public:
00043 
00045     Object()
00046     {
00047     }
00048 
00050 
00052     Object(const Object &)
00053     {
00054     }
00055 
00057 
00059     virtual ~Object()
00060     {
00061       m_GuardObject.emit(this);
00062 #ifdef NN_PTR_DEBUG
00063  #ifdef NN_PTR_DEBUG_ASSERT
00064       assert(m_RefCounter.count() == 0);
00065  #else
00066       if(m_RefCounter.count() != 0)
00067         std::cerr << "Warning: Object " << this << " deleted while refcount = " << m_RefCounter.count() << "." << std::endl;
00068  #endif // NN_PTR_DEBUG_ASSERT
00069 #endif // NN_PTR_DEBUG
00070     }
00071 
00073 
00075     GuardObject & guardObject()
00076     {
00077       return m_GuardObject;
00078     }
00079 
00081 
00083     RefCounter & refCounter()
00084     {
00085       return m_RefCounter;
00086     }
00087 
00088   private:
00089     GuardObject m_GuardObject;
00090     RefCounter m_RefCounter;
00091   };
00092 }
00093 
00094 #endif // NEWNET_OBJECT_H

Generated on Sun Jan 7 14:00:01 2007 for NewNet by  doxygen 1.5.1