| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2003, 2005, 2008 Apple Inc. All rights reserved. | 5 * Copyright (C) 2003, 2005, 2008 Apple Inc. All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 template <typename T> class DataRef { | 32 template <typename T> class DataRef { |
| 33 USING_FAST_MALLOC(DataRef); | 33 USING_FAST_MALLOC(DataRef); |
| 34 public: | 34 public: |
| 35 const T* get() const { return m_data.get(); } | 35 const T* get() const { return m_data.get(); } |
| 36 | 36 |
| 37 const T& operator*() const { return *get(); } | 37 const T& operator*() const { return *get(); } |
| 38 const T* operator->() const { return get(); } | 38 const T* operator->() const { return get(); } |
| 39 | 39 |
| 40 T* access() | 40 T* access() |
| 41 { | 41 { |
| 42 if (!m_data->hasOneRef()) | |
| 43 m_data = m_data->copy(); | |
| 44 return m_data.get(); | 42 return m_data.get(); |
| 45 } | 43 } |
| 46 | 44 |
| 47 void init() | 45 void init() |
| 48 { | 46 { |
| 49 ASSERT(!m_data); | 47 ASSERT(!m_data); |
| 50 m_data = T::create(); | 48 m_data = T::create(); |
| 51 } | 49 } |
| 52 | 50 |
| 53 bool operator==(const DataRef<T>& o) const | 51 bool operator==(const DataRef<T>& o) const |
| (...skipping 11 matching lines...) Expand all Loading... |
| 65 } | 63 } |
| 66 | 64 |
| 67 void operator=(std::nullptr_t) { m_data = nullptr; } | 65 void operator=(std::nullptr_t) { m_data = nullptr; } |
| 68 private: | 66 private: |
| 69 RefPtr<T> m_data; | 67 RefPtr<T> m_data; |
| 70 }; | 68 }; |
| 71 | 69 |
| 72 } // namespace blink | 70 } // namespace blink |
| 73 | 71 |
| 74 #endif // DataRef_h | 72 #endif // DataRef_h |
| OLD | NEW |