|
1 // Copyright (c) 2006-2008 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 // This file defines the type used to provide details for NotificationService |
|
6 // notifications. |
|
7 |
|
8 #ifndef CHROME_COMMON_NOTIFICATION_DETAILS_H__ |
|
9 #define CHROME_COMMON_NOTIFICATION_DETAILS_H__ |
|
10 |
|
11 #include "base/basictypes.h" |
|
12 |
|
13 // Do not declare a NotificationDetails directly--use either |
|
14 // "Details<detailsclassname>(detailsclasspointer)" or |
|
15 // NotificationService::NoDetails(). |
|
16 class NotificationDetails { |
|
17 public: |
|
18 NotificationDetails() : ptr_(NULL) {} |
|
19 NotificationDetails(const NotificationDetails& other) : ptr_(other.ptr_) {} |
|
20 ~NotificationDetails() {} |
|
21 |
|
22 // NotificationDetails can be used as the index for a map; this method |
|
23 // returns the pointer to the current details as an identifier, for use as a |
|
24 // map index. |
|
25 uintptr_t map_key() const { return reinterpret_cast<uintptr_t>(ptr_); } |
|
26 |
|
27 bool operator!=(const NotificationDetails& other) const { |
|
28 return ptr_ != other.ptr_; |
|
29 } |
|
30 |
|
31 bool operator==(const NotificationDetails& other) const { |
|
32 return ptr_ == other.ptr_; |
|
33 } |
|
34 |
|
35 protected: |
|
36 NotificationDetails(void* ptr) : ptr_(ptr) {} |
|
37 |
|
38 void* ptr_; |
|
39 }; |
|
40 |
|
41 template <class T> |
|
42 class Details : public NotificationDetails { |
|
43 public: |
|
44 Details(T* ptr) : NotificationDetails(ptr) {} |
|
45 Details(const NotificationDetails& other) |
|
46 : NotificationDetails(other) {} |
|
47 |
|
48 T* operator->() const { return ptr(); } |
|
49 T* ptr() const { return static_cast<T*>(ptr_); } |
|
50 }; |
|
51 |
|
52 #endif // CHROME_COMMON_NOTIFICATION_DETAILS_H__ |