Home | History | Annotate | Download | only in wtf
      1 /*
      2  * Copyright (C) 2008, 2009 Paul Pedriana <ppedriana (at) ea.com>. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1.  Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  * 2.  Redistributions in binary form must reproduce the above copyright
     11  *     notice, this list of conditions and the following disclaimer in the
     12  *     documentation and/or other materials provided with the distribution.
     13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     14  *     its contributors may be used to endorse or promote products derived
     15  *     from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #ifndef FastAllocBase_h
     30 #define FastAllocBase_h
     31 
     32 // Provides customizable overrides of fastMalloc/fastFree and operator new/delete
     33 //
     34 // Provided functionality:
     35 //    Macro: WTF_MAKE_FAST_ALLOCATED
     36 //
     37 // Example usage:
     38 //    class Widget {
     39 //        WTF_MAKE_FAST_ALLOCATED
     40 //    ...
     41 //    };
     42 //
     43 //    struct Data {
     44 //        WTF_MAKE_FAST_ALLOCATED
     45 //    public:
     46 //    ...
     47 //    };
     48 //
     49 
     50 #include "wtf/Assertions.h"
     51 #include "wtf/FastMalloc.h"
     52 #include "wtf/StdLibExtras.h"
     53 
     54 #define WTF_MAKE_FAST_ALLOCATED \
     55 public: \
     56     void* operator new(size_t, void* p) { return p; } \
     57     void* operator new[](size_t, void* p) { return p; } \
     58     \
     59     void* operator new(size_t size) \
     60     { \
     61         return ::WTF::fastMalloc(size); \
     62     } \
     63     \
     64     void operator delete(void* p) \
     65     { \
     66         ::WTF::fastFree(p); \
     67     } \
     68     \
     69     void* operator new[](size_t size) \
     70     { \
     71         return ::WTF::fastMalloc(size); \
     72     } \
     73     \
     74     void operator delete[](void* p) \
     75     { \
     76          ::WTF::fastFree(p); \
     77     } \
     78     void* operator new(size_t, NotNullTag, void* location) \
     79     { \
     80         ASSERT(location); \
     81         return location; \
     82     } \
     83 private: \
     84 typedef int __thisIsHereToForceASemicolonAfterThisMacro
     85 
     86 #endif // FastAllocBase_h
     87