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

Side by Side Diff: third_party/WebKit/Source/wtf/Functional.h

Issue 2122133002: Make Function's constructor and bindInternal() private Base URL: https://chromium.googlesource.com/chromium/src.git@TRV_WTFCrossThreadBind
Patch Set: Rebase Created 4 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 } 232 }
233 233
234 template<typename Signature, FunctionThreadAffinity threadAffinity = SameThreadA ffinity> 234 template<typename Signature, FunctionThreadAffinity threadAffinity = SameThreadA ffinity>
235 class Function; 235 class Function;
236 236
237 template<typename R, typename... Args, FunctionThreadAffinity threadAffinity> 237 template<typename R, typename... Args, FunctionThreadAffinity threadAffinity>
238 class Function<R(Args...), threadAffinity> { 238 class Function<R(Args...), threadAffinity> {
239 USING_FAST_MALLOC(Function); 239 USING_FAST_MALLOC(Function);
240 WTF_MAKE_NONCOPYABLE(Function); 240 WTF_MAKE_NONCOPYABLE(Function);
241 public: 241 public:
242 Function(base::Callback<R(Args...)> callback)
243 : m_callback(std::move(callback)) { }
244
245 ~Function() 242 ~Function()
246 { 243 {
247 DCHECK(m_threadChecker.CalledOnValidThread()); 244 DCHECK(m_threadChecker.CalledOnValidThread());
248 } 245 }
249 246
250 R operator()(Args... args) 247 R operator()(Args... args)
251 { 248 {
252 DCHECK(m_threadChecker.CalledOnValidThread()); 249 DCHECK(m_threadChecker.CalledOnValidThread());
253 return m_callback.Run(std::forward<Args>(args)...); 250 return m_callback.Run(std::forward<Args>(args)...);
254 } 251 }
255 252
256 explicit operator base::Callback<R(Args...)>() 253 explicit operator base::Callback<R(Args...)>()
257 { 254 {
258 return m_callback; 255 return m_callback;
259 } 256 }
260 257
261 private: 258 private:
259 Function(base::Callback<R(Args...)> callback)
260 : m_callback(std::move(callback)) { }
261
262 template <typename FunctionType, typename... BoundParameters>
263 static std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, Bound Parameters...>, threadAffinity>> bindInternal(FunctionType function, BoundParame ters&&... boundParameters)
264 {
265 using UnboundRunType = base::MakeUnboundRunType<FunctionType, BoundParam eters...>;
266 return wrapUnique(new Function<UnboundRunType, threadAffinity>(base::Bin d(function, typename ParamStorageTraits<typename std::decay<BoundParameters>::ty pe>::StorageType(std::forward<BoundParameters>(boundParameters))...)));
267 }
268
269 template <typename FunctionType, typename... BoundParameters>
270 friend std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, Bound Parameters...>, SameThreadAffinity>> bind(FunctionType, BoundParameters&&...);
271
272 template <typename FunctionType, typename... BoundParameters>
273 friend std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, Bound Parameters...>, CrossThreadAffinity>> crossThreadBind(FunctionType, BoundParamet ers&&...);
274
262 using MaybeThreadChecker = typename std::conditional< 275 using MaybeThreadChecker = typename std::conditional<
263 threadAffinity == SameThreadAffinity, 276 threadAffinity == SameThreadAffinity,
264 base::ThreadChecker, 277 base::ThreadChecker,
265 base::ThreadCheckerDoNothing>::type; 278 base::ThreadCheckerDoNothing>::type;
266 MaybeThreadChecker m_threadChecker; 279 MaybeThreadChecker m_threadChecker;
267 base::Callback<R(Args...)> m_callback; 280 base::Callback<R(Args...)> m_callback;
268 }; 281 };
269 282
270 template <FunctionThreadAffinity threadAffinity, typename FunctionType, typename ... BoundParameters>
271 std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, BoundParameters. ..>, threadAffinity>> bindInternal(FunctionType function, BoundParameters&&... b oundParameters)
272 {
273 using UnboundRunType = base::MakeUnboundRunType<FunctionType, BoundParameter s...>;
274 return wrapUnique(new Function<UnboundRunType, threadAffinity>(base::Bind(fu nction, typename ParamStorageTraits<typename std::decay<BoundParameters>::type>: :StorageType(std::forward<BoundParameters>(boundParameters))...)));
275 }
276
277 template <typename FunctionType, typename... BoundParameters> 283 template <typename FunctionType, typename... BoundParameters>
278 std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, BoundParameters. ..>, SameThreadAffinity>> bind(FunctionType function, BoundParameters&&... bound Parameters) 284 std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, BoundParameters. ..>, SameThreadAffinity>> bind(FunctionType function, BoundParameters&&... bound Parameters)
279 { 285 {
280 return bindInternal<SameThreadAffinity>(function, std::forward<BoundParamete rs>(boundParameters)...); 286 return Function<base::MakeUnboundRunType<FunctionType, BoundParameters...>, SameThreadAffinity>::bindInternal(function, std::forward<BoundParameters>(boundP arameters)...);
281 } 287 }
282 288
283 template <typename FunctionType, typename... BoundParameters> 289 template <typename FunctionType, typename... BoundParameters>
284 std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, BoundParameters. ..>, CrossThreadAffinity>> crossThreadBind(FunctionType function, BoundParameter s&&... boundParameters) 290 std::unique_ptr<Function<base::MakeUnboundRunType<FunctionType, BoundParameters. ..>, CrossThreadAffinity>> crossThreadBind(FunctionType function, BoundParameter s&&... boundParameters)
285 { 291 {
286 return bindInternal<CrossThreadAffinity>(function, CrossThreadCopier<typenam e std::decay<BoundParameters>::type>::copy(std::forward<BoundParameters>(boundPa rameters))...); 292 return Function<base::MakeUnboundRunType<FunctionType, BoundParameters...>, CrossThreadAffinity>::bindInternal(function, CrossThreadCopier<typename std::dec ay<BoundParameters>::type>::copy(std::forward<BoundParameters>(boundParameters)) ...);
287 } 293 }
288 294
289 typedef Function<void(), SameThreadAffinity> Closure; 295 typedef Function<void(), SameThreadAffinity> Closure;
290 typedef Function<void(), CrossThreadAffinity> CrossThreadClosure; 296 typedef Function<void(), CrossThreadAffinity> CrossThreadClosure;
291 297
292 } // namespace WTF 298 } // namespace WTF
293 299
294 using WTF::crossThreadBind; 300 using WTF::crossThreadBind;
295 301
296 using WTF::passed; 302 using WTF::passed;
297 using WTF::unretained; 303 using WTF::unretained;
298 using WTF::crossThreadUnretained; 304 using WTF::crossThreadUnretained;
299 305
300 using WTF::Function; 306 using WTF::Function;
301 using WTF::CrossThreadClosure; 307 using WTF::CrossThreadClosure;
302 308
303 #endif // WTF_Functional_h 309 #endif // WTF_Functional_h
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698