title
Graph Drawing Toolkit

An object-oriented C++ library for handling and drawing graphs

ptr.h

Go to the documentation of this file.
00001 
00002 #ifndef __ptr__
00003 
00004 #define __ptr__
00005 
00006 
00007 inline void* operator new(size_t, void* where, int) { return where; }   //GDT
00008 
00009 
00010 inline void operator delete(void*, size_t) {return;};
00011 inline void operator delete(void*, size_t, int) {return;};
00012 inline void operator delete(void*, void*, int) {return;};
00013 namespace gdt {
00014 
00015 
00016         typedef void* Ptr;
00017 
00018         //Copia il contenuto di un oggetto di dimensioni minori di un puntatore
00019         //in un puntatore (Ptr)
00020 
00021         //inline void* operator new(size_t s) { return ::operator new(s); }
00022 
00023     //inline void* operator new(size_t, void* where) { return where; }        //PJ
00024 
00025 //      #define COPY_INTO_PTR(T,x,p) (new((void*)(&p),0) T(x))
00026         #define COPY_INTO_PTR(T,x,p) (new((void*)(&p),0) T(x))
00027 
00028         //Copia un oggetto x in modo diverso a seconda della sua dimensione
00029         template <class T>
00030         inline Ptr ptr_copy(T x) {
00031                 Ptr p = 0;
00032                 if (sizeof(T) <= sizeof(Ptr))
00033                         COPY_INTO_PTR(T,x,p);
00034                 else
00035                         p = (Ptr) new T(x);
00036                 return p;
00037         }
00038 
00039         //Accede ad un Ptr
00040         #define PTR_ACCESS(T,p) ptr_access((T*)0, p)
00041 
00042         template <class T>
00043         inline T& ptr_access(T*, Ptr& p) {
00044                 T* t;
00045                 if (sizeof(T) <= sizeof(Ptr))
00046                         t = (T*)&p;
00047                 else
00048                         t = (T*)p;
00049                 return *t;
00050         }
00051 
00052         #define PTR_DEFAULT_INIT(T,p) ptr_default_init((T*)0,p)
00053 
00054         template <class T>
00055         inline void ptr_default_init(T*, Ptr& p) {
00056                 if (sizeof(T) > sizeof(Ptr))
00057                         p = ((void*) new T());
00058         }
00059 
00060         #define PTR_CONST_ACCESS(T,p) ptr_const_access((T*)0, p)
00061 
00062         template <class T>
00063         inline const T& ptr_const_access(T*, const Ptr& p) {
00064                 const T* t;
00065                 if (sizeof(T) <= sizeof(Ptr))
00066                         t = (const T*)&p;
00067                 else
00068                         t = (const T*)p;
00069                 return *t;
00070         }
00071 
00072         #define PTR_DELETE(T,p) ptr_delete((T*)0, p)
00073 
00074         template <class T>
00075         inline void ptr_delete(T*, Ptr p) {
00076                 if (sizeof(T) > sizeof(Ptr))
00077                         delete ((T*) p);
00078                 //else do nothing
00079         }
00080 }
00081 
00082 #endif

Generated on Thu Jan 10 14:48:01 2008 for GDToolkit GAPI by  doxygen 1.5.3