123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef COMPONENTS_SYNC_MODEL_SYNC_CHANGE_H_
- #define COMPONENTS_SYNC_MODEL_SYNC_CHANGE_H_
- #include <iosfwd>
- #include <string>
- #include <vector>
- #include "base/location.h"
- #include "components/sync/model/sync_data.h"
- namespace syncer {
- // A SyncChange object reflects a change to a piece of synced data. The change
- // can be either a delete, add, or an update. All data relevant to the change
- // is encapsulated within the SyncChange, which, once created, is immutable.
- // Note: it is safe and cheap to pass these by value or make copies, as they do
- // not create deep copies of their internal data.
- class SyncChange {
- public:
- enum SyncChangeType {
- ACTION_ADD,
- ACTION_UPDATE,
- ACTION_DELETE,
- };
- // Create a new change with the specified sync data.
- SyncChange(const base::Location& from_here,
- SyncChangeType change_type,
- const SyncData& sync_data);
- // Copy constructor and assignment operator welcome.
- SyncChange(const SyncChange&) = default;
- SyncChange& operator=(const SyncChange&) = default;
- // Move constructor and assignment operator allowed (although questionable).
- // TODO(crbug.com/1152824): Avoid move semantics if that leads invalid state.
- SyncChange(SyncChange&&) = default;
- SyncChange& operator=(SyncChange&&) = default;
- ~SyncChange();
- // Whether this change is valid. This must be true before attempting to access
- // the data. It may only return false for moved-away instances (unspecified
- // behavior). Otherwise it's guaranteed to return true.
- // TODO(crbug.com/1152824): Remove this API once move semantics are removed.
- bool IsValid() const;
- // Getters.
- SyncChangeType change_type() const;
- SyncData sync_data() const;
- base::Location location() const;
- // Returns a string representation of |change_type|.
- static std::string ChangeTypeToString(SyncChangeType change_type);
- // Returns a string representation of the entire object. Used for gmock
- // printing method, PrintTo.
- std::string ToString() const;
- private:
- base::Location location_;
- SyncChangeType change_type_;
- // An immutable container for the data of this SyncChange. Whenever
- // SyncChanges are copied, they copy references to this data.
- SyncData sync_data_;
- };
- // gmock printer helper.
- void PrintTo(const SyncChange& sync_change, std::ostream* os);
- using SyncChangeList = std::vector<SyncChange>;
- } // namespace syncer
- #endif // COMPONENTS_SYNC_MODEL_SYNC_CHANGE_H_
|