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