| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2009 Google Inc. All rights reserved. | 2  * Copyright (C) 2014 Google Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions are | 5  * modification, are permitted provided that the following conditions are | 
| 6  * met: | 6  * met: | 
| 7  * | 7  * | 
| 8  *     * Redistributions of source code must retain the above copyright | 8  *     * Redistributions of source code must retain the above copyright | 
| 9  * notice, this list of conditions and the following disclaimer. | 9  * notice, this list of conditions and the following disclaimer. | 
| 10  *     * Redistributions in binary form must reproduce the above | 10  *     * Redistributions in binary form must reproduce the above | 
| 11  * copyright notice, this list of conditions and the following disclaimer | 11  * copyright notice, this list of conditions and the following disclaimer | 
| 12  * in the documentation and/or other materials provided with the | 12  * in the documentation and/or other materials provided with the | 
| 13  * distribution. | 13  * distribution. | 
| 14  *     * Neither the name of Google Inc. nor the names of its | 14  *     * Neither the name of Google Inc. nor the names of its | 
| 15  * contributors may be used to endorse or promote products derived from | 15  * contributors may be used to endorse or promote products derived from | 
| 16  * this software without specific prior written permission. | 16  * this software without specific prior written permission. | 
| 17  * | 17  * | 
| 18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| 19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| 20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| 21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| 22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| 23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| 24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| 25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| 26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| 27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| 28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| 29  */ | 29  */ | 
| 30 | 30 | 
| 31 #ifndef WebData_h | 31 #ifndef WTF_Ptr_h | 
| 32 #define WebData_h | 32 #define WTF_Ptr_h | 
| 33 | 33 | 
| 34 #include "WebCommon.h" | 34 // Ptr is a simple wrapper for a raw pointer that provides the | 
| 35 #include "WebPrivatePtr.h" | 35 // interface (get, clear) of other pointer types such as RefPtr, | 
|  | 36 // Persistent and Member. This is used for the Blink garbage | 
|  | 37 // collection work in order to be able to write shared code that will | 
|  | 38 // use reference counting or garbage collection based on a | 
|  | 39 // compile-time flag. | 
| 36 | 40 | 
| 37 namespace WebCore { class SharedBuffer; } | 41 namespace WTF { | 
| 38 | 42 | 
| 39 namespace blink { | 43 template<typename T> | 
|  | 44 class Ptr { | 
|  | 45 public: | 
|  | 46 #if ENABLE(OILPAN) | 
|  | 47     typedef Ptr<T> FromPassRefPtr; | 
|  | 48     typedef Ptr<T> FromRefPtr; | 
|  | 49     typedef Ptr<T> FromPassOwnPtr; | 
|  | 50 #else | 
|  | 51     typedef PassRefPtr<T> FromPassRefPtr; | 
|  | 52     typedef RefPtr<T> FromRefPtr; | 
|  | 53     typedef PassOwnPtr<T> FromPassOwnPtr; | 
|  | 54 #endif | 
| 40 | 55 | 
| 41 class WebDataPrivate; | 56     Ptr(T* ptr) : m_ptr(ptr) { } | 
|  | 57     Ptr(std::nullptr_t) : m_ptr(0) { } | 
| 42 | 58 | 
| 43 // A container for raw bytes.  It is inexpensive to copy a WebData object. | 59     template<typename U> | 
| 44 // | 60     Ptr(const Ptr<U>& other) | 
| 45 // WARNING: It is not safe to pass a WebData across threads!!! | 61         : m_ptr(other.get()) | 
| 46 // |  | 
| 47 class BLINK_PLATFORM_EXPORT WebData { |  | 
| 48 public: |  | 
| 49     ~WebData() { reset(); } |  | 
| 50 |  | 
| 51     WebData() { } |  | 
| 52 |  | 
| 53     WebData(const char* data, size_t size) |  | 
| 54     { | 62     { | 
| 55         assign(data, size); |  | 
| 56     } | 63     } | 
| 57 | 64 | 
| 58     template <int N> | 65     T* get() const { return m_ptr; } | 
| 59     WebData(const char (&data)[N]) | 66     void clear() { m_ptr = 0; } | 
|  | 67 | 
|  | 68     Ptr& operator=(T* ptr) | 
| 60     { | 69     { | 
| 61         assign(data, N - 1); | 70         m_ptr = ptr; | 
| 62     } |  | 
| 63 |  | 
| 64     WebData(const WebData& d) { assign(d); } |  | 
| 65 |  | 
| 66     WebData& operator=(const WebData& d) |  | 
| 67     { |  | 
| 68         assign(d); |  | 
| 69         return *this; | 71         return *this; | 
| 70     } | 72     } | 
| 71 | 73 | 
| 72     void reset(); | 74     Ptr& operator=(std::nullptr_t) | 
| 73     void assign(const WebData&); |  | 
| 74     void assign(const char* data, size_t size); |  | 
| 75 |  | 
| 76     size_t size() const; |  | 
| 77     const char* data() const; |  | 
| 78 |  | 
| 79     bool isEmpty() const { return !size(); } |  | 
| 80     bool isNull() const { return m_private.isNull(); } |  | 
| 81 |  | 
| 82 #if INSIDE_BLINK |  | 
| 83     WebData(const PassRefPtr<WebCore::SharedBuffer>&); |  | 
| 84     WebData& operator=(const PassRefPtr<WebCore::SharedBuffer>&); |  | 
| 85     operator PassRefPtr<WebCore::SharedBuffer>() const; |  | 
| 86 #else |  | 
| 87     template <class C> |  | 
| 88     WebData(const C& c) |  | 
| 89     { | 75     { | 
| 90         assign(c.data(), c.size()); | 76         m_ptr = 0; | 
|  | 77         return *this; | 
| 91     } | 78     } | 
| 92 | 79 | 
| 93     template <class C> | 80     operator T*() const { return m_ptr; } | 
| 94     WebData& operator=(const C& c) | 81     T& operator*() const { return *m_ptr; } | 
| 95     { | 82     T* operator->() const { return m_ptr; } | 
| 96         assign(c.data(), c.size()); | 83     bool operator!() const { return !m_ptr; } | 
| 97         return *this; | 84 | 
| 98     } | 85     // This conversion operator allows implicit conversion to bool but | 
| 99 #endif | 86     // not to other integer types. | 
|  | 87     typedef T* Ptr::*UnspecifiedBoolType; | 
|  | 88     operator UnspecifiedBoolType() const { return m_ptr ? &m_ptr : 0; } | 
| 100 | 89 | 
| 101 private: | 90 private: | 
| 102     WebPrivatePtr<WebCore::SharedBuffer> m_private; | 91     T* m_ptr; | 
| 103 }; | 92 }; | 
| 104 | 93 | 
| 105 } // namespace blink | 94 } // namespace WTF | 
|  | 95 | 
|  | 96 using WTF::Ptr; | 
| 106 | 97 | 
| 107 #endif | 98 #endif | 
| OLD | NEW | 
|---|