| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This defines a set of argument wrappers and related factory methods that | 5 // This defines a set of argument wrappers and related factory methods that |
| 6 // can be used specify the refcounting and reference semantics of arguments | 6 // can be used specify the refcounting and reference semantics of arguments |
| 7 // that are bound by the Bind() function in base/bind.h. | 7 // that are bound by the Bind() function in base/bind.h. |
| 8 // | 8 // |
| 9 // The public functions are base::Unretained(), base::Owned(), | 9 // The public functions are base::Unretained(), base::Owned(), |
| 10 // base::ConstRef(), and base::IgnoreReturn(). | 10 // base::ConstRef(), and base::IgnoreReturn(). |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 typedef T* ForwardType; | 315 typedef T* ForwardType; |
| 316 static ForwardType Unwrap(const scoped_refptr<T>& o) { return o.get(); } | 316 static ForwardType Unwrap(const scoped_refptr<T>& o) { return o.get(); } |
| 317 }; | 317 }; |
| 318 | 318 |
| 319 template <typename T> | 319 template <typename T> |
| 320 struct UnwrapTraits<WeakPtr<T> > { | 320 struct UnwrapTraits<WeakPtr<T> > { |
| 321 typedef const WeakPtr<T>& ForwardType; | 321 typedef const WeakPtr<T>& ForwardType; |
| 322 static ForwardType Unwrap(const WeakPtr<T>& o) { return o; } | 322 static ForwardType Unwrap(const WeakPtr<T>& o) { return o; } |
| 323 }; | 323 }; |
| 324 | 324 |
| 325 /* |
| 326 template <typename T> |
| 327 struct UnwrapTraits<subtle::PassScopedPtrAnchor<T> > { |
| 328 typedef PassScopedPtr<T> ForwardType; |
| 329 static PassScopedPtr<T> Unwrap(subtle::PassScopedPtrAnchor<T>& o) { |
| 330 return &o; |
| 331 } |
| 332 }; |
| 333 */ |
| 334 |
| 335 template <typename T> |
| 336 struct UnwrapTraits<subtle::PassScopedPtrAnchor<T> > { |
| 337 typedef subtle::PassScopedPtrAnchor<T>* ForwardType; |
| 338 static subtle::PassScopedPtrAnchor<T>* |
| 339 Unwrap(subtle::PassScopedPtrAnchor<T>& o) { |
| 340 return &o; |
| 341 } |
| 342 }; |
| 343 |
| 325 template <typename T> | 344 template <typename T> |
| 326 struct UnwrapTraits<OwnedWrapper<T> > { | 345 struct UnwrapTraits<OwnedWrapper<T> > { |
| 327 typedef T* ForwardType; | 346 typedef T* ForwardType; |
| 328 static ForwardType Unwrap(const OwnedWrapper<T>& o) { | 347 static ForwardType Unwrap(const OwnedWrapper<T>& o) { |
| 329 return o.get(); | 348 return o.get(); |
| 330 } | 349 } |
| 331 }; | 350 }; |
| 332 | 351 |
| 333 // Utility for handling different refcounting semantics in the Bind() | 352 // Utility for handling different refcounting semantics in the Bind() |
| 334 // function. | 353 // function. |
| 335 template <bool, typename T> | 354 template <bool, typename T> |
| 336 struct MaybeRefcount; | 355 struct MaybeRefcount; |
| 337 | 356 |
| 338 template <typename T> | 357 template <typename T> |
| 339 struct MaybeRefcount<false, T> { | 358 struct MaybeRefcount<false, T> { |
| 340 static void AddRef(const T&) {} | 359 static void AddRef(const T&) {} |
| 341 static void Release(const T&) {} | 360 static void Release(const T&) {} |
| 342 }; | 361 }; |
| 343 | 362 |
| 344 template <typename T, size_t n> | 363 template <typename T, size_t n> |
| 345 struct MaybeRefcount<false, T[n]> { | 364 struct MaybeRefcount<false, T[n]> { |
| 346 static void AddRef(const T*) {} | 365 static void AddRef(const T*) {} |
| 347 static void Release(const T*) {} | 366 static void Release(const T*) {} |
| 348 }; | 367 }; |
| 349 | 368 |
| 350 template <typename T> | 369 template <typename T> |
| 370 struct MaybeRefcount<false, PassScopedPtr<T> > { |
| 371 static void AddRef(const subtle::PassScopedPtrAnchor<T>&) {} |
| 372 static void Release(const subtle::PassScopedPtrAnchor<T>&) {} |
| 373 }; |
| 374 |
| 375 template <typename T> |
| 351 struct MaybeRefcount<true, T*> { | 376 struct MaybeRefcount<true, T*> { |
| 352 static void AddRef(T* o) { o->AddRef(); } | 377 static void AddRef(T* o) { o->AddRef(); } |
| 353 static void Release(T* o) { o->Release(); } | 378 static void Release(T* o) { o->Release(); } |
| 354 }; | 379 }; |
| 355 | 380 |
| 356 template <typename T> | 381 template <typename T> |
| 357 struct MaybeRefcount<true, UnretainedWrapper<T> > { | 382 struct MaybeRefcount<true, UnretainedWrapper<T> > { |
| 358 static void AddRef(const UnretainedWrapper<T>&) {} | 383 static void AddRef(const UnretainedWrapper<T>&) {} |
| 359 static void Release(const UnretainedWrapper<T>&) {} | 384 static void Release(const UnretainedWrapper<T>&) {} |
| 360 }; | 385 }; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 373 static void Release(const scoped_refptr<T>& o) {} | 398 static void Release(const scoped_refptr<T>& o) {} |
| 374 }; | 399 }; |
| 375 | 400 |
| 376 template <typename T> | 401 template <typename T> |
| 377 struct MaybeRefcount<true, const T*> { | 402 struct MaybeRefcount<true, const T*> { |
| 378 static void AddRef(const T* o) { o->AddRef(); } | 403 static void AddRef(const T* o) { o->AddRef(); } |
| 379 static void Release(const T* o) { o->Release(); } | 404 static void Release(const T* o) { o->Release(); } |
| 380 }; | 405 }; |
| 381 | 406 |
| 382 template <typename T> | 407 template <typename T> |
| 408 struct MaybeRefcount<true, PassScopedPtr<T> > { |
| 409 static void AddRef(const subtle::PassScopedPtrAnchor<T>&) {} |
| 410 static void Release(const subtle::PassScopedPtrAnchor<T>&) {} |
| 411 }; |
| 412 |
| 413 template <typename T> |
| 383 struct MaybeRefcount<true, WeakPtr<T> > { | 414 struct MaybeRefcount<true, WeakPtr<T> > { |
| 384 static void AddRef(const WeakPtr<T>&) {} | 415 static void AddRef(const WeakPtr<T>&) {} |
| 385 static void Release(const WeakPtr<T>&) {} | 416 static void Release(const WeakPtr<T>&) {} |
| 386 }; | 417 }; |
| 387 | 418 |
| 388 template <typename R> | 419 template <typename R> |
| 389 void VoidReturnAdapter(Callback<R(void)> callback) { | 420 void VoidReturnAdapter(Callback<R(void)> callback) { |
| 390 callback.Run(); | 421 callback.Run(); |
| 391 } | 422 } |
| 392 | 423 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 template <typename T> | 466 template <typename T> |
| 436 static inline internal::IgnoreResultHelper<Callback<T> > | 467 static inline internal::IgnoreResultHelper<Callback<T> > |
| 437 IgnoreResult(const Callback<T>& data) { | 468 IgnoreResult(const Callback<T>& data) { |
| 438 return internal::IgnoreResultHelper<Callback<T> >(data); | 469 return internal::IgnoreResultHelper<Callback<T> >(data); |
| 439 } | 470 } |
| 440 | 471 |
| 441 | 472 |
| 442 } // namespace base | 473 } // namespace base |
| 443 | 474 |
| 444 #endif // BASE_BIND_HELPERS_H_ | 475 #endif // BASE_BIND_HELPERS_H_ |
| OLD | NEW |