| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | 
							- #ifndef PROTOBUF_BENCHMARKS_UTIL_DATA_PROTO2_TO_PROTO3_UTIL_H_
 
- #define PROTOBUF_BENCHMARKS_UTIL_DATA_PROTO2_TO_PROTO3_UTIL_H_
 
- #include "google/protobuf/message.h"
 
- #include "google/protobuf/descriptor.h"
 
- using google::protobuf::FieldDescriptor;
 
- using google::protobuf::Message;
 
- using google::protobuf::Reflection;
 
- namespace google {
 
- namespace protobuf {
 
- namespace util {
 
- class DataStripper {
 
-  public:
 
-   void StripMessage(Message *message) {
 
-     std::vector<const FieldDescriptor*> set_fields;
 
-     const Reflection* reflection = message->GetReflection();
 
-     reflection->ListFields(*message, &set_fields);
 
-     for (size_t i = 0; i < set_fields.size(); i++) {
 
-       const FieldDescriptor* field = set_fields[i];
 
-       if (ShouldBeClear(field)) {
 
-         reflection->ClearField(message, field);
 
-         continue;
 
-       }
 
-       if (field->type() == FieldDescriptor::TYPE_MESSAGE) {
 
-         if (field->is_repeated()) {
 
-           for (int j = 0; j < reflection->FieldSize(*message, field); j++) {
 
-             StripMessage(reflection->MutableRepeatedMessage(message, field, j));
 
-           }
 
-         } else {
 
-           StripMessage(reflection->MutableMessage(message, field));
 
-         }
 
-       }
 
-     }
 
-     reflection->MutableUnknownFields(message)->Clear();
 
-   }
 
-  private:
 
-   virtual bool ShouldBeClear(const FieldDescriptor *field) = 0;
 
- };
 
- class GogoDataStripper : public DataStripper {
 
-  private:
 
-   virtual bool ShouldBeClear(const FieldDescriptor *field) {
 
-     return field->type() == FieldDescriptor::TYPE_GROUP;
 
-   }
 
- };
 
- class Proto3DataStripper : public DataStripper {
 
-  private:
 
-   virtual bool ShouldBeClear(const FieldDescriptor *field) {
 
-     return field->type() == FieldDescriptor::TYPE_GROUP ||
 
-            field->is_extension();
 
-   }
 
- };
 
- }  // namespace util
 
- }  // namespace protobuf
 
- }  // namespace google
 
- #endif  // PROTOBUF_BENCHMARKS_UTIL_DATA_PROTO2_TO_PROTO3_UTIL_H_
 
 
  |