|
|
|
@ -46,12 +46,6 @@ namespace google { |
|
|
|
|
namespace protobuf { |
|
|
|
|
namespace util { |
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_RTTI |
|
|
|
|
#define TYPENAME(T) typeid(T).name() |
|
|
|
|
#else |
|
|
|
|
#define TYPENAME(T) #T |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
class PROTOBUF_EXPORT FieldMaskUtil { |
|
|
|
|
typedef google::protobuf::FieldMask FieldMask; |
|
|
|
|
|
|
|
|
@ -66,13 +60,19 @@ class PROTOBUF_EXPORT FieldMaskUtil { |
|
|
|
|
template <typename T> |
|
|
|
|
static void FromFieldNumbers(const std::vector<int64>& field_numbers, |
|
|
|
|
FieldMask* out) { |
|
|
|
|
#if PROTOBUF_RTTI |
|
|
|
|
#define PROTOBUF_RTTI_TYPENAME(T) typeid(T).name() |
|
|
|
|
#else |
|
|
|
|
#define PROTOBUF_RTTI_TYPENAME(T) #T |
|
|
|
|
#endif |
|
|
|
|
for (const auto field_number : field_numbers) { |
|
|
|
|
const FieldDescriptor* field_desc = |
|
|
|
|
T::descriptor()->FindFieldByNumber(field_number); |
|
|
|
|
GOOGLE_CHECK(field_desc != nullptr) << "Invalid field number for " |
|
|
|
|
<< TYPENAME(T) << ": " << field_number; |
|
|
|
|
<< PROTOBUF_RTTI_TYPENAME(T) << ": " << field_number; |
|
|
|
|
AddPathToFieldMask<T>(field_desc->lowercase_name(), out); |
|
|
|
|
} |
|
|
|
|
#undef PROTOBUF_RTTI_TYPENAME |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Converts FieldMask to/from string, formatted according to proto3 JSON
|
|
|
|
|