Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Side by Side Diff: third_party/WebKit/Source/platform/inspector_protocol/PlatformSTL.h

Issue 2238423002: [DevTools] Generate all files in inspector_protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2240663003
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016 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 PlatformSTL_h
6 #define PlatformSTL_h
7
8 #include <memory>
9
10 #define PLATFORM_EXPORT
11 #ifndef CHECK
12 #define CHECK(condition) ((void) 0)
13 #endif
14 #define DCHECK(condition) ((void) 0)
15 #define NOTREACHED()
16 #define DCHECK_EQ(i, j) DCHECK(i == j)
17 #define DCHECK_GE(i, j) DCHECK(i >= j)
18 #define DCHECK_LT(i, j) DCHECK(i < j)
19 #define DCHECK_GT(i, j) DCHECK(i > j)
20 template <typename T>
21 inline void USE(T) { }
22
23 #define DEFINE_STATIC_LOCAL(type, name, arguments) \
24 static type name;
25
26 #if defined(__APPLE__) && !defined(_LIBCPP_VERSION)
27
28 namespace std {
29
30 template <typename T1, typename T2>
31 struct is_convertible {
32 private:
33 struct True_ {
34 char x[2];
35 };
36 struct False_ {
37 };
38
39 static True_ helper(T2 const &);
40 static False_ helper(...);
41
42 public:
43 static bool const value = (
44 sizeof(True_) == sizeof(is_convertible::helper(T1()))
45 );
46 };
47
48 template <bool, class T = void>
49 struct enable_if {
50 };
51
52 template <class T>
53 struct enable_if<true, T> {
54 typedef T type;
55 };
56
57 template<class T>
58 struct remove_extent {
59 typedef T type;
60 };
61
62 template<class T>
63 struct remove_extent<T[]> {
64 typedef T type;
65 };
66
67 template<class T, std::size_t N>
68 struct remove_extent<T[N]> {
69 typedef T type;
70 };
71
72 typedef decltype(nullptr) nullptr_t;
73
74 template<class T, T v>
75 struct integral_constant {
76 static constexpr T value = v;
77 typedef T value_type;
78 typedef integral_constant type;
79 constexpr operator value_type() const noexcept { return value; }
80 constexpr value_type operator()() const noexcept { return value; }
81 };
82
83 typedef integral_constant<bool, true> true_type;
84 typedef integral_constant<bool, false> false_type;
85
86 template<class T>
87 struct is_array : false_type {};
88
89 template<class T>
90 struct is_array<T[]> : true_type {};
91
92 template<class T, std::size_t N>
93 struct is_array<T[N]> : true_type {};
94
95 template <typename T>
96 struct OwnedPtrDeleter {
97 static void deletePtr(T* ptr)
98 {
99 static_assert(sizeof(T) > 0, "type must be complete");
100 delete ptr;
101 }
102 };
103
104 template <typename T>
105 struct OwnedPtrDeleter<T[]> {
106 static void deletePtr(T* ptr)
107 {
108 static_assert(sizeof(T) > 0, "type must be complete");
109 delete[] ptr;
110 }
111 };
112
113 template <class T, int n>
114 struct OwnedPtrDeleter<T[n]> {
115 static_assert(sizeof(T) < 0, "do not use array with size as type");
116 };
117
118 template <typename T> class unique_ptr {
119 public:
120 typedef typename remove_extent<T>::type ValueType;
121 typedef ValueType* PtrType;
122
123 unique_ptr() : m_ptr(nullptr) {}
124 unique_ptr(std::nullptr_t) : m_ptr(nullptr) {}
125 unique_ptr(const unique_ptr&);
126 unique_ptr(unique_ptr&&);
127 template <typename U, typename = typename enable_if<is_convertible<U*, T*>:: value>::type> unique_ptr(unique_ptr<U>&&);
128
129 ~unique_ptr()
130 {
131 OwnedPtrDeleter<T>::deletePtr(m_ptr);
132 m_ptr = nullptr;
133 }
134
135 PtrType get() const { return m_ptr; }
136
137 void reset(PtrType = nullptr);
138 PtrType release()
139 {
140 return this->internalRelease();
141 }
142
143 ValueType& operator*() const { DCHECK(m_ptr); return *m_ptr; }
144 PtrType operator->() const { DCHECK(m_ptr); return m_ptr; }
145
146 ValueType& operator[](std::ptrdiff_t i) const;
147
148 bool operator!() const { return !m_ptr; }
149 explicit operator bool() const { return m_ptr; }
150
151 unique_ptr& operator=(std::nullptr_t) { reset(); return *this; }
152
153 unique_ptr& operator=(const unique_ptr&);
154 unique_ptr& operator=(unique_ptr&&);
155 template <typename U> unique_ptr& operator=(unique_ptr<U>&&);
156
157 void swap(unique_ptr& o) { std::swap(m_ptr, o.m_ptr); }
158
159 static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
160
161 explicit unique_ptr(PtrType ptr) : m_ptr(ptr) {}
162
163 private:
164 PtrType internalRelease() const
165 {
166 PtrType ptr = m_ptr;
167 m_ptr = nullptr;
168 return ptr;
169 }
170
171 // We should never have two unique_ptrs for the same underlying object
172 // (otherwise we'll get double-destruction), so these equality operators
173 // should never be needed.
174 template <typename U> bool operator==(const unique_ptr<U>&) const
175 {
176 static_assert(!sizeof(U*), "unique_ptrs should never be equal");
177 return false;
178 }
179 template <typename U> bool operator!=(const unique_ptr<U>&) const
180 {
181 static_assert(!sizeof(U*), "unique_ptrs should never be equal");
182 return false;
183 }
184
185 mutable PtrType m_ptr;
186 };
187
188
189 template <typename T> inline void unique_ptr<T>::reset(PtrType ptr)
190 {
191 PtrType p = m_ptr;
192 m_ptr = ptr;
193 DCHECK(!p || m_ptr != p);
194 OwnedPtrDeleter<T>::deletePtr(p);
195 }
196
197 template <typename T> inline typename unique_ptr<T>::ValueType& unique_ptr<T>::o perator[](std::ptrdiff_t i) const
198 {
199 static_assert(is_array<T>::value, "elements access is possible for arrays on ly");
200 DCHECK(m_ptr);
201 DCHECK_GE(i, 0);
202 return m_ptr[i];
203 }
204
205 template <typename T> inline unique_ptr<T>::unique_ptr(const unique_ptr<T>& o)
206 : m_ptr(o.internalRelease())
207 {
208 }
209
210 template <typename T> inline unique_ptr<T>::unique_ptr(unique_ptr<T>&& o)
211 : m_ptr(o.internalRelease())
212 {
213 }
214
215 template <typename T>
216 template <typename U, typename> inline unique_ptr<T>::unique_ptr(unique_ptr<U>&& o)
217 : m_ptr(o.release())
218 {
219 static_assert(!is_array<T>::value, "pointers to array must never be converte d");
220 }
221
222 template <typename T> inline unique_ptr<T>& unique_ptr<T>::operator=(const uniqu e_ptr<T>& o)
223 {
224 reset(o.internalRelease());
225 return *this;
226 }
227
228 template <typename T> inline unique_ptr<T>& unique_ptr<T>::operator=(unique_ptr< T>&& o)
229 {
230 reset(o.internalRelease());
231 return *this;
232 }
233
234 template <typename T>
235 template <typename U> inline unique_ptr<T>& unique_ptr<T>::operator=(unique_ptr< U>&& o)
236 {
237 static_assert(!is_array<T>::value, "pointers to array must never be converte d");
238 PtrType ptr = m_ptr;
239 m_ptr = o.release();
240 DCHECK(!ptr || m_ptr != ptr);
241 OwnedPtrDeleter<T>::deletePtr(ptr);
242
243 return *this;
244 }
245
246 template <typename T> inline void swap(unique_ptr<T>& a, unique_ptr<T>& b)
247 {
248 a.swap(b);
249 }
250
251 template <typename T, typename U> inline bool operator==(const unique_ptr<T>& a, U* b)
252 {
253 return a.get() == b;
254 }
255
256 template <typename T, typename U> inline bool operator==(T* a, const unique_ptr< U>& b)
257 {
258 return a == b.get();
259 }
260
261 template <typename T, typename U> inline bool operator!=(const unique_ptr<T>& a, U* b)
262 {
263 return a.get() != b;
264 }
265
266 template <typename T, typename U> inline bool operator!=(T* a, const unique_ptr< U>& b)
267 {
268 return a != b.get();
269 }
270
271 template <typename T> inline typename unique_ptr<T>::PtrType getPtr(const unique _ptr<T>& p)
272 {
273 return p.get();
274 }
275
276 template <typename T>
277 unique_ptr<T> move(unique_ptr<T>& ptr)
278 {
279 return unique_ptr<T>(ptr.release());
280 }
281
282 }
283
284 #endif // defined(__APPLE__) && !defined(_LIBCPP_VERSION)
285
286 template <typename T>
287 std::unique_ptr<T> wrapUnique(T* ptr)
288 {
289 return std::unique_ptr<T>(ptr);
290 }
291
292 #endif // PlatformSTL_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698