Chromium Code Reviews| Index: components/sync/syncable/syncable_delete_journal.h |
| diff --git a/components/sync/syncable/syncable_delete_journal.h b/components/sync/syncable/syncable_delete_journal.h |
| index 218f516b31c154e27e8fa9433e0615043615aa89..8fc4635a04136336f12092eee322bc274381063c 100644 |
| --- a/components/sync/syncable/syncable_delete_journal.h |
| +++ b/components/sync/syncable/syncable_delete_journal.h |
| @@ -7,21 +7,31 @@ |
| #include <stddef.h> |
| -#include <set> |
| +#include <map> |
| #include "base/gtest_prod_util.h" |
| #include "base/macros.h" |
| #include "base/synchronization/lock.h" |
| +#include "components/sync/syncable/entry_kernel.h" |
| #include "components/sync/syncable/metahandle_set.h" |
| -#include "components/sync/syncable/syncable-inl.h" |
| namespace syncer { |
| namespace syncable { |
| class BaseTransaction; |
| -struct EntryKernel; |
| -typedef std::set<const EntryKernel*, LessField<IdField, ID>> JournalIndex; |
| +class LessByID { |
| + public: |
| + inline bool operator()(const EntryKernel* a, const EntryKernel* b) const { |
| + return a->ref(ID) < b->ref(ID); |
| + } |
| +}; |
| +// This should be |std::set<std::unique_ptr<EntryKernel>, LessByID>|. However, |
| +// DeleteJournal::TakeSnapshotAndClear needs to remove the unique_ptr from the |
| +// set, and std::set::extract is only available in C++17. TODO(avi): Switch to |
| +// using a std::set when Chromium allows C++17 use. |
| +typedef std::map<const EntryKernel*, std::unique_ptr<EntryKernel>, LessByID> |
|
Avi (use Gerrit)
2016/08/31 20:14:19
Maybe this should be a map from ID to unique_ptr<E
|
| + JournalIndex; |
| // DeleteJournal manages deleted entries that are not in sync directory until |
| // it's safe to drop them after the deletion is confirmed with native models. |
| @@ -30,9 +40,8 @@ typedef std::set<const EntryKernel*, LessField<IdField, ID>> JournalIndex; |
| // method requires a non-null |trans| parameter. |
| class DeleteJournal { |
| public: |
| - // Initialize |delete_journals_| using |intitial_journal|, whose content is |
| - // destroyed during initialization. |
| - explicit DeleteJournal(JournalIndex* initial_journal); |
| + // Initialize |delete_journals_| using |initial_journal|. |
| + explicit DeleteJournal(std::unique_ptr<JournalIndex> initial_journal); |
| ~DeleteJournal(); |
| // For testing only. |
| @@ -67,7 +76,7 @@ class DeleteJournal { |
| // |passive_delete_journal_types_| to |journal_entries|. Move handles in |
| // |delete_journals_to_purge_| to |journals_to_purge|. Called on sync thread. |
| void TakeSnapshotAndClear(BaseTransaction* trans, |
| - EntryKernelSet* journal_entries, |
| + OwnedEntryKernelSet* journal_entries, |
| MetahandleSet* journals_to_purge); |
| // Add |entries| to |delete_journals_| regardless of their SERVER_IS_DEL |
| @@ -76,7 +85,8 @@ class DeleteJournal { |
| // * batch add entries of a data type with unrecoverable error to delete |
| // journal before purging them. |
| // Called on sync thread. |
| - void AddJournalBatch(BaseTransaction* trans, const EntryKernelSet& entries); |
| + void AddJournalBatch(BaseTransaction* trans, |
| + const OwnedEntryKernelSet& entries); |
| // Return true if delete journals of |type| are maintained. |
| static bool IsDeleteJournalEnabled(ModelType type); |