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

Unified Diff: sync/notifier/object_id_invalidation_map.cc

Issue 23441042: Refactor common invalidation framework types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: sync/notifier/object_id_invalidation_map.cc
diff --git a/sync/notifier/object_id_invalidation_map.cc b/sync/notifier/object_id_invalidation_map.cc
index bde2e4c2457e1b325e8569b1395c5a77e78da1c6..2f7e104aa023282a17f7f2a6d536d851593f7d3e 100644
--- a/sync/notifier/object_id_invalidation_map.cc
+++ b/sync/notifier/object_id_invalidation_map.cc
@@ -1,93 +1,110 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "sync/notifier/object_id_invalidation_map.h"
-#include <algorithm>
-
-#include "base/compiler_specific.h"
-#include "base/values.h"
+#include "base/json/json_string_value_serializer.h"
namespace syncer {
-ObjectIdSet ObjectIdInvalidationMapToSet(
- const ObjectIdInvalidationMap& invalidation_map) {
- ObjectIdSet ids;
- for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin();
- it != invalidation_map.end(); ++it) {
- ids.insert(it->first);
+// static
+ObjectIdInvalidationMap ObjectIdInvalidationMap::InvalidateAll(
+ const ObjectIdSet& ids) {
+ ObjectIdInvalidationMap invalidate_all;
+ for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) {
+ invalidate_all.Insert(Invalidation::InitUnknownVersion(*it));
+ }
+ return invalidate_all;
+}
+
+ObjectIdInvalidationMap::ObjectIdInvalidationMap() {}
+
+ObjectIdInvalidationMap::~ObjectIdInvalidationMap() {}
+
+ObjectIdSet ObjectIdInvalidationMap::GetObjectIds() const {
+ ObjectIdSet ret;
+ for (IdToListMap::const_iterator it = map_.begin(); it != map_.end(); ++it) {
+ ret.insert(it->first);
}
- return ids;
+ return ret;
}
-ObjectIdInvalidationMap ObjectIdSetToInvalidationMap(
- const ObjectIdSet& ids, int64 version, const std::string& payload) {
- ObjectIdInvalidationMap invalidation_map;
+bool ObjectIdInvalidationMap::Empty() const {
+ return map_.empty();
+}
+
+void ObjectIdInvalidationMap::Insert(const Invalidation& invalidation) {
+ map_[invalidation.GetObjectId()].Insert(invalidation);
+}
+
+ObjectIdInvalidationMap ObjectIdInvalidationMap::WithObjects(
+ const ObjectIdSet& ids) const {
+ IdToListMap new_map;
for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) {
- // TODO(dcheng): Do we need to provide a way to set AckHandle?
- invalidation_map[*it].version = version;
- invalidation_map[*it].payload = payload;
+ IdToListMap::const_iterator lookup = map_.find(*it);
+ if (lookup != map_.end()) {
+ new_map[*it] = lookup->second;
+ }
}
- return invalidation_map;
+ return ObjectIdInvalidationMap(new_map);
}
-namespace {
+const OrderedInvalidationList& ObjectIdInvalidationMap::ForObject(
+ invalidation::ObjectId id) const {
+ IdToListMap::const_iterator lookup = map_.find(id);
+ DCHECK(lookup != map_.end());
+ DCHECK(!lookup->second.IsEmpty());
+ return lookup->second;
+}
-struct ObjectIdInvalidationMapValueEquals {
- bool operator()(const ObjectIdInvalidationMap::value_type& value1,
- const ObjectIdInvalidationMap::value_type& value2) const {
- return
- (value1.first == value2.first) &&
- value1.second.Equals(value2.second);
+void ObjectIdInvalidationMap::GetAllInvalidations(
+ std::vector<syncer::Invalidation>* out) const {
+ for (IdToListMap::const_iterator it = map_.begin(); it != map_.end(); ++it) {
+ out->insert(out->begin(), it->second.begin(), it->second.end());
}
-};
-
-} // namespace
-
-bool ObjectIdInvalidationMapEquals(
- const ObjectIdInvalidationMap& invalidation_map1,
- const ObjectIdInvalidationMap& invalidation_map2) {
- return
- (invalidation_map1.size() == invalidation_map2.size()) &&
- std::equal(invalidation_map1.begin(), invalidation_map1.end(),
- invalidation_map2.begin(),
- ObjectIdInvalidationMapValueEquals());
}
-scoped_ptr<base::ListValue> ObjectIdInvalidationMapToValue(
- const ObjectIdInvalidationMap& invalidation_map) {
+bool ObjectIdInvalidationMap::operator==(
+ const ObjectIdInvalidationMap& other) const {
+ return map_ == other.map_;
+}
+
+scoped_ptr<base::ListValue> ObjectIdInvalidationMap::ToValue() const {
scoped_ptr<base::ListValue> value(new base::ListValue());
- for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin();
- it != invalidation_map.end(); ++it) {
- base::DictionaryValue* entry = new base::DictionaryValue();
- entry->Set("objectId", ObjectIdToValue(it->first).release());
- entry->Set("state", it->second.ToValue().release());
- value->Append(entry);
+ for (IdToListMap::const_iterator it1 = map_.begin();
+ it1 != map_.end(); ++it1) {
+ for (OrderedInvalidationList::const_iterator it2 = it1->second.begin();
+ it2 != it1->second.end(); ++it2) {
+ value->Append(it2->ToValue().release());
+ }
}
return value.Pass();
}
-bool ObjectIdInvalidationMapFromValue(const base::ListValue& value,
- ObjectIdInvalidationMap* out) {
- out->clear();
- for (base::ListValue::const_iterator it = value.begin();
- it != value.end(); ++it) {
- const base::DictionaryValue* entry = NULL;
- const base::DictionaryValue* id_value = NULL;
- const base::DictionaryValue* invalidation_value = NULL;
- invalidation::ObjectId id;
+bool ObjectIdInvalidationMap::ResetFromValue(const base::ListValue& value) {
+ map_.clear();
+ for (size_t i = 0; i < value.GetSize(); ++i) {
+ const DictionaryValue* dict;
Invalidation invalidation;
- if (!(*it)->GetAsDictionary(&entry) ||
- !entry->GetDictionary("objectId", &id_value) ||
- !entry->GetDictionary("state", &invalidation_value) ||
- !ObjectIdFromValue(*id_value, &id) ||
- !invalidation.ResetFromValue(*invalidation_value)) {
+ if (!value.GetDictionary(i, &dict)
+ || !invalidation.ResetFromValue(*dict)) {
return false;
}
- ignore_result(out->insert(std::make_pair(id, invalidation)));
+ Insert(invalidation);
}
return true;
}
+std::string ObjectIdInvalidationMap::ToString() const {
+ std::string output;
+ JSONStringValueSerializer serializer(&output);
+ serializer.set_pretty_print(true);
+ serializer.Serialize(*ToValue().get());
+ return output;
+}
+
+ObjectIdInvalidationMap::ObjectIdInvalidationMap(const IdToListMap& map)
+ : map_(map) {}
+
} // namespace syncer

Powered by Google App Engine
This is Rietveld 408576698