Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: sync/notifier/single_object_invalidation_set.cc

Issue 23441042: Refactor common invalidation framework types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another browser test fix Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "sync/notifier/single_object_invalidation_set.h"
6
7 #include "base/values.h"
8 #include "sync/notifier/invalidation_util.h"
9
10 namespace syncer {
11
12 bool InvalidationVersionLessThan::operator()(
13 const Invalidation& a,
14 const Invalidation& b) {
15 DCHECK(a.object_id() == b.object_id())
16 << "a: " << ObjectIdToString(a.object_id()) << ", "
17 << "b: " << ObjectIdToString(a.object_id());
18
19 if (a.is_unknown_version() && !b.is_unknown_version())
20 return true;
21
22 if (!a.is_unknown_version() && b.is_unknown_version())
23 return false;
24
25 if (a.is_unknown_version() && b.is_unknown_version())
26 return false;
27
28 return a.version() < b.version();
29 }
30
31 SingleObjectInvalidationSet::SingleObjectInvalidationSet() {}
32
33 SingleObjectInvalidationSet::~SingleObjectInvalidationSet() {}
34
35 void SingleObjectInvalidationSet::Insert(const Invalidation& invalidation) {
36 invalidations_.insert(invalidation);
37 }
38
39 void SingleObjectInvalidationSet::InsertAll(
40 const SingleObjectInvalidationSet& other) {
41 invalidations_.insert(other.begin(), other.end());
42 }
43
44 void SingleObjectInvalidationSet::Clear() {
45 invalidations_.clear();
46 }
47
48 bool SingleObjectInvalidationSet::StartsWithUnknownVersion() const {
49 return invalidations_.begin()->is_unknown_version();
50 }
51
52 size_t SingleObjectInvalidationSet::GetSize() const {
53 return invalidations_.size();
54 }
55
56 bool SingleObjectInvalidationSet::IsEmpty() const {
57 return invalidations_.empty();
58 }
59
60 namespace {
61
62 struct InvalidationComparator {
63 bool operator()(const Invalidation& inv1, const Invalidation& inv2) {
64 return inv1.Equals(inv2);
65 }
66 };
67
68 } // namespace
69
70 bool SingleObjectInvalidationSet::operator==(
71 const SingleObjectInvalidationSet& other) const {
72 return std::equal(invalidations_.begin(),
73 invalidations_.end(),
74 other.invalidations_.begin(),
75 InvalidationComparator());
76 }
77
78 SingleObjectInvalidationSet::const_iterator
79 SingleObjectInvalidationSet::begin() const {
80 return invalidations_.begin();
81 }
82
83 SingleObjectInvalidationSet::const_iterator
84 SingleObjectInvalidationSet::end() const {
85 return invalidations_.end();
86 }
87
88 SingleObjectInvalidationSet::const_reverse_iterator
89 SingleObjectInvalidationSet::rbegin() const {
90 return invalidations_.rbegin();
91 }
92
93 SingleObjectInvalidationSet::const_reverse_iterator
94 SingleObjectInvalidationSet::rend() const {
95 return invalidations_.rend();
96 }
97
98 const Invalidation& SingleObjectInvalidationSet::back() const {
99 return *invalidations_.rbegin();
100 }
101
102 scoped_ptr<base::ListValue> SingleObjectInvalidationSet::ToValue() const {
103 scoped_ptr<base::ListValue> value(new ListValue);
104 for (InvalidationsSet::const_iterator it = invalidations_.begin();
105 it != invalidations_.end(); ++it) {
106 value->Append(it->ToValue().release());
107 }
108 return value.Pass();
109 }
110
111 bool SingleObjectInvalidationSet::ResetFromValue(
112 const base::ListValue& list) {
113 for (size_t i = 0; i < list.GetSize(); ++i) {
114 const base::DictionaryValue* dict;
115 if (!list.GetDictionary(i, &dict)) {
116 DLOG(WARNING) << "Could not find invalidation at index " << i;
117 return false;
118 }
119 scoped_ptr<Invalidation> invalidation = Invalidation::InitFromValue(*dict);
120 if (!invalidation) {
121 DLOG(WARNING) << "Failed to parse invalidation at index " << i;
122 return false;
123 }
124 invalidations_.insert(*invalidation);
125 }
126 return true;
127 }
128
129 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698