[email protected] | ea8e181 | 2012-02-15 22:07:34 | [diff] [blame] | 1 | // Copyright (c) 2012 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 | #include "base/supports_user_data.h" | ||||
6 | |||||
7 | namespace base { | ||||
8 | |||||
[email protected] | 7d2e5f762 | 2012-09-10 19:18:53 | [diff] [blame] | 9 | SupportsUserData::SupportsUserData() { |
10 | // Harmless to construct on a different thread to subsequent usage. | ||||
11 | thread_checker_.DetachFromThread(); | ||||
12 | } | ||||
[email protected] | ea8e181 | 2012-02-15 22:07:34 | [diff] [blame] | 13 | |
14 | SupportsUserData::Data* SupportsUserData::GetUserData(const void* key) const { | ||||
[email protected] | 7d2e5f762 | 2012-09-10 19:18:53 | [diff] [blame] | 15 | DCHECK(thread_checker_.CalledOnValidThread()); |
[email protected] | ea8e181 | 2012-02-15 22:07:34 | [diff] [blame] | 16 | DataMap::const_iterator found = user_data_.find(key); |
17 | if (found != user_data_.end()) | ||||
18 | return found->second.get(); | ||||
19 | return NULL; | ||||
20 | } | ||||
21 | |||||
22 | void SupportsUserData::SetUserData(const void* key, Data* data) { | ||||
[email protected] | 7d2e5f762 | 2012-09-10 19:18:53 | [diff] [blame] | 23 | DCHECK(thread_checker_.CalledOnValidThread()); |
[email protected] | ea8e181 | 2012-02-15 22:07:34 | [diff] [blame] | 24 | user_data_[key] = linked_ptr<Data>(data); |
25 | } | ||||
26 | |||||
[email protected] | 27ee16f | 2012-08-12 02:25:13 | [diff] [blame] | 27 | void SupportsUserData::RemoveUserData(const void* key) { |
[email protected] | 7d2e5f762 | 2012-09-10 19:18:53 | [diff] [blame] | 28 | DCHECK(thread_checker_.CalledOnValidThread()); |
[email protected] | 27ee16f | 2012-08-12 02:25:13 | [diff] [blame] | 29 | user_data_.erase(key); |
30 | } | ||||
31 | |||||
[email protected] | 7d2e5f762 | 2012-09-10 19:18:53 | [diff] [blame] | 32 | void SupportsUserData::DetachUserDataThread() { |
33 | thread_checker_.DetachFromThread(); | ||||
34 | } | ||||
35 | |||||
36 | SupportsUserData::~SupportsUserData() { | ||||
37 | DCHECK(thread_checker_.CalledOnValidThread() || user_data_.empty()); | ||||
38 | } | ||||
[email protected] | cb93248 | 2012-06-26 06:23:00 | [diff] [blame] | 39 | |
[email protected] | ea8e181 | 2012-02-15 22:07:34 | [diff] [blame] | 40 | } // namespace base |