1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#ifndef CHROME_BROWSER_POLICY_POLICY_MAP_H_
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define CHROME_BROWSER_POLICY_POLICY_MAP_H_
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <map>
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/values.h"
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "policy/configuration_policy_type.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace policy {
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Wrapper class around a std::map<ConfigurationPolicyType, Value*> that
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// properly cleans up after itself when going out of scope.
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Exposes interesting methods of the underlying std::map.
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass PolicyMap {
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  typedef std::map<ConfigurationPolicyType, Value*> PolicyMapType;
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  typedef PolicyMapType::const_iterator const_iterator;
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  PolicyMap();
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual ~PolicyMap();
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Returns a weak reference to the value currently stored for key |policy|.
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Ownership is retained by PolicyMap; callers should use Value::DeepCopy
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // if they need a copy that they own themselves.
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Returns NULL if the map does not contain a value for |policy|.
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const Value* Get(ConfigurationPolicyType policy) const;
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Takes ownership of |value|. Overwrites any existing value stored in the
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // map for the key |policy|.
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void Set(ConfigurationPolicyType policy, Value* value);
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void Erase(ConfigurationPolicyType policy);
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void Swap(PolicyMap* other);
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  bool Equals(const PolicyMap& other) const;
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  bool empty() const;
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  size_t size() const;
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const_iterator begin() const;
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const_iterator end() const;
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void Clear();
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private:
47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Helper function for Equals(...).
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static bool MapEntryEquals(const PolicyMapType::value_type& a,
49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                             const PolicyMapType::value_type& b);
50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  PolicyMapType map_;
52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DISALLOW_COPY_AND_ASSIGN(PolicyMap);
54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}  // namespace policy
57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // CHROME_BROWSER_POLICY_POLICY_MAP_H_
59