1// Copyright 2014 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. 4 5#ifndef SYNC_ENGINE_COMMIT_PROCESSOR_H_ 6#define SYNC_ENGINE_COMMIT_PROCESSOR_H_ 7 8#include <map> 9#include <vector> 10 11#include "base/basictypes.h" 12#include "sync/base/sync_export.h" 13#include "sync/internal_api/public/base/model_type.h" 14#include "sync/internal_api/public/engine/model_safe_worker.h" 15#include "sync/sessions/model_type_registry.h" 16 17namespace syncer { 18 19namespace syncable { 20class Directory; 21} // namespace syncable 22 23class CommitContributor; 24class CommitContribution; 25 26// This class manages the set of per-type committer objects. 27// 28// It owns these types and hides the details of iterating over all of them. 29// Many methods allow the caller to specify a subset of types on which the 30// operation is to be applied. It is a logic error if the supplied set of types 31// contains a type which was not previously registered. 32class SYNC_EXPORT_PRIVATE CommitProcessor { 33 public: 34 typedef std::map<ModelType, CommitContribution*> ContributionMap; 35 36 // Contructs a CommitProcessor from a map of CommitContributors. 37 // The CommitProcessor does not own this map. 38 explicit CommitProcessor(CommitContributorMap* commit_contributor_map); 39 ~CommitProcessor(); 40 41 // Gathers a set of contributions to be used to populate a commit message. 42 // 43 // For each of the |commit_types| in this CommitProcessor's CommitContributor 44 // map, gather any entries queued for commit into CommitContributions. The 45 // total number of entries in all the returned CommitContributions shall not 46 // exceed |max_entries|. 47 void GatherCommitContributions( 48 ModelTypeSet commit_types, 49 size_t max_entries, 50 ContributionMap* contributions); 51 52 private: 53 // A map of 'commit contributors', one for each enabled type. 54 CommitContributorMap* commit_contributor_map_; 55 56 DISALLOW_COPY_AND_ASSIGN(CommitProcessor); 57}; 58 59} // namespace syncer 60 61#endif // SYNC_ENGINE_COMMIT_PROCESSOR_H_ 62