reSIProcate/rutil  9694
HeapInstanceCounter.hxx
Go to the documentation of this file.
00001 #ifndef RESIP_HeapInstanceCounter_hxx
00002 #define RESIP_HeapInstanceCounter_hxx
00003 
00004 #ifdef RESIP_HEAP_COUNT
00005 
00006 #include <typeinfo>
00007 #include <cstddef>
00008 
00018 #define RESIP_HeapCount(type_)                                                  \
00019       static void* operator new (size_t bytes)                                  \
00020       {                                                                         \
00021           return  resip::HeapInstanceCounter::allocate(bytes, typeid(type_));   \
00022       }                                                                         \
00023       static void* operator new (size_t bytes, void* p)                         \
00024       {                                                                         \
00025           return  p;                                                            \
00026       }                                                                         \
00027       static void* operator new[] (size_t bytes)                                \
00028       {                                                                         \
00029           return  resip::HeapInstanceCounter::allocate(bytes, typeid(type_));   \
00030       }                                                                         \
00031       static void operator delete (void* addr)                                  \
00032       {                                                                         \
00033           resip::HeapInstanceCounter::deallocate(addr, typeid(type_));          \
00034       }                                                                         \
00035       static void operator delete[] (void* addr)                                \
00036       {                                                                         \
00037           resip::HeapInstanceCounter::deallocate(addr, typeid(type_));          \
00038       }
00039 #else
00040 #if defined (__SUNPRO_CC) 
00041 #define RESIP_HeapCount(type_)class type_
00042 #else
00043 #define RESIP_HeapCount(type_)
00044 #endif
00045 #endif // RESIP_HEAP_COUNT
00046 
00047 namespace resip
00048 {
00049 
00050 class HeapInstanceCounter
00051 {
00052    public:
00053       static void dump();
00054 
00055 #ifdef RESIP_HEAP_COUNT
00056       static void* allocate(size_t bytes, const std::type_info& ti);
00057       static void deallocate(void* addr, const std::type_info& ti);
00058 #endif
00059 
00060 };
00061 
00062 }
00063 
00064 #endif
00065 
00066 /* ====================================================================
00067  * The Vovida Software License, Version 1.0 
00068  * 
00069  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
00070  * 
00071  * Redistribution and use in source and binary forms, with or without
00072  * modification, are permitted provided that the following conditions
00073  * are met:
00074  * 
00075  * 1. Redistributions of source code must retain the above copyright
00076  *    notice, this list of conditions and the following disclaimer.
00077  * 
00078  * 2. Redistributions in binary form must reproduce the above copyright
00079  *    notice, this list of conditions and the following disclaimer in
00080  *    the documentation and/or other materials provided with the
00081  *    distribution.
00082  * 
00083  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
00084  *    and "Vovida Open Communication Application Library (VOCAL)" must
00085  *    not be used to endorse or promote products derived from this
00086  *    software without prior written permission. For written
00087  *    permission, please contact vocal@vovida.org.
00088  *
00089  * 4. Products derived from this software may not be called "VOCAL", nor
00090  *    may "VOCAL" appear in their name, without prior written
00091  *    permission of Vovida Networks, Inc.
00092  * 
00093  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
00094  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00095  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
00096  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
00097  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
00098  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
00099  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00100  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00101  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
00102  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00103  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
00104  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
00105  * DAMAGE.
00106  * 
00107  * ====================================================================
00108  * 
00109  * This software consists of voluntary contributions made by Vovida
00110  * Networks, Inc. and many individuals on behalf of Vovida Networks,
00111  * Inc.  For more information on Vovida Networks, Inc., please see
00112  * <http://www.vovida.org/>.
00113  *
00114  */