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 #ifndef CONTENT_COMMON_PROPERTY_BAG_H_ | 5 #ifndef BASE_PROPERTY_BAG_H_ |
6 #define CONTENT_COMMON_PROPERTY_BAG_H_ | 6 #define BASE_PROPERTY_BAG_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "content/common/content_export.h" | 12 #include "base/base_export.h" |
13 | 13 |
14 template <typename T> | 14 template <typename T> class linked_ptr; |
15 class linked_ptr; | 15 |
| 16 namespace base { |
| 17 |
16 class PropertyAccessorBase; | 18 class PropertyAccessorBase; |
17 | 19 |
18 // A property bag holds a generalized list of arbitrary metadata called | 20 // A property bag holds a generalized list of arbitrary metadata called |
19 // properties. Each property is a class type derived from PropertyBag::Prop | 21 // properties. Each property is a class type derived from PropertyBag::Prop |
20 // that can be set and retrieved. | 22 // that can be set and retrieved. |
21 // | 23 // |
22 // The property bag is not read or written directly. Instead, callers go | 24 // The property bag is not read or written directly. Instead, callers go |
23 // through a PropertyAccessor. The Accessor generates the unique IDs that | 25 // through a PropertyAccessor. The Accessor generates the unique IDs that |
24 // identify different properties. The Accessor is templatized to also provide | 26 // identify different properties. The Accessor is templatized to also provide |
25 // typesafety to the callers. | 27 // typesafety to the callers. |
(...skipping 10 matching lines...) Expand all Loading... |
36 // } | 38 // } |
37 // | 39 // |
38 // void doit(SomeObjectThatImplementsPropertyBag* object) { | 40 // void doit(SomeObjectThatImplementsPropertyBag* object) { |
39 // PropertyAccessor<int>* accessor = my_accessor(); | 41 // PropertyAccessor<int>* accessor = my_accessor(); |
40 // int* property = accessor->GetProperty(object); | 42 // int* property = accessor->GetProperty(object); |
41 // if (property) | 43 // if (property) |
42 // ... use property ... | 44 // ... use property ... |
43 // | 45 // |
44 // accessor->SetProperty(object, 22); | 46 // accessor->SetProperty(object, 22); |
45 // } | 47 // } |
46 class CONTENT_EXPORT PropertyBag { | 48 class BASE_EXPORT PropertyBag { |
47 public: | 49 public: |
48 // The type that uniquely identifies a property type. | 50 // The type that uniquely identifies a property type. |
49 typedef int PropID; | 51 typedef int PropID; |
50 enum { NULL_PROP_ID = -1 }; // Invalid property ID. | 52 enum { NULL_PROP_ID = -1 }; // Invalid property ID. |
51 | 53 |
52 // Properties are all derived from this class. They must be deletable and | 54 // Properties are all derived from this class. They must be deletable and |
53 // copyable | 55 // copyable |
54 class Prop { | 56 class Prop { |
55 public: | 57 public: |
56 virtual ~Prop() {} | 58 virtual ~Prop() {} |
(...skipping 30 matching lines...) Expand all Loading... |
87 | 89 |
88 PropertyMap props_; | 90 PropertyMap props_; |
89 | 91 |
90 // Copy and assign is explicitly allowed for this class. | 92 // Copy and assign is explicitly allowed for this class. |
91 }; | 93 }; |
92 | 94 |
93 // PropertyAccessorBase ------------------------------------------------------- | 95 // PropertyAccessorBase ------------------------------------------------------- |
94 | 96 |
95 // Manages getting the unique IDs to identify a property. Callers should use | 97 // Manages getting the unique IDs to identify a property. Callers should use |
96 // PropertyAccessor below instead. | 98 // PropertyAccessor below instead. |
97 class CONTENT_EXPORT PropertyAccessorBase { | 99 class BASE_EXPORT PropertyAccessorBase { |
98 public: | 100 public: |
99 PropertyAccessorBase(); | 101 PropertyAccessorBase(); |
100 virtual ~PropertyAccessorBase() {} | 102 virtual ~PropertyAccessorBase() {} |
101 | 103 |
102 // Removes our property, if any, from the given property bag. | 104 // Removes our property, if any, from the given property bag. |
103 void DeleteProperty(PropertyBag* bag) { | 105 void DeleteProperty(PropertyBag* bag) { |
104 bag->DeleteProperty(prop_id_); | 106 bag->DeleteProperty(prop_id_); |
105 } | 107 } |
106 | 108 |
107 protected: | 109 protected: |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 virtual Prop* copy() { | 168 virtual Prop* copy() { |
167 return new Container(data_); | 169 return new Container(data_); |
168 } | 170 } |
169 | 171 |
170 T data_; | 172 T data_; |
171 }; | 173 }; |
172 | 174 |
173 DISALLOW_COPY_AND_ASSIGN(PropertyAccessor); | 175 DISALLOW_COPY_AND_ASSIGN(PropertyAccessor); |
174 }; | 176 }; |
175 | 177 |
176 #endif // CONTENT_COMMON_PROPERTY_BAG_H_ | 178 } // namespace base |
| 179 |
| 180 #endif // BASE_PROPERTY_BAG_H_ |
OLD | NEW |