Index: sync/internal_api/public/util/proto_value_ptr.h |
diff --git a/sync/internal_api/public/util/proto_value_ptr.h b/sync/internal_api/public/util/proto_value_ptr.h |
deleted file mode 100644 |
index 0ac9db71e91f942b4bf6bbc095ac161f194315de..0000000000000000000000000000000000000000 |
--- a/sync/internal_api/public/util/proto_value_ptr.h |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-// Copyright 2015 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 SYNC_INTERNAL_API_PUBLIC_UTIL_PROTO_VALUE_PTR_H_ |
-#define SYNC_INTERNAL_API_PUBLIC_UTIL_PROTO_VALUE_PTR_H_ |
- |
-#include "base/gtest_prod_util.h" |
-#include "base/memory/ref_counted.h" |
- |
-namespace syncer_v2 { |
-struct EntityData; |
-class ProcessorEntityTracker; |
-} // namespace syncer_v2 |
- |
-namespace syncer { |
- |
-namespace syncable { |
-struct EntryKernel; |
-} // namespace syncable |
- |
-// Default traits struct for ProtoValuePtr - adapts a |
-// ::google::protobuf::MessageLite derived type to be used with ProtoValuePtr. |
-template <typename T> |
-struct DefaultProtoValuePtrTraits { |
- // Deep copy the value from |src| to |dest|. |
- static void CopyValue(T* dest, const T& src) { dest->CopyFrom(src); } |
- // Swap the value with the source (to avoid deep copying). |
- static void SwapValue(T* dest, T* src) { dest->Swap(src); } |
- // Parse the value from BLOB. |
- static void ParseFromBlob(T* dest, const void* blob, int length) { |
- dest->ParseFromArray(blob, length); |
- } |
- // True if the |value| is a non-default value. |
- static bool HasValue(const T& value) { return value.ByteSize() > 0; } |
- // Default value for the type. |
- static const T& DefaultValue() { return T::default_instance(); } |
-}; |
- |
-// This is a smart pointer to a ::google::protobuf::MessageLite derived type |
-// that implements immutable, shareable, copy-on-write semantics. |
-// |
-// Additionally this class helps to avoid storing multiple copies of default |
-// instances of the wrapped type. |
-// |
-// Copying ProtoValuePtr results in ref-counted sharing of the |
-// underlying wrapper and the value contained in the wrapper. |
-// |
-// The public interface includes only immutable access to the wrapped value. |
-// The only way to assign a value to ProtoValuePtr is through a |
-// private SetValue function which is called from EntryKernel. That results |
-// in stopping sharing the previous value and creating a wrapper to the new |
-// value. |
-template <typename T, typename Traits = DefaultProtoValuePtrTraits<T>> |
-class ProtoValuePtr { |
- private: |
- // Immutable shareable ref-counted wrapper that embeds the value. |
- class Wrapper : public base::RefCountedThreadSafe<Wrapper> { |
- public: |
- explicit Wrapper(const T& value) { Traits::CopyValue(&value_, value); } |
- explicit Wrapper(T* value) { Traits::SwapValue(&value_, value); } |
- |
- const T& value() const { return value_; } |
- // Create wrapper by deserializing a BLOB. |
- static Wrapper* ParseFromBlob(const void* blob, int length) { |
- Wrapper* wrapper = new Wrapper; |
- Traits::ParseFromBlob(&wrapper->value_, blob, length); |
- return wrapper; |
- } |
- |
- private: |
- friend class base::RefCountedThreadSafe<Wrapper>; |
- Wrapper() {} |
- ~Wrapper() {} |
- |
- T value_; |
- }; |
- |
- public: |
- ProtoValuePtr() {} |
- ~ProtoValuePtr() {} |
- |
- const T& value() const { |
- return wrapper_ ? wrapper_->value() : Traits::DefaultValue(); |
- } |
- |
- const T* operator->() const { |
- const T& wrapped_instance = value(); |
- return &wrapped_instance; |
- } |
- |
- private: |
- friend struct syncable::EntryKernel; |
- friend struct syncer_v2::EntityData; |
- friend class syncer_v2::ProcessorEntityTracker; |
- FRIEND_TEST_ALL_PREFIXES(ProtoValuePtrTest, ValueAssignment); |
- FRIEND_TEST_ALL_PREFIXES(ProtoValuePtrTest, ValueSwap); |
- FRIEND_TEST_ALL_PREFIXES(ProtoValuePtrTest, SharingTest); |
- FRIEND_TEST_ALL_PREFIXES(ProtoValuePtrTest, ParsingTest); |
- |
- // set the value to copy of |new_value|. |
- void set_value(const T& new_value) { |
- if (Traits::HasValue(new_value)) { |
- wrapper_ = new Wrapper(new_value); |
- } else { |
- // Don't store default value. |
- reset(); |
- } |
- } |
- |
- void reset() { wrapper_ = nullptr; } |
- |
- // Take over |src| value (swap). |
- void swap_value(T* src) { |
- if (Traits::HasValue(*src)) { |
- wrapper_ = new Wrapper(src); |
- } else { |
- // Don't store default value. |
- reset(); |
- } |
- } |
- |
- void load(const void* blob, int length) { |
- wrapper_ = Wrapper::ParseFromBlob(blob, length); |
- } |
- |
- scoped_refptr<Wrapper> wrapper_; |
-}; |
- |
-} // namespace syncer |
- |
-#endif // SYNC_INTERNAL_API_PUBLIC_UTIL_PROTO_VALUE_PTR_H_ |