OLD | NEW |
1 /* | 1 /* |
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 * Library General Public License for more details. | 13 * Library General Public License for more details. |
14 * | 14 * |
15 * You should have received a copy of the GNU Library General Public License | 15 * You should have received a copy of the GNU Library General Public License |
16 * along with this library; see the file COPYING.LIB. If not, write to | 16 * along with this library; see the file COPYING.LIB. If not, write to |
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
18 * Boston, MA 02110-1301, USA. | 18 * Boston, MA 02110-1301, USA. |
19 */ | 19 */ |
20 | 20 |
21 #ifndef CSSValue_h | 21 #ifndef CSSValue_h |
22 #define CSSValue_h | 22 #define CSSValue_h |
23 | 23 |
24 #include "core/CoreExport.h" | 24 #include "core/CoreExport.h" |
| 25 #include "core/css/CSSPrimitiveValue.h" |
25 #include "core/css/CSSValueObject.h" | 26 #include "core/css/CSSValueObject.h" |
26 #include "platform/heap/Handle.h" | 27 #include "platform/heap/Handle.h" |
27 #include "wtf/RefCounted.h" | 28 #include "wtf/RefCounted.h" |
28 #include "wtf/RefPtr.h" | 29 #include "wtf/RefPtr.h" |
29 | 30 |
30 namespace blink { | 31 namespace blink { |
31 | 32 |
32 // A non-nullable container for CSSValueObject. Takes ownership of the passed | 33 // A non-nullable container for CSSValueObject. Takes ownership of the passed |
33 // CSSValueObject. | 34 // CSSValueObject. |
34 class CORE_EXPORT CSSValue { | 35 class CORE_EXPORT CSSValue { |
(...skipping 25 matching lines...) Expand all Loading... |
60 ASSERT(m_data); | 61 ASSERT(m_data); |
61 } | 62 } |
62 #endif | 63 #endif |
63 | 64 |
64 CSSValue(const CSSValue& cssValue) | 65 CSSValue(const CSSValue& cssValue) |
65 : m_data(cssValue.m_data) | 66 : m_data(cssValue.m_data) |
66 { | 67 { |
67 ref(); | 68 ref(); |
68 } | 69 } |
69 | 70 |
| 71 // Implicit conversion from CSSPrimitiveValue. |
| 72 CSSValue(CSSPrimitiveValue cssPrimitiveValue) |
| 73 : m_data(static_cast<CSSValueObject*>(cssPrimitiveValue.get())) |
| 74 { |
| 75 ref(); |
| 76 } |
| 77 |
70 ~CSSValue() | 78 ~CSSValue() |
71 { | 79 { |
72 deref(); | 80 deref(); |
73 } | 81 } |
74 | 82 |
75 CSSValue& operator=(const CSSValue& rhs) | 83 CSSValue& operator=(const CSSValue& rhs) |
76 { | 84 { |
77 rhs.ref(); | 85 rhs.ref(); |
78 deref(); | 86 deref(); |
79 m_data = rhs.m_data; | 87 m_data = rhs.m_data; |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 { | 222 { |
215 ref(); | 223 ref(); |
216 } | 224 } |
217 | 225 |
218 NullableCSSValue(const CSSValue& cssValue) | 226 NullableCSSValue(const CSSValue& cssValue) |
219 : m_data(cssValue.m_data) | 227 : m_data(cssValue.m_data) |
220 { | 228 { |
221 ref(); | 229 ref(); |
222 } | 230 } |
223 | 231 |
| 232 // Implicit conversion from CSSPrimitiveValue. |
| 233 NullableCSSValue(CSSPrimitiveValue cssPrimitiveValue) |
| 234 : m_data(static_cast<CSSValueObject*>(cssPrimitiveValue.get())) |
| 235 { |
| 236 ref(); |
| 237 } |
| 238 |
224 ~NullableCSSValue() | 239 ~NullableCSSValue() |
225 { | 240 { |
226 deref(); | 241 deref(); |
227 }; | 242 }; |
228 | 243 |
229 operator bool() const | 244 explicit operator bool() const |
230 { | 245 { |
231 return m_data; | 246 return m_data; |
232 } | 247 } |
233 | 248 |
234 NullableCSSValue& operator=(const NullableCSSValue& rhs) | 249 NullableCSSValue& operator=(const NullableCSSValue& rhs) |
235 { | 250 { |
236 rhs.ref(); | 251 rhs.ref(); |
237 deref(); | 252 deref(); |
238 m_data = rhs.m_data; | 253 m_data = rhs.m_data; |
239 return *this; | 254 return *this; |
240 } | 255 } |
241 | 256 |
242 bool operator==(const NullableCSSValue& rhs) | 257 bool operator==(const NullableCSSValue& rhs) const |
243 { | 258 { |
244 return m_data ? rhs.m_data && m_data->equals(*rhs.m_data) : !bool(rhs.m_
data); | 259 return m_data ? rhs.m_data && m_data->equals(*rhs.m_data) : !bool(rhs.m_
data); |
245 } | 260 } |
246 | 261 |
247 bool operator!=(const NullableCSSValue& rhs) | 262 bool operator!=(const NullableCSSValue& rhs) const |
248 { | 263 { |
249 return !(*this == rhs); | 264 return !(*this == rhs); |
250 } | 265 } |
251 | 266 |
252 CSSValue& operator*() | 267 CSSValue& operator*() |
253 { | 268 { |
254 ASSERT(m_data); | 269 ASSERT(m_data); |
255 // reinterpret_casts used to avoid ref-churn. | 270 // reinterpret_casts used to avoid ref-churn. |
256 return *reinterpret_cast<CSSValue*>(this); | 271 return *reinterpret_cast<CSSValue*>(this); |
257 } | 272 } |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 return *static_cast<thisType*>(value.get()); \ | 356 return *static_cast<thisType*>(value.get()); \ |
342 } \ | 357 } \ |
343 inline thisType* to##thisType(const NullableCSSValue& value) \ | 358 inline thisType* to##thisType(const NullableCSSValue& value) \ |
344 { \ | 359 { \ |
345 if (!value) \ | 360 if (!value) \ |
346 return nullptr; \ | 361 return nullptr; \ |
347 ASSERT_WITH_SECURITY_IMPLICATION(value->predicate); \ | 362 ASSERT_WITH_SECURITY_IMPLICATION(value->predicate); \ |
348 return static_cast<thisType*>(value.get()); \ | 363 return static_cast<thisType*>(value.get()); \ |
349 } | 364 } |
350 | 365 |
| 366 // Returns by value on purpose. |
| 367 inline CSSPrimitiveValue toCSSPrimitiveValue(const CSSValue& value) |
| 368 { |
| 369 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue()); |
| 370 return CSSPrimitiveValue(static_cast<CSSPrimitiveValue::CSSLargePrimitiveVal
ue*>(value.get())); |
| 371 } |
| 372 |
351 } // namespace blink | 373 } // namespace blink |
352 | 374 |
353 WTF_ALLOW_CLEAR_UNUSED_SLOTS_WITH_MEM_FUNCTIONS(blink::CSSValue); | 375 WTF_ALLOW_CLEAR_UNUSED_SLOTS_WITH_MEM_FUNCTIONS(blink::CSSValue); |
354 WTF_ALLOW_CLEAR_UNUSED_SLOTS_WITH_MEM_FUNCTIONS(blink::NullableCSSValue); | 376 WTF_ALLOW_CLEAR_UNUSED_SLOTS_WITH_MEM_FUNCTIONS(blink::NullableCSSValue); |
355 | 377 |
356 #endif // CSSValue_h | 378 #endif // CSSValue_h |
OLD | NEW |