[JSC] Implement optimized WeakMap and WeakSet
[WebKit-https.git] / Source / WTF / wtf / MallocPtr.h
index d618ba2..7f6a02c 100644 (file)
 #ifndef MallocPtr_h
 #define MallocPtr_h
 
+#include <wtf/FastMalloc.h>
+
 // MallocPtr is a smart pointer class that calls fastFree in its destructor.
 // It is intended to be used for pointers where the C++ lifetime semantics
 // (calling constructors and destructors) is not desired. 
 
 namespace WTF {
 
-template<typename T> class MallocPtr {
+template<typename T, typename Malloc = FastMalloc> class MallocPtr {
 public:
     MallocPtr()
         : m_ptr(nullptr)
@@ -51,7 +53,7 @@ public:
 
     ~MallocPtr()
     {
-        fastFree(m_ptr);
+        Malloc::free(m_ptr);
     }
 
     T* get() const
@@ -97,15 +99,17 @@ public:
 
     static MallocPtr malloc(size_t size)
     {
-        MallocPtr mallocPtr;
-        mallocPtr.m_ptr = static_cast<T*>(fastMalloc(size));
+        return MallocPtr { static_cast<T*>(Malloc::malloc(size)) };
+    }
 
-        return mallocPtr;
+    static MallocPtr tryMalloc(size_t size)
+    {
+        return MallocPtr { static_cast<T*>(Malloc::tryMalloc(size)) };
     }
 
     void realloc(size_t newSize)
     {
-        m_ptr = static_cast<T*>(fastRealloc(m_ptr, newSize));
+        m_ptr = static_cast<T*>(Malloc::realloc(m_ptr, newSize));
     }
 
 private:
@@ -117,6 +121,8 @@ private:
     T* m_ptr;
 };
 
+static_assert(sizeof(MallocPtr<int>) == sizeof(int*), "");
+
 template<typename U> MallocPtr<U> adoptMallocPtr(U* ptr)
 {
     return MallocPtr<U>(ptr);