OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sync/syncable/parent_child_index.h" | 5 #include "components/sync/syncable/parent_child_index.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "sync/syncable/entry_kernel.h" | 10 #include "components/sync/syncable/entry_kernel.h" |
11 #include "sync/syncable/syncable_id.h" | 11 #include "components/sync/syncable/syncable_id.h" |
12 | 12 |
13 namespace syncer { | 13 namespace syncer { |
14 namespace syncable { | 14 namespace syncable { |
15 | 15 |
16 bool ChildComparator::operator()(const EntryKernel* a, | 16 bool ChildComparator::operator()(const EntryKernel* a, |
17 const EntryKernel* b) const { | 17 const EntryKernel* b) const { |
18 const UniquePosition& a_pos = a->ref(UNIQUE_POSITION); | 18 const UniquePosition& a_pos = a->ref(UNIQUE_POSITION); |
19 const UniquePosition& b_pos = b->ref(UNIQUE_POSITION); | 19 const UniquePosition& b_pos = b->ref(UNIQUE_POSITION); |
20 | 20 |
21 if (a_pos.IsValid() && b_pos.IsValid()) { | 21 if (a_pos.IsValid() && b_pos.IsValid()) { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 syncer::IsRealDataType(model_type) && | 87 syncer::IsRealDataType(model_type) && |
88 !TypeSupportsHierarchy(model_type)) { | 88 !TypeSupportsHierarchy(model_type)) { |
89 const Id& type_root_id = entry->ref(ID); | 89 const Id& type_root_id = entry->ref(ID); |
90 | 90 |
91 // If the entry exists in the map it must already have the same | 91 // If the entry exists in the map it must already have the same |
92 // model type specific child set. It's possible another type root exists | 92 // model type specific child set. It's possible another type root exists |
93 // in parent_children_map_, but that's okay as the new type root will | 93 // in parent_children_map_, but that's okay as the new type root will |
94 // point to the same OrderedChildSet. As such, we just blindly store the | 94 // point to the same OrderedChildSet. As such, we just blindly store the |
95 // new type root ID and associate it to the (possibly existing) child set. | 95 // new type root ID and associate it to the (possibly existing) child set. |
96 model_type_root_ids_[model_type] = type_root_id; | 96 model_type_root_ids_[model_type] = type_root_id; |
97 parent_children_map_.insert(std::make_pair( | 97 parent_children_map_.insert( |
98 type_root_id, GetOrCreateModelTypeChildSet(model_type))); | 98 std::make_pair(type_root_id, GetOrCreateModelTypeChildSet(model_type))); |
99 } | 99 } |
100 | 100 |
101 // Finally, insert the entry in the child set. | 101 // Finally, insert the entry in the child set. |
102 return siblings->insert(entry).second; | 102 return siblings->insert(entry).second; |
103 } | 103 } |
104 | 104 |
105 // Like the other containers used to help support the syncable::Directory, this | 105 // Like the other containers used to help support the syncable::Directory, this |
106 // one does not own any EntryKernels. This function removes references to the | 106 // one does not own any EntryKernels. This function removes references to the |
107 // given EntryKernel but does not delete it. | 107 // given EntryKernel but does not delete it. |
108 void ParentChildIndex::Remove(EntryKernel* e) { | 108 void ParentChildIndex::Remove(EntryKernel* e) { |
(...skipping 20 matching lines...) Expand all Loading... |
129 | 129 |
130 // Erase the entry from the child set. | 130 // Erase the entry from the child set. |
131 siblings->erase(j); | 131 siblings->erase(j); |
132 // If the set is now empty and isn't shareable with |type_root_child_sets_|, | 132 // If the set is now empty and isn't shareable with |type_root_child_sets_|, |
133 // erase it from the map. | 133 // erase it from the map. |
134 if (siblings->empty() && should_erase) { | 134 if (siblings->empty() && should_erase) { |
135 parent_children_map_.erase(sibling_iterator); | 135 parent_children_map_.erase(sibling_iterator); |
136 } | 136 } |
137 } | 137 } |
138 | 138 |
139 bool ParentChildIndex::Contains(EntryKernel *e) const { | 139 bool ParentChildIndex::Contains(EntryKernel* e) const { |
140 const OrderedChildSetRef siblings = GetChildSet(e); | 140 const OrderedChildSetRef siblings = GetChildSet(e); |
141 return siblings && siblings->count(e) > 0; | 141 return siblings && siblings->count(e) > 0; |
142 } | 142 } |
143 | 143 |
144 const OrderedChildSet* ParentChildIndex::GetChildren(const Id& id) const { | 144 const OrderedChildSet* ParentChildIndex::GetChildren(const Id& id) const { |
145 DCHECK(!id.IsNull()); | 145 DCHECK(!id.IsNull()); |
146 | 146 |
147 ParentChildrenMap::const_iterator parent = parent_children_map_.find(id); | 147 ParentChildrenMap::const_iterator parent = parent_children_map_.find(id); |
148 if (parent == parent_children_map_.end()) { | 148 if (parent == parent_children_map_.end()) { |
149 return nullptr; | 149 return nullptr; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 OrderedChildSetRef(new OrderedChildSet()); | 207 OrderedChildSetRef(new OrderedChildSet()); |
208 return type_root_child_sets_[model_type]; | 208 return type_root_child_sets_[model_type]; |
209 } | 209 } |
210 | 210 |
211 const Id& ParentChildIndex::GetModelTypeRootId(ModelType model_type) const { | 211 const Id& ParentChildIndex::GetModelTypeRootId(ModelType model_type) const { |
212 return model_type_root_ids_[model_type]; | 212 return model_type_root_ids_[model_type]; |
213 } | 213 } |
214 | 214 |
215 } // namespace syncable | 215 } // namespace syncable |
216 } // namespace syncer | 216 } // namespace syncer |
OLD | NEW |