| Index: base/id_map.h
|
| diff --git a/base/id_map.h b/base/id_map.h
|
| index 9cbc1f8978fa8836b770f8370ff3b2a3f44e2017..852c1380471d776689a9b05c99e67c228d0557e2 100644
|
| --- a/base/id_map.h
|
| +++ b/base/id_map.h
|
| @@ -53,13 +53,14 @@ class IDMap : public base::NonThreadSafe {
|
| Releaser<OS, 0>::release_all(&data_);
|
| }
|
|
|
| - // Sets whether Add should CHECK if passed in NULL data. Default is false.
|
| + // Sets whether Add and Replace should DCHECK if passed in NULL data.
|
| + // Default is false.
|
| void set_check_on_null_data(bool value) { check_on_null_data_ = value; }
|
|
|
| // Adds a view with an automatically generated unique ID. See AddWithID.
|
| KeyType Add(T* data) {
|
| DCHECK(CalledOnValidThread());
|
| - CHECK(!check_on_null_data_ || data);
|
| + DCHECK(!check_on_null_data_ || data);
|
| KeyType this_id = next_id_;
|
| DCHECK(data_.find(this_id) == data_.end()) << "Inserting duplicate item";
|
| data_[this_id] = data;
|
| @@ -73,7 +74,7 @@ class IDMap : public base::NonThreadSafe {
|
| // two methods may not be mixed, or duplicate IDs may be generated
|
| void AddWithID(T* data, KeyType id) {
|
| DCHECK(CalledOnValidThread());
|
| - CHECK(!check_on_null_data_ || data);
|
| + DCHECK(!check_on_null_data_ || data);
|
| DCHECK(data_.find(id) == data_.end()) << "Inserting duplicate item";
|
| data_[id] = data;
|
| }
|
| @@ -94,6 +95,25 @@ class IDMap : public base::NonThreadSafe {
|
| }
|
| }
|
|
|
| + // Replaces the value for |id| with |new_data| and returns a pointer to the
|
| + // existing value. If there is no entry for |id|, the map is not altered and
|
| + // nullptr is returned. The OwnershipSemantics of the map have no effect on
|
| + // how the existing value is treated, the IDMap does not delete the existing
|
| + // value being replaced.
|
| + T* Replace(KeyType id, T* new_data) {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK(!check_on_null_data_ || new_data);
|
| + typename HashTable::iterator i = data_.find(id);
|
| + if (i == data_.end()) {
|
| + NOTREACHED() << "Attempting to replace an item not in the list";
|
| + return nullptr;
|
| + }
|
| +
|
| + T* temp = i->second;
|
| + i->second = new_data;
|
| + return temp;
|
| + }
|
| +
|
| void Clear() {
|
| DCHECK(CalledOnValidThread());
|
| if (iteration_depth_ == 0) {
|
|
|