Cptr.h

Go to the documentation of this file.
00001 /* ========================================================================
00002  * Copyright (c) 2006,
00003  * Institute for Computer Graphics and Vision
00004  * Graz University of Technology
00005  * All rights reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions are
00009  * met:
00010  *
00011  * Redistributions of source code must retain the above copyright notice,
00012  * this list of conditions and the following disclaimer.
00013  *
00014  * Redistributions in binary form must reproduce the above copyright
00015  * notice, this list of conditions and the following disclaimer in the
00016  * documentation and/or other materials provided with the distribution.
00017  *
00018  * Neither the name of the Graz University of Technology nor the names of
00019  * its contributors may be used to endorse or promote products derived from
00020  * this software without specific prior written permission.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00023  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00024  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00025  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00026  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00027  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00028  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00029  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00030  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00031  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00032  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  * ========================================================================
00034  * PROJECT: OpenTracker
00035  * ======================================================================== */
00043 /* ======================================================================= */
00044 
00045 
00046 #ifndef OT_MISC_CPTR_H_INCLUDED
00047 #define OT_MISC_CPTR_H_INCLUDED
00048 
00049 #include <cassert>
00050 
00052 
00055 template <class T>
00056 class Cptr{
00057 
00058  protected:
00059   T * obj;
00060 
00061  public:
00062 
00063   Cptr () :obj(0){};
00064   Cptr(T * o):obj(0){
00065     *this = o;
00066   }; 
00067 
00068   Cptr (const Cptr<T> & p): obj(0){ 
00069     *this = p;
00070   };
00071   
00072   ~Cptr (){
00073     if(obj) obj->_deref();
00074   };
00075 
00076   inline Cptr<T>& operator = (const Cptr<T> &p){
00077 
00078     if(obj) obj->_deref();
00079     obj=p.obj;
00080     if(obj) obj->_ref();
00081     return *this;
00082   };
00083 
00084   inline Cptr<T>& operator = (T * p){
00085 
00086     if(obj) obj->_deref();
00087     obj=p;
00088     if(obj) obj->_ref() ;
00089     return *this;
00090   };
00091 
00092   inline T& operator *(){
00093     assert (obj != 0 && "Tried to access empty obj");
00094     return *obj;
00095   };
00096 
00097 
00098   inline T* operator ->() const {
00099 
00100     assert (obj != 0 && "Tried to -> empty obj");
00101     return obj;
00102   };
00103 
00104   inline operator T* () const{
00105     return obj;
00106   } ;
00107 
00108   inline T* item () const {
00109     return obj;
00110   }     
00111 
00112   inline bool operator !() {return !(obj);};
00113 
00114   inline bool isValid() const {
00115     return (obj !=0);
00116   };
00117 
00118   inline bool operator ==(const Cptr<T> &p) const{
00119 
00120     return (obj == p.obj);
00121   };
00122 
00123   inline bool operator == (T * o) const{
00124     return (obj == o);
00125   };
00126 
00127 };
00128 
00129 #endif // MEM_CPTR_H_INCLUDED
00130 
00131 
00132 /* 
00133  * ------------------------------------------------------------
00134  *   End of Cptr.h
00135  * ------------------------------------------------------------
00136  *   Automatic Emacs configuration follows.
00137  *   Local Variables:
00138  *   mode:c++
00139  *   c-basic-offset: 4
00140  *   eval: (c-set-offset 'substatement-open 0)
00141  *   eval: (c-set-offset 'case-label '+)
00142  *   eval: (c-set-offset 'statement 'c-lineup-runin-statements)
00143  *   eval: (setq indent-tabs-mode nil)
00144  *   End:
00145  * ------------------------------------------------------------ 
00146  */

Generated on Wed Feb 28 15:18:50 2007 for NaviTrack by  doxygen 1.4.6