| OLD | NEW | 
|     1 // Protocol Buffers - Google's data interchange format |     1 // Protocol Buffers - Google's data interchange format | 
|     2 // Copyright 2008 Google Inc.  All rights reserved. |     2 // Copyright 2008 Google Inc.  All rights reserved. | 
|     3 // https://developers.google.com/protocol-buffers/ |     3 // https://developers.google.com/protocol-buffers/ | 
|     4 // |     4 // | 
|     5 // Redistribution and use in source and binary forms, with or without |     5 // Redistribution and use in source and binary forms, with or without | 
|     6 // modification, are permitted provided that the following conditions are |     6 // modification, are permitted provided that the following conditions are | 
|     7 // met: |     7 // met: | 
|     8 // |     8 // | 
|     9 //     * Redistributions of source code must retain the above copyright |     9 //     * Redistributions of source code must retain the above copyright | 
|    10 // notice, this list of conditions and the following disclaimer. |    10 // notice, this list of conditions and the following disclaimer. | 
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   170         type == WireFormatLite::TYPE_GROUP); |   170         type == WireFormatLite::TYPE_GROUP); | 
|   171   ExtensionInfo info(type, is_repeated, is_packed); |   171   ExtensionInfo info(type, is_repeated, is_packed); | 
|   172   info.message_prototype = prototype; |   172   info.message_prototype = prototype; | 
|   173   Register(containing_type, number, info); |   173   Register(containing_type, number, info); | 
|   174 } |   174 } | 
|   175  |   175  | 
|   176  |   176  | 
|   177 // =================================================================== |   177 // =================================================================== | 
|   178 // Constructors and basic methods. |   178 // Constructors and basic methods. | 
|   179  |   179  | 
|   180 ExtensionSet::ExtensionSet(::google::protobuf::Arena* arena) : arena_(arena) { |   180 ExtensionSet::ExtensionSet(::google::protobuf::Arena* arena) | 
 |   181     : arena_(arena) { | 
|   181   if (arena_ != NULL) { |   182   if (arena_ != NULL) { | 
|   182     arena_->OwnDestructor(&extensions_); |   183     arena_->OwnDestructor(&extensions_); | 
|   183   } |   184   } | 
|   184 } |   185 } | 
|   185  |   186  | 
|   186 ExtensionSet::ExtensionSet() : arena_(NULL) {} |   187 ExtensionSet::ExtensionSet() : arena_(NULL) {} | 
|   187  |   188  | 
|   188 ExtensionSet::~ExtensionSet() { |   189 ExtensionSet::~ExtensionSet() { | 
|   189   // Deletes all allocated extensions. |   190   // Deletes all allocated extensions. | 
|   190   if (arena_ == NULL) { |   191   if (arena_ == NULL) { | 
|   191     for (map<int, Extension>::iterator iter = extensions_.begin(); |   192     for (ExtensionMap::iterator iter = extensions_.begin(); | 
|   192          iter != extensions_.end(); ++iter) { |   193          iter != extensions_.end(); ++iter) { | 
|   193       iter->second.Free(); |   194       iter->second.Free(); | 
|   194     } |   195     } | 
|   195   } |   196   } | 
|   196 } |   197 } | 
|   197  |   198  | 
|   198 // Defined in extension_set_heavy.cc. |   199 // Defined in extension_set_heavy.cc. | 
|   199 // void ExtensionSet::AppendToList(const Descriptor* containing_type, |   200 // void ExtensionSet::AppendToList(const Descriptor* containing_type, | 
|   200 //                                 const DescriptorPool* pool, |   201 //                                 const DescriptorPool* pool, | 
|   201 //                                 vector<const FieldDescriptor*>* output) const |   202 //                                 vector<const FieldDescriptor*>* output) const | 
|   202  |   203  | 
|   203 bool ExtensionSet::Has(int number) const { |   204 bool ExtensionSet::Has(int number) const { | 
|   204   map<int, Extension>::const_iterator iter = extensions_.find(number); |   205   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   205   if (iter == extensions_.end()) return false; |   206   if (iter == extensions_.end()) return false; | 
|   206   GOOGLE_DCHECK(!iter->second.is_repeated); |   207   GOOGLE_DCHECK(!iter->second.is_repeated); | 
|   207   return !iter->second.is_cleared; |   208   return !iter->second.is_cleared; | 
|   208 } |   209 } | 
|   209  |   210  | 
|   210 int ExtensionSet::NumExtensions() const { |   211 int ExtensionSet::NumExtensions() const { | 
|   211   int result = 0; |   212   int result = 0; | 
|   212   for (map<int, Extension>::const_iterator iter = extensions_.begin(); |   213   for (ExtensionMap::const_iterator iter = extensions_.begin(); | 
|   213        iter != extensions_.end(); ++iter) { |   214        iter != extensions_.end(); ++iter) { | 
|   214     if (!iter->second.is_cleared) { |   215     if (!iter->second.is_cleared) { | 
|   215       ++result; |   216       ++result; | 
|   216     } |   217     } | 
|   217   } |   218   } | 
|   218   return result; |   219   return result; | 
|   219 } |   220 } | 
|   220  |   221  | 
|   221 int ExtensionSet::ExtensionSize(int number) const { |   222 int ExtensionSet::ExtensionSize(int number) const { | 
|   222   map<int, Extension>::const_iterator iter = extensions_.find(number); |   223   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   223   if (iter == extensions_.end()) return false; |   224   if (iter == extensions_.end()) return false; | 
|   224   return iter->second.GetSize(); |   225   return iter->second.GetSize(); | 
|   225 } |   226 } | 
|   226  |   227  | 
|   227 FieldType ExtensionSet::ExtensionType(int number) const { |   228 FieldType ExtensionSet::ExtensionType(int number) const { | 
|   228   map<int, Extension>::const_iterator iter = extensions_.find(number); |   229   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   229   if (iter == extensions_.end()) { |   230   if (iter == extensions_.end()) { | 
|   230     GOOGLE_LOG(DFATAL) << "Don't lookup extension types if they aren't present (
      1). "; |   231     GOOGLE_LOG(DFATAL) << "Don't lookup extension types if they aren't present (
      1). "; | 
|   231     return 0; |   232     return 0; | 
|   232   } |   233   } | 
|   233   if (iter->second.is_cleared) { |   234   if (iter->second.is_cleared) { | 
|   234     GOOGLE_LOG(DFATAL) << "Don't lookup extension types if they aren't present (
      2). "; |   235     GOOGLE_LOG(DFATAL) << "Don't lookup extension types if they aren't present (
      2). "; | 
|   235   } |   236   } | 
|   236   return iter->second.type; |   237   return iter->second.type; | 
|   237 } |   238 } | 
|   238  |   239  | 
|   239 void ExtensionSet::ClearExtension(int number) { |   240 void ExtensionSet::ClearExtension(int number) { | 
|   240   map<int, Extension>::iterator iter = extensions_.find(number); |   241   ExtensionMap::iterator iter = extensions_.find(number); | 
|   241   if (iter == extensions_.end()) return; |   242   if (iter == extensions_.end()) return; | 
|   242   iter->second.Clear(); |   243   iter->second.Clear(); | 
|   243 } |   244 } | 
|   244  |   245  | 
|   245 // =================================================================== |   246 // =================================================================== | 
|   246 // Field accessors |   247 // Field accessors | 
|   247  |   248  | 
|   248 namespace { |   249 namespace { | 
|   249  |   250  | 
|   250 enum Cardinality { |   251 enum Cardinality { | 
|   251   REPEATED, |   252   REPEATED, | 
|   252   OPTIONAL |   253   OPTIONAL | 
|   253 }; |   254 }; | 
|   254  |   255  | 
|   255 }  // namespace |   256 }  // namespace | 
|   256  |   257  | 
|   257 #define GOOGLE_DCHECK_TYPE(EXTENSION, LABEL, CPPTYPE)                           
        \ |   258 #define GOOGLE_DCHECK_TYPE(EXTENSION, LABEL, CPPTYPE)                           
        \ | 
|   258   GOOGLE_DCHECK_EQ((EXTENSION).is_repeated ? REPEATED : OPTIONAL, LABEL);       
        \ |   259   GOOGLE_DCHECK_EQ((EXTENSION).is_repeated ? REPEATED : OPTIONAL, LABEL);       
        \ | 
|   259   GOOGLE_DCHECK_EQ(cpp_type((EXTENSION).type), WireFormatLite::CPPTYPE_##CPPTYPE
      ) |   260   GOOGLE_DCHECK_EQ(cpp_type((EXTENSION).type), WireFormatLite::CPPTYPE_##CPPTYPE
      ) | 
|   260  |   261  | 
|   261 // ------------------------------------------------------------------- |   262 // ------------------------------------------------------------------- | 
|   262 // Primitives |   263 // Primitives | 
|   263  |   264  | 
|   264 #define PRIMITIVE_ACCESSORS(UPPERCASE, LOWERCASE, CAMELCASE)                   \ |   265 #define PRIMITIVE_ACCESSORS(UPPERCASE, LOWERCASE, CAMELCASE)                   \ | 
|   265                                                                                \ |   266                                                                                \ | 
|   266 LOWERCASE ExtensionSet::Get##CAMELCASE(int number,                             \ |   267 LOWERCASE ExtensionSet::Get##CAMELCASE(int number,                             \ | 
|   267                                        LOWERCASE default_value) const {        \ |   268                                        LOWERCASE default_value) const {        \ | 
|   268   map<int, Extension>::const_iterator iter = extensions_.find(number);         \ |   269   ExtensionMap::const_iterator iter = extensions_.find(number);                \ | 
|   269   if (iter == extensions_.end() || iter->second.is_cleared) {                  \ |   270   if (iter == extensions_.end() || iter->second.is_cleared) {                  \ | 
|   270     return default_value;                                                      \ |   271     return default_value;                                                      \ | 
|   271   } else {                                                                     \ |   272   } else {                                                                     \ | 
|   272     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, UPPERCASE);                      
            \ |   273     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, UPPERCASE);                      
            \ | 
|   273     return iter->second.LOWERCASE##_value;                                     \ |   274     return iter->second.LOWERCASE##_value;                                     \ | 
|   274   }                                                                            \ |   275   }                                                                            \ | 
|   275 }                                                                              \ |   276 }                                                                              \ | 
|   276                                                                                \ |   277                                                                                \ | 
|   277 void ExtensionSet::Set##CAMELCASE(int number, FieldType type,                  \ |   278 void ExtensionSet::Set##CAMELCASE(int number, FieldType type,                  \ | 
|   278                                   LOWERCASE value,                             \ |   279                                   LOWERCASE value,                             \ | 
|   279                                   const FieldDescriptor* descriptor) {         \ |   280                                   const FieldDescriptor* descriptor) {         \ | 
|   280   Extension* extension;                                                        \ |   281   Extension* extension;                                                        \ | 
|   281   if (MaybeNewExtension(number, descriptor, &extension)) {                     \ |   282   if (MaybeNewExtension(number, descriptor, &extension)) {                     \ | 
|   282     extension->type = type;                                                    \ |   283     extension->type = type;                                                    \ | 
|   283     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_##UPPERC
      ASE); \ |   284     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_##UPPERC
      ASE); \ | 
|   284     extension->is_repeated = false;                                            \ |   285     extension->is_repeated = false;                                            \ | 
|   285   } else {                                                                     \ |   286   } else {                                                                     \ | 
|   286     GOOGLE_DCHECK_TYPE(*extension, OPTIONAL, UPPERCASE);                        
            \ |   287     GOOGLE_DCHECK_TYPE(*extension, OPTIONAL, UPPERCASE);                        
            \ | 
|   287   }                                                                            \ |   288   }                                                                            \ | 
|   288   extension->is_cleared = false;                                               \ |   289   extension->is_cleared = false;                                               \ | 
|   289   extension->LOWERCASE##_value = value;                                        \ |   290   extension->LOWERCASE##_value = value;                                        \ | 
|   290 }                                                                              \ |   291 }                                                                              \ | 
|   291                                                                                \ |   292                                                                                \ | 
|   292 LOWERCASE ExtensionSet::GetRepeated##CAMELCASE(int number, int index) const {  \ |   293 LOWERCASE ExtensionSet::GetRepeated##CAMELCASE(int number, int index) const {  \ | 
|   293   map<int, Extension>::const_iterator iter = extensions_.find(number);         \ |   294   ExtensionMap::const_iterator iter = extensions_.find(number);                \ | 
|   294   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; \ |   295   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; \ | 
|   295   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, UPPERCASE);                        
            \ |   296   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, UPPERCASE);                        
            \ | 
|   296   return iter->second.repeated_##LOWERCASE##_value->Get(index);                \ |   297   return iter->second.repeated_##LOWERCASE##_value->Get(index);                \ | 
|   297 }                                                                              \ |   298 }                                                                              \ | 
|   298                                                                                \ |   299                                                                                \ | 
|   299 void ExtensionSet::SetRepeated##CAMELCASE(                                     \ |   300 void ExtensionSet::SetRepeated##CAMELCASE(                                     \ | 
|   300     int number, int index, LOWERCASE value) {                                  \ |   301     int number, int index, LOWERCASE value) {                                  \ | 
|   301   map<int, Extension>::iterator iter = extensions_.find(number);               \ |   302   ExtensionMap::iterator iter = extensions_.find(number);                      \ | 
|   302   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; \ |   303   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; \ | 
|   303   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, UPPERCASE);                        
            \ |   304   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, UPPERCASE);                        
            \ | 
|   304   iter->second.repeated_##LOWERCASE##_value->Set(index, value);                \ |   305   iter->second.repeated_##LOWERCASE##_value->Set(index, value);                \ | 
|   305 }                                                                              \ |   306 }                                                                              \ | 
|   306                                                                                \ |   307                                                                                \ | 
|   307 void ExtensionSet::Add##CAMELCASE(int number, FieldType type,                  \ |   308 void ExtensionSet::Add##CAMELCASE(int number, FieldType type,                  \ | 
|   308                                   bool packed, LOWERCASE value,                \ |   309                                   bool packed, LOWERCASE value,                \ | 
|   309                                   const FieldDescriptor* descriptor) {         \ |   310                                   const FieldDescriptor* descriptor) {         \ | 
|   310   Extension* extension;                                                        \ |   311   Extension* extension;                                                        \ | 
|   311   if (MaybeNewExtension(number, descriptor, &extension)) {                     \ |   312   if (MaybeNewExtension(number, descriptor, &extension)) {                     \ | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|   327 PRIMITIVE_ACCESSORS(UINT32, uint32, UInt32) |   328 PRIMITIVE_ACCESSORS(UINT32, uint32, UInt32) | 
|   328 PRIMITIVE_ACCESSORS(UINT64, uint64, UInt64) |   329 PRIMITIVE_ACCESSORS(UINT64, uint64, UInt64) | 
|   329 PRIMITIVE_ACCESSORS( FLOAT,  float,  Float) |   330 PRIMITIVE_ACCESSORS( FLOAT,  float,  Float) | 
|   330 PRIMITIVE_ACCESSORS(DOUBLE, double, Double) |   331 PRIMITIVE_ACCESSORS(DOUBLE, double, Double) | 
|   331 PRIMITIVE_ACCESSORS(  BOOL,   bool,   Bool) |   332 PRIMITIVE_ACCESSORS(  BOOL,   bool,   Bool) | 
|   332  |   333  | 
|   333 #undef PRIMITIVE_ACCESSORS |   334 #undef PRIMITIVE_ACCESSORS | 
|   334  |   335  | 
|   335 const void* ExtensionSet::GetRawRepeatedField(int number, |   336 const void* ExtensionSet::GetRawRepeatedField(int number, | 
|   336                                               const void* default_value) const { |   337                                               const void* default_value) const { | 
|   337   map<int, Extension>::const_iterator iter = extensions_.find(number); |   338   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   338   if (iter == extensions_.end()) { |   339   if (iter == extensions_.end()) { | 
|   339     return default_value; |   340     return default_value; | 
|   340   } |   341   } | 
|   341   // We assume that all the RepeatedField<>* pointers have the same |   342   // We assume that all the RepeatedField<>* pointers have the same | 
|   342   // size and alignment within the anonymous union in Extension. |   343   // size and alignment within the anonymous union in Extension. | 
|   343   return iter->second.repeated_int32_value; |   344   return iter->second.repeated_int32_value; | 
|   344 } |   345 } | 
|   345  |   346  | 
|   346 void* ExtensionSet::MutableRawRepeatedField(int number, FieldType field_type, |   347 void* ExtensionSet::MutableRawRepeatedField(int number, FieldType field_type, | 
|   347                                             bool packed, |   348                                             bool packed, | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   401   } |   402   } | 
|   402  |   403  | 
|   403   // We assume that all the RepeatedField<>* pointers have the same |   404   // We assume that all the RepeatedField<>* pointers have the same | 
|   404   // size and alignment within the anonymous union in Extension. |   405   // size and alignment within the anonymous union in Extension. | 
|   405   return extension->repeated_int32_value; |   406   return extension->repeated_int32_value; | 
|   406 } |   407 } | 
|   407  |   408  | 
|   408 // Compatible version using old call signature. Does not create extensions when |   409 // Compatible version using old call signature. Does not create extensions when | 
|   409 // the don't already exist; instead, just GOOGLE_CHECK-fails. |   410 // the don't already exist; instead, just GOOGLE_CHECK-fails. | 
|   410 void* ExtensionSet::MutableRawRepeatedField(int number) { |   411 void* ExtensionSet::MutableRawRepeatedField(int number) { | 
|   411   map<int, Extension>::iterator iter = extensions_.find(number); |   412   ExtensionMap::iterator iter = extensions_.find(number); | 
|   412   GOOGLE_CHECK(iter == extensions_.end()) << "Extension not found."; |   413   GOOGLE_CHECK(iter == extensions_.end()) << "Extension not found."; | 
|   413   // We assume that all the RepeatedField<>* pointers have the same |   414   // We assume that all the RepeatedField<>* pointers have the same | 
|   414   // size and alignment within the anonymous union in Extension. |   415   // size and alignment within the anonymous union in Extension. | 
|   415   return iter->second.repeated_int32_value; |   416   return iter->second.repeated_int32_value; | 
|   416 } |   417 } | 
|   417  |   418  | 
|   418  |   419  | 
|   419 // ------------------------------------------------------------------- |   420 // ------------------------------------------------------------------- | 
|   420 // Enums |   421 // Enums | 
|   421  |   422  | 
|   422 int ExtensionSet::GetEnum(int number, int default_value) const { |   423 int ExtensionSet::GetEnum(int number, int default_value) const { | 
|   423   map<int, Extension>::const_iterator iter = extensions_.find(number); |   424   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   424   if (iter == extensions_.end() || iter->second.is_cleared) { |   425   if (iter == extensions_.end() || iter->second.is_cleared) { | 
|   425     // Not present.  Return the default value. |   426     // Not present.  Return the default value. | 
|   426     return default_value; |   427     return default_value; | 
|   427   } else { |   428   } else { | 
|   428     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, ENUM); |   429     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, ENUM); | 
|   429     return iter->second.enum_value; |   430     return iter->second.enum_value; | 
|   430   } |   431   } | 
|   431 } |   432 } | 
|   432  |   433  | 
|   433 void ExtensionSet::SetEnum(int number, FieldType type, int value, |   434 void ExtensionSet::SetEnum(int number, FieldType type, int value, | 
|   434                            const FieldDescriptor* descriptor) { |   435                            const FieldDescriptor* descriptor) { | 
|   435   Extension* extension; |   436   Extension* extension; | 
|   436   if (MaybeNewExtension(number, descriptor, &extension)) { |   437   if (MaybeNewExtension(number, descriptor, &extension)) { | 
|   437     extension->type = type; |   438     extension->type = type; | 
|   438     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_ENUM); |   439     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_ENUM); | 
|   439     extension->is_repeated = false; |   440     extension->is_repeated = false; | 
|   440   } else { |   441   } else { | 
|   441     GOOGLE_DCHECK_TYPE(*extension, OPTIONAL, ENUM); |   442     GOOGLE_DCHECK_TYPE(*extension, OPTIONAL, ENUM); | 
|   442   } |   443   } | 
|   443   extension->is_cleared = false; |   444   extension->is_cleared = false; | 
|   444   extension->enum_value = value; |   445   extension->enum_value = value; | 
|   445 } |   446 } | 
|   446  |   447  | 
|   447 int ExtensionSet::GetRepeatedEnum(int number, int index) const { |   448 int ExtensionSet::GetRepeatedEnum(int number, int index) const { | 
|   448   map<int, Extension>::const_iterator iter = extensions_.find(number); |   449   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   449   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   450   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   450   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, ENUM); |   451   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, ENUM); | 
|   451   return iter->second.repeated_enum_value->Get(index); |   452   return iter->second.repeated_enum_value->Get(index); | 
|   452 } |   453 } | 
|   453  |   454  | 
|   454 void ExtensionSet::SetRepeatedEnum(int number, int index, int value) { |   455 void ExtensionSet::SetRepeatedEnum(int number, int index, int value) { | 
|   455   map<int, Extension>::iterator iter = extensions_.find(number); |   456   ExtensionMap::iterator iter = extensions_.find(number); | 
|   456   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   457   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   457   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, ENUM); |   458   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, ENUM); | 
|   458   iter->second.repeated_enum_value->Set(index, value); |   459   iter->second.repeated_enum_value->Set(index, value); | 
|   459 } |   460 } | 
|   460  |   461  | 
|   461 void ExtensionSet::AddEnum(int number, FieldType type, |   462 void ExtensionSet::AddEnum(int number, FieldType type, | 
|   462                            bool packed, int value, |   463                            bool packed, int value, | 
|   463                            const FieldDescriptor* descriptor) { |   464                            const FieldDescriptor* descriptor) { | 
|   464   Extension* extension; |   465   Extension* extension; | 
|   465   if (MaybeNewExtension(number, descriptor, &extension)) { |   466   if (MaybeNewExtension(number, descriptor, &extension)) { | 
|   466     extension->type = type; |   467     extension->type = type; | 
|   467     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_ENUM); |   468     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_ENUM); | 
|   468     extension->is_repeated = true; |   469     extension->is_repeated = true; | 
|   469     extension->is_packed = packed; |   470     extension->is_packed = packed; | 
|   470     extension->repeated_enum_value = |   471     extension->repeated_enum_value = | 
|   471         Arena::CreateMessage<RepeatedField<int> >(arena_); |   472         Arena::CreateMessage<RepeatedField<int> >(arena_); | 
|   472   } else { |   473   } else { | 
|   473     GOOGLE_DCHECK_TYPE(*extension, REPEATED, ENUM); |   474     GOOGLE_DCHECK_TYPE(*extension, REPEATED, ENUM); | 
|   474     GOOGLE_DCHECK_EQ(extension->is_packed, packed); |   475     GOOGLE_DCHECK_EQ(extension->is_packed, packed); | 
|   475   } |   476   } | 
|   476   extension->repeated_enum_value->Add(value); |   477   extension->repeated_enum_value->Add(value); | 
|   477 } |   478 } | 
|   478  |   479  | 
|   479 // ------------------------------------------------------------------- |   480 // ------------------------------------------------------------------- | 
|   480 // Strings |   481 // Strings | 
|   481  |   482  | 
|   482 const string& ExtensionSet::GetString(int number, |   483 const string& ExtensionSet::GetString(int number, | 
|   483                                       const string& default_value) const { |   484                                       const string& default_value) const { | 
|   484   map<int, Extension>::const_iterator iter = extensions_.find(number); |   485   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   485   if (iter == extensions_.end() || iter->second.is_cleared) { |   486   if (iter == extensions_.end() || iter->second.is_cleared) { | 
|   486     // Not present.  Return the default value. |   487     // Not present.  Return the default value. | 
|   487     return default_value; |   488     return default_value; | 
|   488   } else { |   489   } else { | 
|   489     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, STRING); |   490     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, STRING); | 
|   490     return *iter->second.string_value; |   491     return *iter->second.string_value; | 
|   491   } |   492   } | 
|   492 } |   493 } | 
|   493  |   494  | 
|   494 string* ExtensionSet::MutableString(int number, FieldType type, |   495 string* ExtensionSet::MutableString(int number, FieldType type, | 
|   495                                     const FieldDescriptor* descriptor) { |   496                                     const FieldDescriptor* descriptor) { | 
|   496   Extension* extension; |   497   Extension* extension; | 
|   497   if (MaybeNewExtension(number, descriptor, &extension)) { |   498   if (MaybeNewExtension(number, descriptor, &extension)) { | 
|   498     extension->type = type; |   499     extension->type = type; | 
|   499     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_STRING); |   500     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_STRING); | 
|   500     extension->is_repeated = false; |   501     extension->is_repeated = false; | 
|   501     extension->string_value = Arena::Create<string>(arena_); |   502     extension->string_value = Arena::Create<string>(arena_); | 
|   502   } else { |   503   } else { | 
|   503     GOOGLE_DCHECK_TYPE(*extension, OPTIONAL, STRING); |   504     GOOGLE_DCHECK_TYPE(*extension, OPTIONAL, STRING); | 
|   504   } |   505   } | 
|   505   extension->is_cleared = false; |   506   extension->is_cleared = false; | 
|   506   return extension->string_value; |   507   return extension->string_value; | 
|   507 } |   508 } | 
|   508  |   509  | 
|   509 const string& ExtensionSet::GetRepeatedString(int number, int index) const { |   510 const string& ExtensionSet::GetRepeatedString(int number, int index) const { | 
|   510   map<int, Extension>::const_iterator iter = extensions_.find(number); |   511   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   511   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   512   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   512   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, STRING); |   513   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, STRING); | 
|   513   return iter->second.repeated_string_value->Get(index); |   514   return iter->second.repeated_string_value->Get(index); | 
|   514 } |   515 } | 
|   515  |   516  | 
|   516 string* ExtensionSet::MutableRepeatedString(int number, int index) { |   517 string* ExtensionSet::MutableRepeatedString(int number, int index) { | 
|   517   map<int, Extension>::iterator iter = extensions_.find(number); |   518   ExtensionMap::iterator iter = extensions_.find(number); | 
|   518   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   519   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   519   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, STRING); |   520   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, STRING); | 
|   520   return iter->second.repeated_string_value->Mutable(index); |   521   return iter->second.repeated_string_value->Mutable(index); | 
|   521 } |   522 } | 
|   522  |   523  | 
|   523 string* ExtensionSet::AddString(int number, FieldType type, |   524 string* ExtensionSet::AddString(int number, FieldType type, | 
|   524                                 const FieldDescriptor* descriptor) { |   525                                 const FieldDescriptor* descriptor) { | 
|   525   Extension* extension; |   526   Extension* extension; | 
|   526   if (MaybeNewExtension(number, descriptor, &extension)) { |   527   if (MaybeNewExtension(number, descriptor, &extension)) { | 
|   527     extension->type = type; |   528     extension->type = type; | 
|   528     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_STRING); |   529     GOOGLE_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_STRING); | 
|   529     extension->is_repeated = true; |   530     extension->is_repeated = true; | 
|   530     extension->is_packed = false; |   531     extension->is_packed = false; | 
|   531     extension->repeated_string_value = |   532     extension->repeated_string_value = | 
|   532         Arena::CreateMessage<RepeatedPtrField<string> >(arena_); |   533         Arena::CreateMessage<RepeatedPtrField<string> >(arena_); | 
|   533   } else { |   534   } else { | 
|   534     GOOGLE_DCHECK_TYPE(*extension, REPEATED, STRING); |   535     GOOGLE_DCHECK_TYPE(*extension, REPEATED, STRING); | 
|   535   } |   536   } | 
|   536   return extension->repeated_string_value->Add(); |   537   return extension->repeated_string_value->Add(); | 
|   537 } |   538 } | 
|   538  |   539  | 
|   539 // ------------------------------------------------------------------- |   540 // ------------------------------------------------------------------- | 
|   540 // Messages |   541 // Messages | 
|   541  |   542  | 
|   542 const MessageLite& ExtensionSet::GetMessage( |   543 const MessageLite& ExtensionSet::GetMessage( | 
|   543     int number, const MessageLite& default_value) const { |   544     int number, const MessageLite& default_value) const { | 
|   544   map<int, Extension>::const_iterator iter = extensions_.find(number); |   545   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   545   if (iter == extensions_.end()) { |   546   if (iter == extensions_.end()) { | 
|   546     // Not present.  Return the default value. |   547     // Not present.  Return the default value. | 
|   547     return default_value; |   548     return default_value; | 
|   548   } else { |   549   } else { | 
|   549     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, MESSAGE); |   550     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, MESSAGE); | 
|   550     if (iter->second.is_lazy) { |   551     if (iter->second.is_lazy) { | 
|   551       return iter->second.lazymessage_value->GetMessage(default_value); |   552       return iter->second.lazymessage_value->GetMessage(default_value); | 
|   552     } else { |   553     } else { | 
|   553       return *iter->second.message_value; |   554       return *iter->second.message_value; | 
|   554     } |   555     } | 
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   657       } |   658       } | 
|   658       extension->message_value = message; |   659       extension->message_value = message; | 
|   659     } |   660     } | 
|   660   } |   661   } | 
|   661   extension->is_cleared = false; |   662   extension->is_cleared = false; | 
|   662 } |   663 } | 
|   663  |   664  | 
|   664  |   665  | 
|   665 MessageLite* ExtensionSet::ReleaseMessage(int number, |   666 MessageLite* ExtensionSet::ReleaseMessage(int number, | 
|   666                                           const MessageLite& prototype) { |   667                                           const MessageLite& prototype) { | 
|   667   map<int, Extension>::iterator iter = extensions_.find(number); |   668   ExtensionMap::iterator iter = extensions_.find(number); | 
|   668   if (iter == extensions_.end()) { |   669   if (iter == extensions_.end()) { | 
|   669     // Not present.  Return NULL. |   670     // Not present.  Return NULL. | 
|   670     return NULL; |   671     return NULL; | 
|   671   } else { |   672   } else { | 
|   672     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, MESSAGE); |   673     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, MESSAGE); | 
|   673     MessageLite* ret = NULL; |   674     MessageLite* ret = NULL; | 
|   674     if (iter->second.is_lazy) { |   675     if (iter->second.is_lazy) { | 
|   675       ret = iter->second.lazymessage_value->ReleaseMessage(prototype); |   676       ret = iter->second.lazymessage_value->ReleaseMessage(prototype); | 
|   676       if (arena_ == NULL) { |   677       if (arena_ == NULL) { | 
|   677         delete iter->second.lazymessage_value; |   678         delete iter->second.lazymessage_value; | 
|   678       } |   679       } | 
|   679     } else { |   680     } else { | 
|   680       if (arena_ == NULL) { |   681       if (arena_ == NULL) { | 
|   681         ret = iter->second.message_value; |   682         ret = iter->second.message_value; | 
|   682       } else { |   683       } else { | 
|   683         // ReleaseMessage() always returns a heap-allocated message, and we are |   684         // ReleaseMessage() always returns a heap-allocated message, and we are | 
|   684         // on an arena, so we need to make a copy of this message to return. |   685         // on an arena, so we need to make a copy of this message to return. | 
|   685         ret = (iter->second.message_value)->New(); |   686         ret = (iter->second.message_value)->New(); | 
|   686         ret->CheckTypeAndMergeFrom(*iter->second.message_value); |   687         ret->CheckTypeAndMergeFrom(*iter->second.message_value); | 
|   687       } |   688       } | 
|   688     } |   689     } | 
|   689     extensions_.erase(number); |   690     extensions_.erase(number); | 
|   690     return ret; |   691     return ret; | 
|   691   } |   692   } | 
|   692 } |   693 } | 
|   693  |   694  | 
|   694 MessageLite* ExtensionSet::UnsafeArenaReleaseMessage( |   695 MessageLite* ExtensionSet::UnsafeArenaReleaseMessage( | 
|   695     int number, const MessageLite& prototype) { |   696     int number, const MessageLite& prototype) { | 
|   696   map<int, Extension>::iterator iter = extensions_.find(number); |   697   ExtensionMap::iterator iter = extensions_.find(number); | 
|   697   if (iter == extensions_.end()) { |   698   if (iter == extensions_.end()) { | 
|   698     // Not present.  Return NULL. |   699     // Not present.  Return NULL. | 
|   699     return NULL; |   700     return NULL; | 
|   700   } else { |   701   } else { | 
|   701     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, MESSAGE); |   702     GOOGLE_DCHECK_TYPE(iter->second, OPTIONAL, MESSAGE); | 
|   702     MessageLite* ret = NULL; |   703     MessageLite* ret = NULL; | 
|   703     if (iter->second.is_lazy) { |   704     if (iter->second.is_lazy) { | 
|   704       ret = |   705       ret = | 
|   705         iter->second.lazymessage_value->UnsafeArenaReleaseMessage(prototype); |   706         iter->second.lazymessage_value->UnsafeArenaReleaseMessage(prototype); | 
|   706       if (arena_ == NULL) { |   707       if (arena_ == NULL) { | 
|   707         delete iter->second.lazymessage_value; |   708         delete iter->second.lazymessage_value; | 
|   708       } |   709       } | 
|   709     } else { |   710     } else { | 
|   710       ret = iter->second.message_value; |   711       ret = iter->second.message_value; | 
|   711     } |   712     } | 
|   712     extensions_.erase(number); |   713     extensions_.erase(number); | 
|   713     return ret; |   714     return ret; | 
|   714   } |   715   } | 
|   715 } |   716 } | 
|   716  |   717  | 
|   717 // Defined in extension_set_heavy.cc. |   718 // Defined in extension_set_heavy.cc. | 
|   718 // MessageLite* ExtensionSet::ReleaseMessage(const FieldDescriptor* descriptor, |   719 // MessageLite* ExtensionSet::ReleaseMessage(const FieldDescriptor* descriptor, | 
|   719 //                                           MessageFactory* factory); |   720 //                                           MessageFactory* factory); | 
|   720  |   721  | 
|   721 const MessageLite& ExtensionSet::GetRepeatedMessage( |   722 const MessageLite& ExtensionSet::GetRepeatedMessage( | 
|   722     int number, int index) const { |   723     int number, int index) const { | 
|   723   map<int, Extension>::const_iterator iter = extensions_.find(number); |   724   ExtensionMap::const_iterator iter = extensions_.find(number); | 
|   724   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   725   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   725   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, MESSAGE); |   726   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, MESSAGE); | 
|   726   return iter->second.repeated_message_value->Get(index); |   727   return iter->second.repeated_message_value->Get(index); | 
|   727 } |   728 } | 
|   728  |   729  | 
|   729 MessageLite* ExtensionSet::MutableRepeatedMessage(int number, int index) { |   730 MessageLite* ExtensionSet::MutableRepeatedMessage(int number, int index) { | 
|   730   map<int, Extension>::iterator iter = extensions_.find(number); |   731   ExtensionMap::iterator iter = extensions_.find(number); | 
|   731   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   732   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   732   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, MESSAGE); |   733   GOOGLE_DCHECK_TYPE(iter->second, REPEATED, MESSAGE); | 
|   733   return iter->second.repeated_message_value->Mutable(index); |   734   return iter->second.repeated_message_value->Mutable(index); | 
|   734 } |   735 } | 
|   735  |   736  | 
|   736 MessageLite* ExtensionSet::AddMessage(int number, FieldType type, |   737 MessageLite* ExtensionSet::AddMessage(int number, FieldType type, | 
|   737                                       const MessageLite& prototype, |   738                                       const MessageLite& prototype, | 
|   738                                       const FieldDescriptor* descriptor) { |   739                                       const FieldDescriptor* descriptor) { | 
|   739   Extension* extension; |   740   Extension* extension; | 
|   740   if (MaybeNewExtension(number, descriptor, &extension)) { |   741   if (MaybeNewExtension(number, descriptor, &extension)) { | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|   759 } |   760 } | 
|   760  |   761  | 
|   761 // Defined in extension_set_heavy.cc. |   762 // Defined in extension_set_heavy.cc. | 
|   762 // MessageLite* ExtensionSet::AddMessage(int number, FieldType type, |   763 // MessageLite* ExtensionSet::AddMessage(int number, FieldType type, | 
|   763 //                                       const Descriptor* message_type, |   764 //                                       const Descriptor* message_type, | 
|   764 //                                       MessageFactory* factory) |   765 //                                       MessageFactory* factory) | 
|   765  |   766  | 
|   766 #undef GOOGLE_DCHECK_TYPE |   767 #undef GOOGLE_DCHECK_TYPE | 
|   767  |   768  | 
|   768 void ExtensionSet::RemoveLast(int number) { |   769 void ExtensionSet::RemoveLast(int number) { | 
|   769   map<int, Extension>::iterator iter = extensions_.find(number); |   770   ExtensionMap::iterator iter = extensions_.find(number); | 
|   770   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   771   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   771  |   772  | 
|   772   Extension* extension = &iter->second; |   773   Extension* extension = &iter->second; | 
|   773   GOOGLE_DCHECK(extension->is_repeated); |   774   GOOGLE_DCHECK(extension->is_repeated); | 
|   774  |   775  | 
|   775   switch(cpp_type(extension->type)) { |   776   switch(cpp_type(extension->type)) { | 
|   776     case WireFormatLite::CPPTYPE_INT32: |   777     case WireFormatLite::CPPTYPE_INT32: | 
|   777       extension->repeated_int32_value->RemoveLast(); |   778       extension->repeated_int32_value->RemoveLast(); | 
|   778       break; |   779       break; | 
|   779     case WireFormatLite::CPPTYPE_INT64: |   780     case WireFormatLite::CPPTYPE_INT64: | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
|   800     case WireFormatLite::CPPTYPE_STRING: |   801     case WireFormatLite::CPPTYPE_STRING: | 
|   801       extension->repeated_string_value->RemoveLast(); |   802       extension->repeated_string_value->RemoveLast(); | 
|   802       break; |   803       break; | 
|   803     case WireFormatLite::CPPTYPE_MESSAGE: |   804     case WireFormatLite::CPPTYPE_MESSAGE: | 
|   804       extension->repeated_message_value->RemoveLast(); |   805       extension->repeated_message_value->RemoveLast(); | 
|   805       break; |   806       break; | 
|   806   } |   807   } | 
|   807 } |   808 } | 
|   808  |   809  | 
|   809 MessageLite* ExtensionSet::ReleaseLast(int number) { |   810 MessageLite* ExtensionSet::ReleaseLast(int number) { | 
|   810   map<int, Extension>::iterator iter = extensions_.find(number); |   811   ExtensionMap::iterator iter = extensions_.find(number); | 
|   811   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   812   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   812  |   813  | 
|   813   Extension* extension = &iter->second; |   814   Extension* extension = &iter->second; | 
|   814   GOOGLE_DCHECK(extension->is_repeated); |   815   GOOGLE_DCHECK(extension->is_repeated); | 
|   815   GOOGLE_DCHECK(cpp_type(extension->type) == WireFormatLite::CPPTYPE_MESSAGE); |   816   GOOGLE_DCHECK(cpp_type(extension->type) == WireFormatLite::CPPTYPE_MESSAGE); | 
|   816   return extension->repeated_message_value->ReleaseLast(); |   817   return extension->repeated_message_value->ReleaseLast(); | 
|   817 } |   818 } | 
|   818  |   819  | 
|   819 void ExtensionSet::SwapElements(int number, int index1, int index2) { |   820 void ExtensionSet::SwapElements(int number, int index1, int index2) { | 
|   820   map<int, Extension>::iterator iter = extensions_.find(number); |   821   ExtensionMap::iterator iter = extensions_.find(number); | 
|   821   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; |   822   GOOGLE_CHECK(iter != extensions_.end()) << "Index out-of-bounds (field is empt
      y)."; | 
|   822  |   823  | 
|   823   Extension* extension = &iter->second; |   824   Extension* extension = &iter->second; | 
|   824   GOOGLE_DCHECK(extension->is_repeated); |   825   GOOGLE_DCHECK(extension->is_repeated); | 
|   825  |   826  | 
|   826   switch(cpp_type(extension->type)) { |   827   switch(cpp_type(extension->type)) { | 
|   827     case WireFormatLite::CPPTYPE_INT32: |   828     case WireFormatLite::CPPTYPE_INT32: | 
|   828       extension->repeated_int32_value->SwapElements(index1, index2); |   829       extension->repeated_int32_value->SwapElements(index1, index2); | 
|   829       break; |   830       break; | 
|   830     case WireFormatLite::CPPTYPE_INT64: |   831     case WireFormatLite::CPPTYPE_INT64: | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|   853       break; |   854       break; | 
|   854     case WireFormatLite::CPPTYPE_MESSAGE: |   855     case WireFormatLite::CPPTYPE_MESSAGE: | 
|   855       extension->repeated_message_value->SwapElements(index1, index2); |   856       extension->repeated_message_value->SwapElements(index1, index2); | 
|   856       break; |   857       break; | 
|   857   } |   858   } | 
|   858 } |   859 } | 
|   859  |   860  | 
|   860 // =================================================================== |   861 // =================================================================== | 
|   861  |   862  | 
|   862 void ExtensionSet::Clear() { |   863 void ExtensionSet::Clear() { | 
|   863   for (map<int, Extension>::iterator iter = extensions_.begin(); |   864   for (ExtensionMap::iterator iter = extensions_.begin(); | 
|   864        iter != extensions_.end(); ++iter) { |   865        iter != extensions_.end(); ++iter) { | 
|   865     iter->second.Clear(); |   866     iter->second.Clear(); | 
|   866   } |   867   } | 
|   867 } |   868 } | 
|   868  |   869  | 
|   869 void ExtensionSet::MergeFrom(const ExtensionSet& other) { |   870 void ExtensionSet::MergeFrom(const ExtensionSet& other) { | 
|   870   for (map<int, Extension>::const_iterator iter = other.extensions_.begin(); |   871   for (ExtensionMap::const_iterator iter = other.extensions_.begin(); | 
|   871        iter != other.extensions_.end(); ++iter) { |   872        iter != other.extensions_.end(); ++iter) { | 
|   872     const Extension& other_extension = iter->second; |   873     const Extension& other_extension = iter->second; | 
|   873     InternalExtensionMergeFrom(iter->first, other_extension); |   874     InternalExtensionMergeFrom(iter->first, other_extension); | 
|   874   } |   875   } | 
|   875 } |   876 } | 
|   876  |   877  | 
|   877 void ExtensionSet::InternalExtensionMergeFrom( |   878 void ExtensionSet::InternalExtensionMergeFrom( | 
|   878   int number, const Extension& other_extension) { |   879   int number, const Extension& other_extension) { | 
|   879   if (other_extension.is_repeated) { |   880   if (other_extension.is_repeated) { | 
|   880     Extension* extension; |   881     Extension* extension; | 
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1024     x->Clear(); |  1025     x->Clear(); | 
|  1025     x->MergeFrom(*this); |  1026     x->MergeFrom(*this); | 
|  1026     Clear(); |  1027     Clear(); | 
|  1027     MergeFrom(extension_set); |  1028     MergeFrom(extension_set); | 
|  1028   } |  1029   } | 
|  1029 } |  1030 } | 
|  1030  |  1031  | 
|  1031 void ExtensionSet::SwapExtension(ExtensionSet* other, |  1032 void ExtensionSet::SwapExtension(ExtensionSet* other, | 
|  1032                                  int number) { |  1033                                  int number) { | 
|  1033   if (this == other) return; |  1034   if (this == other) return; | 
|  1034   map<int, Extension>::iterator this_iter = extensions_.find(number); |  1035   ExtensionMap::iterator this_iter = extensions_.find(number); | 
|  1035   map<int, Extension>::iterator other_iter = other->extensions_.find(number); |  1036   ExtensionMap::iterator other_iter = other->extensions_.find(number); | 
|  1036  |  1037  | 
|  1037   if (this_iter == extensions_.end() && |  1038   if (this_iter == extensions_.end() && | 
|  1038       other_iter == other->extensions_.end()) { |  1039       other_iter == other->extensions_.end()) { | 
|  1039     return; |  1040     return; | 
|  1040   } |  1041   } | 
|  1041  |  1042  | 
|  1042   if (this_iter != extensions_.end() && |  1043   if (this_iter != extensions_.end() && | 
|  1043       other_iter != other->extensions_.end()) { |  1044       other_iter != other->extensions_.end()) { | 
|  1044     if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) { |  1045     if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) { | 
|  1045       using std::swap; |  1046       using std::swap; | 
|  1046       swap(this_iter->second, other_iter->second); |  1047       swap(this_iter->second, other_iter->second); | 
|  1047     } else { |  1048     } else { | 
|  1048       // TODO(cfallin, rohananil): We could further optimize these cases, |  1049       // TODO(cfallin, rohananil): We could further optimize these cases, | 
|  1049       // especially avoid creation of ExtensionSet, and move MergeFrom logic |  1050       // especially avoid creation of ExtensionSet, and move MergeFrom logic | 
|  1050       // into Extensions itself (which takes arena as an argument). |  1051       // into Extensions itself (which takes arena as an argument). | 
|  1051       // We do it this way to reuse the copy-across-arenas logic already |  1052       // We do it this way to reuse the copy-across-arenas logic already | 
|  1052       // implemented in ExtensionSet's MergeFrom. |  1053       // implemented in ExtensionSet's MergeFrom. | 
|  1053       ExtensionSet temp; |  1054       ExtensionSet temp; | 
|  1054       temp.InternalExtensionMergeFrom(number, other_iter->second); |  1055       temp.InternalExtensionMergeFrom(number, other_iter->second); | 
|  1055       map<int, Extension>::iterator temp_iter = temp.extensions_.find(number); |  1056       ExtensionMap::iterator temp_iter = temp.extensions_.find(number); | 
|  1056       other_iter->second.Clear(); |  1057       other_iter->second.Clear(); | 
|  1057       other->InternalExtensionMergeFrom(number, this_iter->second); |  1058       other->InternalExtensionMergeFrom(number, this_iter->second); | 
|  1058       this_iter->second.Clear(); |  1059       this_iter->second.Clear(); | 
|  1059       InternalExtensionMergeFrom(number, temp_iter->second); |  1060       InternalExtensionMergeFrom(number, temp_iter->second); | 
|  1060     } |  1061     } | 
|  1061     return; |  1062     return; | 
|  1062   } |  1063   } | 
|  1063  |  1064  | 
|  1064   if (this_iter == extensions_.end()) { |  1065   if (this_iter == extensions_.end()) { | 
|  1065     if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) { |  1066     if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) { | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|  1078       other->InternalExtensionMergeFrom(number, this_iter->second); |  1079       other->InternalExtensionMergeFrom(number, this_iter->second); | 
|  1079     } |  1080     } | 
|  1080     extensions_.erase(number); |  1081     extensions_.erase(number); | 
|  1081     return; |  1082     return; | 
|  1082   } |  1083   } | 
|  1083 } |  1084 } | 
|  1084  |  1085  | 
|  1085 bool ExtensionSet::IsInitialized() const { |  1086 bool ExtensionSet::IsInitialized() const { | 
|  1086   // Extensions are never required.  However, we need to check that all |  1087   // Extensions are never required.  However, we need to check that all | 
|  1087   // embedded messages are initialized. |  1088   // embedded messages are initialized. | 
|  1088   for (map<int, Extension>::const_iterator iter = extensions_.begin(); |  1089   for (ExtensionMap::const_iterator iter = extensions_.begin(); | 
|  1089        iter != extensions_.end(); ++iter) { |  1090        iter != extensions_.end(); ++iter) { | 
|  1090     const Extension& extension = iter->second; |  1091     const Extension& extension = iter->second; | 
|  1091     if (cpp_type(extension.type) == WireFormatLite::CPPTYPE_MESSAGE) { |  1092     if (cpp_type(extension.type) == WireFormatLite::CPPTYPE_MESSAGE) { | 
|  1092       if (extension.is_repeated) { |  1093       if (extension.is_repeated) { | 
|  1093         for (int i = 0; i < extension.repeated_message_value->size(); i++) { |  1094         for (int i = 0; i < extension.repeated_message_value->size(); i++) { | 
|  1094           if (!extension.repeated_message_value->Get(i).IsInitialized()) { |  1095           if (!extension.repeated_message_value->Get(i).IsInitialized()) { | 
|  1095             return false; |  1096             return false; | 
|  1096           } |  1097           } | 
|  1097         } |  1098         } | 
|  1098       } else { |  1099       } else { | 
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1338 //                               UnknownFieldSet* unknown_fields) |  1339 //                               UnknownFieldSet* unknown_fields) | 
|  1339  |  1340  | 
|  1340 // Defined in extension_set_heavy.cc. |  1341 // Defined in extension_set_heavy.cc. | 
|  1341 // bool ExtensionSet::ParseMessageSet(io::CodedInputStream* input, |  1342 // bool ExtensionSet::ParseMessageSet(io::CodedInputStream* input, | 
|  1342 //                                    const MessageLite* containing_type, |  1343 //                                    const MessageLite* containing_type, | 
|  1343 //                                    UnknownFieldSet* unknown_fields); |  1344 //                                    UnknownFieldSet* unknown_fields); | 
|  1344  |  1345  | 
|  1345 void ExtensionSet::SerializeWithCachedSizes( |  1346 void ExtensionSet::SerializeWithCachedSizes( | 
|  1346     int start_field_number, int end_field_number, |  1347     int start_field_number, int end_field_number, | 
|  1347     io::CodedOutputStream* output) const { |  1348     io::CodedOutputStream* output) const { | 
|  1348   map<int, Extension>::const_iterator iter; |  1349   ExtensionMap::const_iterator iter; | 
|  1349   for (iter = extensions_.lower_bound(start_field_number); |  1350   for (iter = extensions_.lower_bound(start_field_number); | 
|  1350        iter != extensions_.end() && iter->first < end_field_number; |  1351        iter != extensions_.end() && iter->first < end_field_number; | 
|  1351        ++iter) { |  1352        ++iter) { | 
|  1352     iter->second.SerializeFieldWithCachedSizes(iter->first, output); |  1353     iter->second.SerializeFieldWithCachedSizes(iter->first, output); | 
|  1353   } |  1354   } | 
|  1354 } |  1355 } | 
|  1355  |  1356  | 
|  1356 int ExtensionSet::ByteSize() const { |  1357 size_t ExtensionSet::ByteSize() const { | 
|  1357   int total_size = 0; |  1358   size_t total_size = 0; | 
|  1358  |  1359  | 
|  1359   for (map<int, Extension>::const_iterator iter = extensions_.begin(); |  1360   for (ExtensionMap::const_iterator iter = extensions_.begin(); | 
|  1360        iter != extensions_.end(); ++iter) { |  1361        iter != extensions_.end(); ++iter) { | 
|  1361     total_size += iter->second.ByteSize(iter->first); |  1362     total_size += iter->second.ByteSize(iter->first); | 
|  1362   } |  1363   } | 
|  1363  |  1364  | 
|  1364   return total_size; |  1365   return total_size; | 
|  1365 } |  1366 } | 
|  1366  |  1367  | 
|  1367 // Defined in extension_set_heavy.cc. |  1368 // Defined in extension_set_heavy.cc. | 
|  1368 // int ExtensionSet::SpaceUsedExcludingSelf() const |  1369 // int ExtensionSet::SpaceUsedExcludingSelf() const | 
|  1369  |  1370  | 
|  1370 bool ExtensionSet::MaybeNewExtension(int number, |  1371 bool ExtensionSet::MaybeNewExtension(int number, | 
|  1371                                      const FieldDescriptor* descriptor, |  1372                                      const FieldDescriptor* descriptor, | 
|  1372                                      Extension** result) { |  1373                                      Extension** result) { | 
|  1373   pair<map<int, Extension>::iterator, bool> insert_result = |  1374   pair<ExtensionMap::iterator, bool> insert_result = | 
|  1374       extensions_.insert(std::make_pair(number, Extension())); |  1375       extensions_.insert(std::make_pair(number, Extension())); | 
|  1375   *result = &insert_result.first->second; |  1376   *result = &insert_result.first->second; | 
|  1376   (*result)->descriptor = descriptor; |  1377   (*result)->descriptor = descriptor; | 
|  1377   return insert_result.second; |  1378   return insert_result.second; | 
|  1378 } |  1379 } | 
|  1379  |  1380  | 
|  1380 // =================================================================== |  1381 // =================================================================== | 
|  1381 // Methods of ExtensionSet::Extension |  1382 // Methods of ExtensionSet::Extension | 
|  1382  |  1383  | 
|  1383 void ExtensionSet::Extension::Clear() { |  1384 void ExtensionSet::Extension::Clear() { | 
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1528         if (is_lazy) { |  1529         if (is_lazy) { | 
|  1529           lazymessage_value->WriteMessage(number, output); |  1530           lazymessage_value->WriteMessage(number, output); | 
|  1530         } else { |  1531         } else { | 
|  1531           WireFormatLite::WriteMessage(number, *message_value, output); |  1532           WireFormatLite::WriteMessage(number, *message_value, output); | 
|  1532         } |  1533         } | 
|  1533         break; |  1534         break; | 
|  1534     } |  1535     } | 
|  1535   } |  1536   } | 
|  1536 } |  1537 } | 
|  1537  |  1538  | 
|  1538 int ExtensionSet::Extension::ByteSize(int number) const { |  1539 size_t ExtensionSet::Extension::ByteSize(int number) const { | 
|  1539   int result = 0; |  1540   size_t result = 0; | 
|  1540  |  1541  | 
|  1541   if (is_repeated) { |  1542   if (is_repeated) { | 
|  1542     if (is_packed) { |  1543     if (is_packed) { | 
|  1543       switch (real_type(type)) { |  1544       switch (real_type(type)) { | 
|  1544 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ |  1545 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ | 
|  1545         case WireFormatLite::TYPE_##UPPERCASE:                              \ |  1546         case WireFormatLite::TYPE_##UPPERCASE:                              \ | 
|  1546           for (int i = 0; i < repeated_##LOWERCASE##_value->size(); i++) {  \ |  1547           for (int i = 0; i < repeated_##LOWERCASE##_value->size(); i++) {  \ | 
|  1547             result += WireFormatLite::CAMELCASE##Size(                      \ |  1548             result += WireFormatLite::CAMELCASE##Size(                      \ | 
|  1548               repeated_##LOWERCASE##_value->Get(i));                        \ |  1549               repeated_##LOWERCASE##_value->Get(i));                        \ | 
|  1549           }                                                                 \ |  1550           }                                                                 \ | 
|  1550           break |  1551           break | 
|  1551  |  1552  | 
|  1552         HANDLE_TYPE(   INT32,    Int32,   int32); |  1553         HANDLE_TYPE(   INT32,    Int32,   int32); | 
|  1553         HANDLE_TYPE(   INT64,    Int64,   int64); |  1554         HANDLE_TYPE(   INT64,    Int64,   int64); | 
|  1554         HANDLE_TYPE(  UINT32,   UInt32,  uint32); |  1555         HANDLE_TYPE(  UINT32,   UInt32,  uint32); | 
|  1555         HANDLE_TYPE(  UINT64,   UInt64,  uint64); |  1556         HANDLE_TYPE(  UINT64,   UInt64,  uint64); | 
|  1556         HANDLE_TYPE(  SINT32,   SInt32,   int32); |  1557         HANDLE_TYPE(  SINT32,   SInt32,   int32); | 
|  1557         HANDLE_TYPE(  SINT64,   SInt64,   int64); |  1558         HANDLE_TYPE(  SINT64,   SInt64,   int64); | 
|  1558         HANDLE_TYPE(    ENUM,     Enum,    enum); |  1559         HANDLE_TYPE(    ENUM,     Enum,    enum); | 
|  1559 #undef HANDLE_TYPE |  1560 #undef HANDLE_TYPE | 
|  1560  |  1561  | 
|  1561         // Stuff with fixed size. |  1562         // Stuff with fixed size. | 
|  1562 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ |  1563 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ | 
|  1563         case WireFormatLite::TYPE_##UPPERCASE:                              \ |  1564         case WireFormatLite::TYPE_##UPPERCASE:                              \ | 
|  1564           result += WireFormatLite::k##CAMELCASE##Size *                    \ |  1565           result += WireFormatLite::k##CAMELCASE##Size *                    \ | 
|  1565                     repeated_##LOWERCASE##_value->size();                   \ |  1566                     FromIntSize(repeated_##LOWERCASE##_value->size());      \ | 
|  1566           break |  1567           break | 
|  1567         HANDLE_TYPE( FIXED32,  Fixed32, uint32); |  1568         HANDLE_TYPE( FIXED32,  Fixed32, uint32); | 
|  1568         HANDLE_TYPE( FIXED64,  Fixed64, uint64); |  1569         HANDLE_TYPE( FIXED64,  Fixed64, uint64); | 
|  1569         HANDLE_TYPE(SFIXED32, SFixed32,  int32); |  1570         HANDLE_TYPE(SFIXED32, SFixed32,  int32); | 
|  1570         HANDLE_TYPE(SFIXED64, SFixed64,  int64); |  1571         HANDLE_TYPE(SFIXED64, SFixed64,  int64); | 
|  1571         HANDLE_TYPE(   FLOAT,    Float,  float); |  1572         HANDLE_TYPE(   FLOAT,    Float,  float); | 
|  1572         HANDLE_TYPE(  DOUBLE,   Double, double); |  1573         HANDLE_TYPE(  DOUBLE,   Double, double); | 
|  1573         HANDLE_TYPE(    BOOL,     Bool,   bool); |  1574         HANDLE_TYPE(    BOOL,     Bool,   bool); | 
|  1574 #undef HANDLE_TYPE |  1575 #undef HANDLE_TYPE | 
|  1575  |  1576  | 
|  1576         case WireFormatLite::TYPE_STRING: |  1577         case WireFormatLite::TYPE_STRING: | 
|  1577         case WireFormatLite::TYPE_BYTES: |  1578         case WireFormatLite::TYPE_BYTES: | 
|  1578         case WireFormatLite::TYPE_GROUP: |  1579         case WireFormatLite::TYPE_GROUP: | 
|  1579         case WireFormatLite::TYPE_MESSAGE: |  1580         case WireFormatLite::TYPE_MESSAGE: | 
|  1580           GOOGLE_LOG(FATAL) << "Non-primitive types can't be packed."; |  1581           GOOGLE_LOG(FATAL) << "Non-primitive types can't be packed."; | 
|  1581           break; |  1582           break; | 
|  1582       } |  1583       } | 
|  1583  |  1584  | 
|  1584       cached_size = result; |  1585       cached_size = ToCachedSize(result); | 
|  1585       if (result > 0) { |  1586       if (result > 0) { | 
|  1586         result += io::CodedOutputStream::VarintSize32(result); |  1587         result += io::CodedOutputStream::VarintSize32(result); | 
|  1587         result += io::CodedOutputStream::VarintSize32( |  1588         result += io::CodedOutputStream::VarintSize32( | 
|  1588             WireFormatLite::MakeTag(number, |  1589             WireFormatLite::MakeTag(number, | 
|  1589                 WireFormatLite::WIRETYPE_LENGTH_DELIMITED)); |  1590                 WireFormatLite::WIRETYPE_LENGTH_DELIMITED)); | 
|  1590       } |  1591       } | 
|  1591     } else { |  1592     } else { | 
|  1592       int tag_size = WireFormatLite::TagSize(number, real_type(type)); |  1593       size_t tag_size = WireFormatLite::TagSize(number, real_type(type)); | 
|  1593  |  1594  | 
|  1594       switch (real_type(type)) { |  1595       switch (real_type(type)) { | 
|  1595 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ |  1596 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ | 
|  1596         case WireFormatLite::TYPE_##UPPERCASE:                              \ |  1597         case WireFormatLite::TYPE_##UPPERCASE:                              \ | 
|  1597           result += tag_size * repeated_##LOWERCASE##_value->size();        \ |  1598           result += tag_size *                                              \ | 
 |  1599                     FromIntSize(repeated_##LOWERCASE##_value->size());      \ | 
|  1598           for (int i = 0; i < repeated_##LOWERCASE##_value->size(); i++) {  \ |  1600           for (int i = 0; i < repeated_##LOWERCASE##_value->size(); i++) {  \ | 
|  1599             result += WireFormatLite::CAMELCASE##Size(                      \ |  1601             result += WireFormatLite::CAMELCASE##Size(                      \ | 
|  1600               repeated_##LOWERCASE##_value->Get(i));                        \ |  1602               repeated_##LOWERCASE##_value->Get(i));                        \ | 
|  1601           }                                                                 \ |  1603           }                                                                 \ | 
|  1602           break |  1604           break | 
|  1603  |  1605  | 
|  1604         HANDLE_TYPE(   INT32,    Int32,   int32); |  1606         HANDLE_TYPE(   INT32,    Int32,   int32); | 
|  1605         HANDLE_TYPE(   INT64,    Int64,   int64); |  1607         HANDLE_TYPE(   INT64,    Int64,   int64); | 
|  1606         HANDLE_TYPE(  UINT32,   UInt32,  uint32); |  1608         HANDLE_TYPE(  UINT32,   UInt32,  uint32); | 
|  1607         HANDLE_TYPE(  UINT64,   UInt64,  uint64); |  1609         HANDLE_TYPE(  UINT64,   UInt64,  uint64); | 
|  1608         HANDLE_TYPE(  SINT32,   SInt32,   int32); |  1610         HANDLE_TYPE(  SINT32,   SInt32,   int32); | 
|  1609         HANDLE_TYPE(  SINT64,   SInt64,   int64); |  1611         HANDLE_TYPE(  SINT64,   SInt64,   int64); | 
|  1610         HANDLE_TYPE(  STRING,   String,  string); |  1612         HANDLE_TYPE(  STRING,   String,  string); | 
|  1611         HANDLE_TYPE(   BYTES,    Bytes,  string); |  1613         HANDLE_TYPE(   BYTES,    Bytes,  string); | 
|  1612         HANDLE_TYPE(    ENUM,     Enum,    enum); |  1614         HANDLE_TYPE(    ENUM,     Enum,    enum); | 
|  1613         HANDLE_TYPE(   GROUP,    Group, message); |  1615         HANDLE_TYPE(   GROUP,    Group, message); | 
|  1614         HANDLE_TYPE( MESSAGE,  Message, message); |  1616         HANDLE_TYPE( MESSAGE,  Message, message); | 
|  1615 #undef HANDLE_TYPE |  1617 #undef HANDLE_TYPE | 
|  1616  |  1618  | 
|  1617         // Stuff with fixed size. |  1619         // Stuff with fixed size. | 
|  1618 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ |  1620 #define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                        \ | 
|  1619         case WireFormatLite::TYPE_##UPPERCASE:                              \ |  1621         case WireFormatLite::TYPE_##UPPERCASE:                              \ | 
|  1620           result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *       \ |  1622           result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *       \ | 
|  1621                     repeated_##LOWERCASE##_value->size();                   \ |  1623                     FromIntSize(repeated_##LOWERCASE##_value->size());      \ | 
|  1622           break |  1624           break | 
|  1623         HANDLE_TYPE( FIXED32,  Fixed32, uint32); |  1625         HANDLE_TYPE( FIXED32,  Fixed32, uint32); | 
|  1624         HANDLE_TYPE( FIXED64,  Fixed64, uint64); |  1626         HANDLE_TYPE( FIXED64,  Fixed64, uint64); | 
|  1625         HANDLE_TYPE(SFIXED32, SFixed32,  int32); |  1627         HANDLE_TYPE(SFIXED32, SFixed32,  int32); | 
|  1626         HANDLE_TYPE(SFIXED64, SFixed64,  int64); |  1628         HANDLE_TYPE(SFIXED64, SFixed64,  int64); | 
|  1627         HANDLE_TYPE(   FLOAT,    Float,  float); |  1629         HANDLE_TYPE(   FLOAT,    Float,  float); | 
|  1628         HANDLE_TYPE(  DOUBLE,   Double, double); |  1630         HANDLE_TYPE(  DOUBLE,   Double, double); | 
|  1629         HANDLE_TYPE(    BOOL,     Bool,   bool); |  1631         HANDLE_TYPE(    BOOL,     Bool,   bool); | 
|  1630 #undef HANDLE_TYPE |  1632 #undef HANDLE_TYPE | 
|  1631       } |  1633       } | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|  1644       HANDLE_TYPE(  UINT64,   UInt64,   uint64_value); |  1646       HANDLE_TYPE(  UINT64,   UInt64,   uint64_value); | 
|  1645       HANDLE_TYPE(  SINT32,   SInt32,    int32_value); |  1647       HANDLE_TYPE(  SINT32,   SInt32,    int32_value); | 
|  1646       HANDLE_TYPE(  SINT64,   SInt64,    int64_value); |  1648       HANDLE_TYPE(  SINT64,   SInt64,    int64_value); | 
|  1647       HANDLE_TYPE(  STRING,   String,  *string_value); |  1649       HANDLE_TYPE(  STRING,   String,  *string_value); | 
|  1648       HANDLE_TYPE(   BYTES,    Bytes,  *string_value); |  1650       HANDLE_TYPE(   BYTES,    Bytes,  *string_value); | 
|  1649       HANDLE_TYPE(    ENUM,     Enum,     enum_value); |  1651       HANDLE_TYPE(    ENUM,     Enum,     enum_value); | 
|  1650       HANDLE_TYPE(   GROUP,    Group, *message_value); |  1652       HANDLE_TYPE(   GROUP,    Group, *message_value); | 
|  1651 #undef HANDLE_TYPE |  1653 #undef HANDLE_TYPE | 
|  1652       case WireFormatLite::TYPE_MESSAGE: { |  1654       case WireFormatLite::TYPE_MESSAGE: { | 
|  1653         if (is_lazy) { |  1655         if (is_lazy) { | 
|  1654           int size = lazymessage_value->ByteSize(); |  1656           size_t size = lazymessage_value->ByteSize(); | 
|  1655           result += io::CodedOutputStream::VarintSize32(size) + size; |  1657           result += io::CodedOutputStream::VarintSize32(size) + size; | 
|  1656         } else { |  1658         } else { | 
|  1657           result += WireFormatLite::MessageSize(*message_value); |  1659           result += WireFormatLite::MessageSize(*message_value); | 
|  1658         } |  1660         } | 
|  1659         break; |  1661         break; | 
|  1660       } |  1662       } | 
|  1661  |  1663  | 
|  1662       // Stuff with fixed size. |  1664       // Stuff with fixed size. | 
|  1663 #define HANDLE_TYPE(UPPERCASE, CAMELCASE)                                 \ |  1665 #define HANDLE_TYPE(UPPERCASE, CAMELCASE)                                 \ | 
|  1664       case WireFormatLite::TYPE_##UPPERCASE:                              \ |  1666       case WireFormatLite::TYPE_##UPPERCASE:                              \ | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1806 const RepeatedField<bool>* |  1808 const RepeatedField<bool>* | 
|  1807 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = NULL; |  1809 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = NULL; | 
|  1808 const RepeatedStringTypeTraits::RepeatedFieldType* |  1810 const RepeatedStringTypeTraits::RepeatedFieldType* | 
|  1809 RepeatedStringTypeTraits::default_repeated_field_ = NULL; |  1811 RepeatedStringTypeTraits::default_repeated_field_ = NULL; | 
|  1810 const RepeatedMessageGenericTypeTraits::RepeatedFieldType* |  1812 const RepeatedMessageGenericTypeTraits::RepeatedFieldType* | 
|  1811 RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL; |  1813 RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL; | 
|  1812  |  1814  | 
|  1813 }  // namespace internal |  1815 }  // namespace internal | 
|  1814 }  // namespace protobuf |  1816 }  // namespace protobuf | 
|  1815 }  // namespace google |  1817 }  // namespace google | 
| OLD | NEW |