// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/property_bag.h" #include "base/memory/linked_ptr.h" namespace base { PropertyBag::PropertyBag() { } PropertyBag::PropertyBag(const PropertyBag& other) { operator=(other); } PropertyBag::~PropertyBag() { } PropertyBag& PropertyBag::operator=(const PropertyBag& other) { props_.clear(); // We need to make copies of each property using the virtual copy() method. for (PropertyMap::const_iterator i = other.props_.begin(); i != other.props_.end(); ++i) props_[i->first] = linked_ptr(i->second->copy()); return *this; } void PropertyBag::SetProperty(PropID id, Prop* prop) { props_[id] = linked_ptr(prop); } PropertyBag::Prop* PropertyBag::GetProperty(PropID id) { PropertyMap::const_iterator found = props_.find(id); if (found == props_.end()) return NULL; return found->second.get(); } const PropertyBag::Prop* PropertyBag::GetProperty(PropID id) const { PropertyMap::const_iterator found = props_.find(id); if (found == props_.end()) return NULL; return found->second.get(); } void PropertyBag::DeleteProperty(PropID id) { PropertyMap::iterator found = props_.find(id); if (found == props_.end()) return; // Not found, nothing to do. props_.erase(found); } PropertyAccessorBase::PropertyAccessorBase() { static PropertyBag::PropID next_id = 1; prop_id_ = next_id++; } } // namespace base