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

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: Move DEPS rule 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_.empty() &&
50 invalidations_.begin()->is_unknown_version();
51 }
52
53 size_t SingleObjectInvalidationSet::GetSize() const {
54 return invalidations_.size();
55 }
56
57 bool SingleObjectInvalidationSet::IsEmpty() const {
58 return invalidations_.empty();
59 }
60
61 namespace {
62
63 struct InvalidationComparator {
64 bool operator()(const Invalidation& inv1, const Invalidation& inv2) {
65 return inv1.Equals(inv2);
66 }
67 };
68
69 } // namespace
70
71 bool SingleObjectInvalidationSet::operator==(
72 const SingleObjectInvalidationSet& other) const {
73 return std::equal(invalidations_.begin(),
74 invalidations_.end(),
75 other.invalidations_.begin(),
76 InvalidationComparator());
77 }
78
79 SingleObjectInvalidationSet::const_iterator
80 SingleObjectInvalidationSet::begin() const {
81 return invalidations_.begin();
82 }
83
84 SingleObjectInvalidationSet::const_iterator
85 SingleObjectInvalidationSet::end() const {
86 return invalidations_.end();
87 }
88
89 SingleObjectInvalidationSet::const_reverse_iterator
90 SingleObjectInvalidationSet::rbegin() const {
91 return invalidations_.rbegin();
92 }
93
94 SingleObjectInvalidationSet::const_reverse_iterator
95 SingleObjectInvalidationSet::rend() const {
96 return invalidations_.rend();
97 }
98
99 const Invalidation& SingleObjectInvalidationSet::back() const {
100 return *invalidations_.rbegin();
101 }
102
103 scoped_ptr<base::ListValue> SingleObjectInvalidationSet::ToValue() const {
104 scoped_ptr<base::ListValue> value(new ListValue);
105 for (InvalidationsSet::const_iterator it = invalidations_.begin();
106 it != invalidations_.end(); ++it) {
107 value->Append(it->ToValue().release());
108 }
109 return value.Pass();
110 }
111
112 bool SingleObjectInvalidationSet::ResetFromValue(
113 const base::ListValue& list) {
114 for (size_t i = 0; i < list.GetSize(); ++i) {
115 const base::DictionaryValue* dict;
116 if (!list.GetDictionary(i, &dict)) {
117 DLOG(WARNING) << "Could not find invalidation at index " << i;
118 return false;
119 }
120 scoped_ptr<Invalidation> invalidation = Invalidation::InitFromValue(*dict);
121 if (!invalidation) {
122 DLOG(WARNING) << "Failed to parse invalidation at index " << i;
123 return false;
124 }
125 invalidations_.insert(*invalidation);
126 }
127 return true;
128 }
129
130 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/notifier/single_object_invalidation_set.h ('k') | sync/notifier/single_object_invalidation_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698