Chromium Code Reviews| Index: components/tracing/core/proto_zero_message_handle.h |
| diff --git a/components/tracing/core/proto_zero_message_handle.h b/components/tracing/core/proto_zero_message_handle.h |
| index 2f83ec9638f0d400a96eec74c159c0730eab62f7..d02763f644b30fb06e561e411ed752e280897d3d 100644 |
| --- a/components/tracing/core/proto_zero_message_handle.h |
| +++ b/components/tracing/core/proto_zero_message_handle.h |
| @@ -5,6 +5,12 @@ |
| #ifndef COMPONENTS_TRACING_CORE_PROTO_ZERO_MESSAGE_HANDLE_H_ |
| #define COMPONENTS_TRACING_CORE_PROTO_ZERO_MESSAGE_HANDLE_H_ |
| +#include <stdint.h> |
| + |
| +#include <set> |
| +#include <string> |
| + |
| +#include "base/logging.h" |
| #include "base/macros.h" |
| #include "components/tracing/tracing_export.h" |
| @@ -32,6 +38,12 @@ class TRACING_EXPORT ProtoZeroMessageHandleBase { |
| ProtoZeroMessageHandleBase(ProtoZeroMessageHandleBase&& other); |
| ProtoZeroMessageHandleBase& operator=(ProtoZeroMessageHandleBase&& other); |
| + inline void SealField(uint32_t field_id) { |
| + DCHECK(sealed_fields_.count(field_id) == 0) << |
| + "Field (" + std::to_string(field_id) + ") can't be sealed again."; |
| + sealed_fields_.insert(field_id); |
| + } |
| + |
| protected: |
| explicit ProtoZeroMessageHandleBase(ProtoZeroMessage*); |
| ProtoZeroMessage& operator*() const { return *message_; } |
| @@ -40,16 +52,20 @@ class TRACING_EXPORT ProtoZeroMessageHandleBase { |
| private: |
| friend class ProtoZeroMessage; |
| - void reset_message() { message_ = nullptr; } |
| + void reset_message() { |
| + message_ = nullptr; |
| + sealed_fields_.clear(); |
| + } |
| void Move(ProtoZeroMessageHandleBase* other); |
| ProtoZeroMessage* message_; |
| + std::set<uint32_t> sealed_fields_; |
|
alph
2016/08/22 22:48:35
nit: unordered_set
kraynov
2016/08/23 12:43:49
Done.
|
| DISALLOW_COPY_AND_ASSIGN(ProtoZeroMessageHandleBase); |
| }; |
| template <typename T> |
| -class ProtoZeroMessageHandle : ProtoZeroMessageHandleBase { |
| +class ProtoZeroMessageHandle : public ProtoZeroMessageHandleBase { |
| public: |
| explicit ProtoZeroMessageHandle(T* message) |
| : ProtoZeroMessageHandleBase(message) {} |