| Index: chrome/browser/sync/syncable/syncable.h
|
| diff --git a/chrome/browser/sync/syncable/syncable.h b/chrome/browser/sync/syncable/syncable.h
|
| index d0562f55c4809fc0d7ae37c11ad404b6caf70342..05b3052477980dca72dd633a350764f43f502c93 100755
|
| --- a/chrome/browser/sync/syncable/syncable.h
|
| +++ b/chrome/browser/sync/syncable/syncable.h
|
| @@ -221,11 +221,9 @@ typedef std::set<std::string> AttributeKeySet;
|
| // Why the singular enums? So the code compile-time dispatches instead of
|
| // runtime dispatches as it would with a single enum and an if() statement.
|
|
|
| -// The EntryKernel class contains the actual data for an entry. It
|
| -// would be a private class, except the number of required friend
|
| -// declarations would bloat the code.
|
| +// The EntryKernel class contains the actual data for an entry.
|
| struct EntryKernel {
|
| - protected:
|
| + private:
|
| std::string string_fields[STRING_FIELDS_COUNT];
|
| Blob blob_fields[BLOB_FIELDS_COUNT];
|
| int64 int64_fields[INT64_FIELDS_COUNT];
|
| @@ -246,38 +244,39 @@ struct EntryKernel {
|
| return dirty_;
|
| }
|
|
|
| - // Contain all this error-prone arithmetic in one place.
|
| - inline int64& ref(MetahandleField field) {
|
| - return int64_fields[field - INT64_FIELDS_BEGIN];
|
| + // Setters.
|
| + inline void put(MetahandleField field, int64 value) {
|
| + int64_fields[field - INT64_FIELDS_BEGIN] = value;
|
| }
|
| - inline int64& ref(Int64Field field) {
|
| - return int64_fields[field - INT64_FIELDS_BEGIN];
|
| + inline void put(Int64Field field, int64 value) {
|
| + int64_fields[field - INT64_FIELDS_BEGIN] = value;
|
| }
|
| - inline Id& ref(IdField field) {
|
| - return id_fields[field - ID_FIELDS_BEGIN];
|
| + inline void put(IdField field, const Id& value) {
|
| + id_fields[field - ID_FIELDS_BEGIN] = value;
|
| }
|
| - inline int64& ref(BaseVersion field) {
|
| - return int64_fields[field - INT64_FIELDS_BEGIN];
|
| + inline void put(BaseVersion field, int64 value) {
|
| + int64_fields[field - INT64_FIELDS_BEGIN] = value;
|
| }
|
| - inline std::bitset<BIT_FIELDS_COUNT>::reference ref(IndexedBitField field) {
|
| - return bit_fields[field - BIT_FIELDS_BEGIN];
|
| + inline void put(IndexedBitField field, bool value) {
|
| + bit_fields[field - BIT_FIELDS_BEGIN] = value;
|
| }
|
| - inline std::bitset<BIT_FIELDS_COUNT>::reference ref(IsDelField field) {
|
| - return bit_fields[field - BIT_FIELDS_BEGIN];
|
| + inline void put(IsDelField field, bool value) {
|
| + bit_fields[field - BIT_FIELDS_BEGIN] = value;
|
| }
|
| - inline std::bitset<BIT_FIELDS_COUNT>::reference ref(BitField field) {
|
| - return bit_fields[field - BIT_FIELDS_BEGIN];
|
| + inline void put(BitField field, bool value) {
|
| + bit_fields[field - BIT_FIELDS_BEGIN] = value;
|
| }
|
| - inline std::string& ref(StringField field) {
|
| - return string_fields[field - STRING_FIELDS_BEGIN];
|
| + inline void put(StringField field, const std::string& value) {
|
| + string_fields[field - STRING_FIELDS_BEGIN] = value;
|
| }
|
| - inline Blob& ref(BlobField field) {
|
| - return blob_fields[field - BLOB_FIELDS_BEGIN];
|
| + inline void put(BlobField field, const Blob& value) {
|
| + blob_fields[field - BLOB_FIELDS_BEGIN] = value;
|
| }
|
| - inline std::bitset<BIT_TEMPS_COUNT>::reference ref(BitTemp field) {
|
| - return bit_temps[field - BIT_TEMPS_BEGIN];
|
| + inline void put(BitTemp field, bool value) {
|
| + bit_temps[field - BIT_TEMPS_BEGIN] = value;
|
| }
|
|
|
| + // Const ref getters.
|
| inline int64 ref(MetahandleField field) const {
|
| return int64_fields[field - INT64_FIELDS_BEGIN];
|
| }
|
| @@ -309,6 +308,16 @@ struct EntryKernel {
|
| return bit_temps[field - BIT_TEMPS_BEGIN];
|
| }
|
|
|
| + // Non-const, mutable ref getters for object types only.
|
| + inline std::string& mutable_ref(StringField field) {
|
| + return string_fields[field - STRING_FIELDS_BEGIN];
|
| + }
|
| + inline Blob& mutable_ref(BlobField field) {
|
| + return blob_fields[field - BLOB_FIELDS_BEGIN];
|
| + }
|
| + inline Id& mutable_ref(IdField field) {
|
| + return id_fields[field - ID_FIELDS_BEGIN];
|
| + }
|
| private:
|
| // Tracks whether this entry needs to be saved to the database.
|
| bool dirty_;
|
| @@ -462,7 +471,7 @@ class MutableEntry : public Entry {
|
| inline bool PutField(FieldType field, const ValueType& value) {
|
| DCHECK(kernel_);
|
| if (kernel_->ref(field) != value) {
|
| - kernel_->ref(field) = value;
|
| + kernel_->put(field, value);
|
| kernel_->mark_dirty();
|
| }
|
| return true;
|
| @@ -471,7 +480,7 @@ class MutableEntry : public Entry {
|
| template <typename TempType, typename ValueType>
|
| inline bool PutTemp(TempType field, const ValueType& value) {
|
| DCHECK(kernel_);
|
| - kernel_->ref(field) = value;
|
| + kernel_->put(field, value);
|
| return true;
|
| }
|
|
|
|
|