1 // Copyright 2013 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 SYNC_NOTIFIER_SINGLE_OBJECT_INVALIDATION_SET_H_ 6 #define SYNC_NOTIFIER_SINGLE_OBJECT_INVALIDATION_SET_H_ 7 8 #include <set> 9 10 #include "base/memory/scoped_ptr.h" 11 #include "sync/base/sync_export.h" 12 #include "sync/internal_api/public/base/invalidation.h" 13 #include "sync/notifier/invalidation_util.h" 14 15 namespace base { 16 class ListValue; 17 } // namespace base 18 19 namespace syncer { 20 21 // Holds a list of invalidations that all share the same Object ID. 22 // 23 // The list is kept sorted by version to make it easier to perform common 24 // operations, like checking for an unknown version invalidation or fetching the 25 // highest invalidation with the highest version number. 26 class SYNC_EXPORT SingleObjectInvalidationSet { 27 public: 28 typedef std::set<Invalidation, InvalidationVersionLessThan> InvalidationsSet; 29 typedef InvalidationsSet::const_iterator const_iterator; 30 typedef InvalidationsSet::const_reverse_iterator const_reverse_iterator; 31 32 SingleObjectInvalidationSet(); 33 ~SingleObjectInvalidationSet(); 34 35 void Insert(const Invalidation& invalidation); 36 void InsertAll(const SingleObjectInvalidationSet& other); 37 void Clear(); 38 void Erase(const_iterator it); 39 40 // Returns true if this list contains an unknown version. 41 // 42 // Unknown version invalidations always end up at the start of the list, 43 // because they have the lowest possible value in the sort ordering. 44 bool StartsWithUnknownVersion() const; 45 size_t GetSize() const; 46 bool IsEmpty() const; 47 bool operator==(const SingleObjectInvalidationSet& other) const; 48 49 const_iterator begin() const; 50 const_iterator end() const; 51 const_reverse_iterator rbegin() const; 52 const_reverse_iterator rend() const; 53 const Invalidation& back() const; 54 55 scoped_ptr<base::ListValue> ToValue() const; 56 bool ResetFromValue(const base::ListValue& list); 57 58 private: 59 InvalidationsSet invalidations_; 60 }; 61 62 } // syncer 63 64 #endif // SYNC_NOTIFIER_SINGLE_OBJECT_INVALIDATION_SET_H_ 65