1// Copyright 2014 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 COMPONENTS_INVALIDATION_OBJECT_ID_INVALIDATION_MAP_H_
6#define COMPONENTS_INVALIDATION_OBJECT_ID_INVALIDATION_MAP_H_
7
8#include <map>
9#include <vector>
10
11#include "components/invalidation/invalidation.h"
12#include "components/invalidation/invalidation_export.h"
13#include "components/invalidation/invalidation_util.h"
14#include "components/invalidation/single_object_invalidation_set.h"
15
16namespace syncer {
17
18// A set of notifications with some helper methods to organize them by object ID
19// and version number.
20class INVALIDATION_EXPORT ObjectIdInvalidationMap {
21  public:
22   // Creates an invalidation map that includes an 'unknown version'
23   // invalidation for each specified ID in |ids|.
24   static ObjectIdInvalidationMap InvalidateAll(const ObjectIdSet& ids);
25
26   ObjectIdInvalidationMap();
27   ~ObjectIdInvalidationMap();
28
29   // Returns set of ObjectIds for which at least one invalidation is present.
30   ObjectIdSet GetObjectIds() const;
31
32   // Returns true if this map contains no invalidations.
33   bool Empty() const;
34
35   // Returns true if both maps contain the same set of invalidations.
36   bool operator==(const ObjectIdInvalidationMap& other) const;
37
38   // Inserts a new invalidation into this map.
39   void Insert(const Invalidation& invalidation);
40
41   // Returns a new map containing the subset of invaliations from this map
42   // whose IDs were in the specified |ids| set.
43   ObjectIdInvalidationMap GetSubsetWithObjectIds(const ObjectIdSet& ids) const;
44
45   // Returns the subset of invalidations with IDs matching |id|.
46   const SingleObjectInvalidationSet& ForObject(
47       invalidation::ObjectId id) const;
48
49   // Returns the contents of this map in a single vector.
50   void GetAllInvalidations(std::vector<syncer::Invalidation>* out) const;
51
52   // Call Acknowledge() on all contained Invalidations.
53   void AcknowledgeAll() const;
54
55   // Serialize this map to a value.
56   scoped_ptr<base::ListValue> ToValue() const;
57
58   // Deserialize the value into a map and use it to re-initialize this object.
59   bool ResetFromValue(const base::ListValue& value);
60
61   // Prints the contentes of this map as a human-readable string.
62   std::string ToString() const;
63
64  private:
65   typedef std::map<invalidation::ObjectId,
66                    SingleObjectInvalidationSet,
67                    ObjectIdLessThan> IdToListMap;
68
69   ObjectIdInvalidationMap(const IdToListMap& map);
70
71   IdToListMap map_;
72};
73
74}  // namespace syncer
75
76#endif  // COMPONENTS_INVALIDATION_OBJECT_ID_INVALIDATION_MAP_H_
77