1 // Copyright (c) 2012 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.
5 #include "sync/notifier/object_id_invalidation_map.h"
9 #include "base/compiler_specific.h"
10 #include "base/values.h"
14 ObjectIdSet
ObjectIdInvalidationMapToSet(
15 const ObjectIdInvalidationMap
& invalidation_map
) {
17 for (ObjectIdInvalidationMap::const_iterator it
= invalidation_map
.begin();
18 it
!= invalidation_map
.end(); ++it
) {
19 ids
.insert(it
->first
);
24 ObjectIdInvalidationMap
ObjectIdSetToInvalidationMap(
25 const ObjectIdSet
& ids
, int64 version
, const std::string
& payload
) {
26 ObjectIdInvalidationMap invalidation_map
;
27 for (ObjectIdSet::const_iterator it
= ids
.begin(); it
!= ids
.end(); ++it
) {
28 // TODO(dcheng): Do we need to provide a way to set AckHandle?
29 invalidation_map
[*it
].version
= version
;
30 invalidation_map
[*it
].payload
= payload
;
32 return invalidation_map
;
37 struct ObjectIdInvalidationMapValueEquals
{
38 bool operator()(const ObjectIdInvalidationMap::value_type
& value1
,
39 const ObjectIdInvalidationMap::value_type
& value2
) const {
41 (value1
.first
== value2
.first
) &&
42 value1
.second
.Equals(value2
.second
);
48 bool ObjectIdInvalidationMapEquals(
49 const ObjectIdInvalidationMap
& invalidation_map1
,
50 const ObjectIdInvalidationMap
& invalidation_map2
) {
52 (invalidation_map1
.size() == invalidation_map2
.size()) &&
53 std::equal(invalidation_map1
.begin(), invalidation_map1
.end(),
54 invalidation_map2
.begin(),
55 ObjectIdInvalidationMapValueEquals());
58 scoped_ptr
<base::ListValue
> ObjectIdInvalidationMapToValue(
59 const ObjectIdInvalidationMap
& invalidation_map
) {
60 scoped_ptr
<base::ListValue
> value(new base::ListValue());
61 for (ObjectIdInvalidationMap::const_iterator it
= invalidation_map
.begin();
62 it
!= invalidation_map
.end(); ++it
) {
63 base::DictionaryValue
* entry
= new base::DictionaryValue();
64 entry
->Set("objectId", ObjectIdToValue(it
->first
).release());
65 entry
->Set("state", it
->second
.ToValue().release());
71 bool ObjectIdInvalidationMapFromValue(const base::ListValue
& value
,
72 ObjectIdInvalidationMap
* out
) {
74 for (base::ListValue::const_iterator it
= value
.begin();
75 it
!= value
.end(); ++it
) {
76 const base::DictionaryValue
* entry
= NULL
;
77 const base::DictionaryValue
* id_value
= NULL
;
78 const base::DictionaryValue
* invalidation_value
= NULL
;
79 invalidation::ObjectId id
;
80 Invalidation invalidation
;
81 if (!(*it
)->GetAsDictionary(&entry
) ||
82 !entry
->GetDictionary("objectId", &id_value
) ||
83 !entry
->GetDictionary("state", &invalidation_value
) ||
84 !ObjectIdFromValue(*id_value
, &id
) ||
85 !invalidation
.ResetFromValue(*invalidation_value
)) {
88 ignore_result(out
->insert(std::make_pair(id
, invalidation
)));