| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/internal_api/change_reorder_buffer.h" | 5 #include "components/sync/core_impl/change_reorder_buffer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <queue> | 10 #include <queue> |
| 11 #include <set> | 11 #include <set> |
| 12 #include <utility> // for pair<> | 12 #include <utility> // for pair<> |
| 13 | 13 |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "sync/internal_api/public/base_node.h" | 15 #include "components/sync/core/base_node.h" |
| 16 #include "sync/internal_api/public/base_transaction.h" | 16 #include "components/sync/core/base_transaction.h" |
| 17 #include "sync/syncable/entry.h" | 17 #include "components/sync/syncable/entry.h" |
| 18 #include "sync/syncable/syncable_base_transaction.h" | 18 #include "components/sync/syncable/syncable_base_transaction.h" |
| 19 | 19 |
| 20 using std::numeric_limits; | 20 using std::numeric_limits; |
| 21 using std::pair; | 21 using std::pair; |
| 22 using std::queue; | 22 using std::queue; |
| 23 using std::set; | 23 using std::set; |
| 24 | 24 |
| 25 namespace syncer { | 25 namespace syncer { |
| 26 | 26 |
| 27 // Traversal provides a way to collect a set of nodes from the syncable | 27 // Traversal provides a way to collect a set of nodes from the syncable |
| 28 // directory structure and then traverse them, along with any intermediate | 28 // directory structure and then traverse them, along with any intermediate |
| 29 // nodes, in a top-down fashion, starting from a single common ancestor. A | 29 // nodes, in a top-down fashion, starting from a single common ancestor. A |
| 30 // Traversal starts out empty and is grown by means of the ExpandToInclude | 30 // Traversal starts out empty and is grown by means of the ExpandToInclude |
| 31 // method. Once constructed, the top(), begin_children(), and end_children() | 31 // method. Once constructed, the top(), begin_children(), and end_children() |
| 32 // methods can be used to explore the nodes in root-to-leaf order. | 32 // methods can be used to explore the nodes in root-to-leaf order. |
| 33 class ChangeReorderBuffer::Traversal { | 33 class ChangeReorderBuffer::Traversal { |
| 34 public: | 34 public: |
| 35 typedef pair<int64_t, int64_t> ParentChildLink; | 35 typedef pair<int64_t, int64_t> ParentChildLink; |
| 36 typedef set<ParentChildLink> LinkSet; | 36 typedef set<ParentChildLink> LinkSet; |
| 37 | 37 |
| 38 Traversal() : top_(kInvalidId) { } | 38 Traversal() : top_(kInvalidId) {} |
| 39 | 39 |
| 40 // Expand the traversal so that it includes the node indicated by | 40 // Expand the traversal so that it includes the node indicated by |
| 41 // |child_handle|. | 41 // |child_handle|. |
| 42 void ExpandToInclude(syncable::BaseTransaction* trans, int64_t child_handle) { | 42 void ExpandToInclude(syncable::BaseTransaction* trans, int64_t child_handle) { |
| 43 // If |top_| is invalid, this is the first insertion -- easy. | 43 // If |top_| is invalid, this is the first insertion -- easy. |
| 44 if (top_ == kInvalidId) { | 44 if (top_ == kInvalidId) { |
| 45 top_ = child_handle; | 45 top_ = child_handle; |
| 46 return; | 46 return; |
| 47 } | 47 } |
| 48 | 48 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 // (parent, child) ordering of values enables efficient lookup of children | 116 // (parent, child) ordering of values enables efficient lookup of children |
| 117 // given the parent handle, which is used for top-down traversal. |links_| | 117 // given the parent handle, which is used for top-down traversal. |links_| |
| 118 // is expected to be connected -- every node that appears as a parent in a | 118 // is expected to be connected -- every node that appears as a parent in a |
| 119 // link must either appear as a child of another link, or else be the | 119 // link must either appear as a child of another link, or else be the |
| 120 // topmost node, |top_|. | 120 // topmost node, |top_|. |
| 121 LinkSet links_; | 121 LinkSet links_; |
| 122 | 122 |
| 123 DISALLOW_COPY_AND_ASSIGN(Traversal); | 123 DISALLOW_COPY_AND_ASSIGN(Traversal); |
| 124 }; | 124 }; |
| 125 | 125 |
| 126 ChangeReorderBuffer::ChangeReorderBuffer() { | 126 ChangeReorderBuffer::ChangeReorderBuffer() {} |
| 127 } | |
| 128 | 127 |
| 129 ChangeReorderBuffer::~ChangeReorderBuffer() { | 128 ChangeReorderBuffer::~ChangeReorderBuffer() {} |
| 130 } | |
| 131 | 129 |
| 132 void ChangeReorderBuffer::PushAddedItem(int64_t id) { | 130 void ChangeReorderBuffer::PushAddedItem(int64_t id) { |
| 133 operations_[id] = ChangeRecord::ACTION_ADD; | 131 operations_[id] = ChangeRecord::ACTION_ADD; |
| 134 } | 132 } |
| 135 | 133 |
| 136 void ChangeReorderBuffer::PushDeletedItem(int64_t id) { | 134 void ChangeReorderBuffer::PushDeletedItem(int64_t id) { |
| 137 operations_[id] = ChangeRecord::ACTION_DELETE; | 135 operations_[id] = ChangeRecord::ACTION_DELETE; |
| 138 } | 136 } |
| 139 | 137 |
| 140 void ChangeReorderBuffer::PushUpdatedItem(int64_t id) { | 138 void ChangeReorderBuffer::PushUpdatedItem(int64_t id) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 CHECK(j->first == next); | 215 CHECK(j->first == next); |
| 218 to_visit.push(j->second); | 216 to_visit.push(j->second); |
| 219 } | 217 } |
| 220 } | 218 } |
| 221 | 219 |
| 222 *changes = ImmutableChangeRecordList(&changelist); | 220 *changes = ImmutableChangeRecordList(&changelist); |
| 223 return true; | 221 return true; |
| 224 } | 222 } |
| 225 | 223 |
| 226 } // namespace syncer | 224 } // namespace syncer |
| OLD | NEW |