OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef Nullable_h | |
6 #define Nullable_h | |
7 | |
8 #include "wtf/Assertions.h" | |
9 | |
10 namespace WebCore { | |
11 | |
12 template <typename T> | |
13 class Nullable { | |
14 public: | |
15 Nullable() | |
16 : m_value() | |
17 , m_isNull(true) { } | |
18 | |
19 Nullable(const T& value) | |
20 : m_value(value) | |
21 , m_isNull(false) { } | |
22 | |
23 Nullable(const Nullable& other) | |
24 : m_value(other.m_value) | |
25 , m_isNull(other.m_isNull) { } | |
26 | |
27 Nullable& operator=(const Nullable& other) | |
28 { | |
29 m_value = other.m_value; | |
30 m_isNull = other.m_isNull; | |
31 return *this; | |
32 } | |
33 | |
34 T get() const { ASSERT(!m_isNull); return m_value; } | |
35 bool isNull() const { return m_isNull; } | |
36 | |
37 operator bool() const { return !m_isNull && m_value; } | |
38 | |
39 bool operator==(const Nullable& other) const | |
40 { | |
41 return (m_isNull && other.m_isNull) || (!m_isNull && !other.m_isNull &&
m_value == other.m_value); | |
42 } | |
43 | |
44 private: | |
45 T m_value; | |
46 bool m_isNull; | |
47 }; | |
48 | |
49 } // namespace WebCore | |
50 | |
51 #endif // Nullable_h | |
OLD | NEW |