diff --git a/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.h b/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.h index b5919203e5..879572ebe1 100644 --- a/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.h +++ b/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.h @@ -88,25 +88,26 @@ J2OBJC_EMPTY_STATIC_INIT(ComGoogleProtobufGeneratedMessage_Builder) J2OBJC_TYPE_LITERAL_HEADER(ComGoogleProtobufGeneratedMessage_Builder) -@protocol ComGoogleProtobufGeneratedMessage_ExtendableMessageOrBuilder - +@protocol + ComGoogleProtobufGeneratedMessage_ExtendableMessageOrBuilder - (bool)hasExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension; - (bool)hasExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension; - (bool)hasExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: (CGPGeneratedExtension *)extension; -- (id)getExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension; +- (id)getExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension; - (id)getExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension; - (id)getExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: (CGPGeneratedExtension *)extension; -- (id)getExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withInt:(jint)index; +- (id)getExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withInt:(jint)index; - (id)getExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withInt:(jint)index; - (id)getExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withInt:(jint)index; + (CGPGeneratedExtension *)extension + withInt:(jint)index; - (jint)getExtensionCountWithComGoogleProtobufExtensionLite: (ComGoogleProtobufExtensionLite *)extension; @@ -120,39 +121,44 @@ J2OBJC_EMPTY_STATIC_INIT(ComGoogleProtobufGeneratedMessage_ExtendableMessageOrBu J2OBJC_TYPE_LITERAL_HEADER(ComGoogleProtobufGeneratedMessage_ExtendableMessageOrBuilder) -@interface ComGoogleProtobufGeneratedMessage_ExtendableMessage : - ComGoogleProtobufGeneratedMessage +@interface ComGoogleProtobufGeneratedMessage_ExtendableMessage + : ComGoogleProtobufGeneratedMessage < + ComGoogleProtobufGeneratedMessage_ExtendableMessageOrBuilder> @end J2OBJC_EMPTY_STATIC_INIT(ComGoogleProtobufGeneratedMessage_ExtendableMessage) J2OBJC_TYPE_LITERAL_HEADER(ComGoogleProtobufGeneratedMessage_ExtendableMessage) -@interface ComGoogleProtobufGeneratedMessage_ExtendableBuilder : - ComGoogleProtobufGeneratedMessage_Builder - +@interface ComGoogleProtobufGeneratedMessage_ExtendableBuilder + : ComGoogleProtobufGeneratedMessage_Builder < + ComGoogleProtobufGeneratedMessage_ExtendableMessageOrBuilder> -- (id)setExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withId:(id)value; -- (id)setExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withInt:(jint)index withId:(id)value; +- (id)setExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withId:(id)value; +- (id)setExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withInt:(jint)index + withId:(id)value; - (id)setExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withId:(id)value; - (id)setExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withInt:(jint)index withId:(id)value; - (id)setExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withId:(id)value; + (CGPGeneratedExtension *)extension + withId:(id)value; - (id)setExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withInt:(jint)index withId:(id)value; + (CGPGeneratedExtension *)extension + withInt:(jint)index + withId:(id)value; -- (id)addExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withId:(id)value; +- (id)addExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withId:(id)value; - (id)addExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withId:(id)value; - (id)addExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withId:(id)value; + (CGPGeneratedExtension *)extension + withId:(id)value; -- (id)clearExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension; +- (id)clearExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension; - (id)clearExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension; - (id)clearExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: (CGPGeneratedExtension *)extension; @@ -170,4 +176,4 @@ J2OBJC_EMPTY_STATIC_INIT(ComGoogleProtobufGeneratedMessage_GeneratedExtension) J2OBJC_TYPE_LITERAL_HEADER(ComGoogleProtobufGeneratedMessage_GeneratedExtension) -#endif // __ComGoogleProtobufGeneratedMessage_H__ +#endif // __ComGoogleProtobufGeneratedMessage_H__ diff --git a/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.mm b/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.mm index 551425dda9..039d0e69c1 100644 --- a/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.mm +++ b/protobuf/runtime/src/com/google/protobuf/GeneratedMessage.mm @@ -80,30 +80,28 @@ typedef std::map CGPExtensionMap; -static void MergeFromMessage( - id msg, CGPExtensionMap *msgExtensionMap, id other, CGPExtensionMap *otherExtensionMap, - CGPDescriptor *descriptor); -static BOOL MergeFromStream( - id msg, CGPDescriptor *descriptor, CGPCodedInputStream *stream, - CGPExtensionRegistryLite *registry, CGPExtensionMap *extensionMap); -static inline int SerializedSizeForMessage( - ComGoogleProtobufGeneratedMessage *msg, CGPDescriptor *descriptor); +static void MergeFromMessage(id msg, CGPExtensionMap *msgExtensionMap, id other, + CGPExtensionMap *otherExtensionMap, CGPDescriptor *descriptor); +static BOOL MergeFromStream(id msg, CGPDescriptor *descriptor, CGPCodedInputStream *stream, + CGPExtensionRegistryLite *registry, CGPExtensionMap *extensionMap); +static inline int SerializedSizeForMessage(ComGoogleProtobufGeneratedMessage *msg, + CGPDescriptor *descriptor); static void WriteMessage(id msg, CGPDescriptor *descriptor, CGPCodedOutputStream *output); -static void MessageToString( - id msg, CGPDescriptor *descriptor, NSMutableString *builder, int indent); +static void MessageToString(id msg, CGPDescriptor *descriptor, NSMutableString *builder, + int indent); -#define REPEATED_PRIMITIVE_FIELD_GETTER_IMP(NAME) \ - CGP_ALWAYS_INLINE inline TYPE_##NAME CGPRepeatedFieldGet##NAME( \ - CGPRepeatedField *field, jint idx) { \ - CGPRepeatedFieldCheckBounds(field, idx); \ - return ((TYPE_##NAME *)field->data->buffer)[idx]; \ +#define REPEATED_PRIMITIVE_FIELD_GETTER_IMP(NAME) \ + CGP_ALWAYS_INLINE inline TYPE_##NAME CGPRepeatedFieldGet##NAME(CGPRepeatedField *field, \ + jint idx) { \ + CGPRepeatedFieldCheckBounds(field, idx); \ + return ((TYPE_##NAME *)field->data->buffer)[idx]; \ } -#define REPEATED_RETAINABLE_FIELD_GETTER_IMP(NAME) \ - CGP_ALWAYS_INLINE inline TYPE_##NAME CGPRepeatedFieldGet##NAME( \ - CGPRepeatedField *field, jint idx) { \ - CGPRepeatedFieldCheckBounds(field, idx); \ - return RETAIN_AND_AUTORELEASE(((TYPE_##NAME *)field->data->buffer)[idx]); \ +#define REPEATED_RETAINABLE_FIELD_GETTER_IMP(NAME) \ + CGP_ALWAYS_INLINE inline TYPE_##NAME CGPRepeatedFieldGet##NAME(CGPRepeatedField *field, \ + jint idx) { \ + CGPRepeatedFieldCheckBounds(field, idx); \ + return RETAIN_AND_AUTORELEASE(((TYPE_##NAME *)field->data->buffer)[idx]); \ } FOR_EACH_TYPE_NO_ENUM(REPEATED_PRIMITIVE_FIELD_GETTER_IMP, REPEATED_RETAINABLE_FIELD_GETTER_IMP) @@ -111,13 +109,13 @@ static void MessageToString( #undef REPEATED_PRIMITIVE_FIELD_GETTER_IMP #undef REPEATED_RETAINABLE_FIELD_GETTER_IMP -#define REPEATED_FIELD_ADDER_IMP(NAME) \ - CGP_ALWAYS_INLINE inline void CGPRepeatedFieldAdd##NAME( \ - CGPRepeatedField *field, TYPE_##NAME value) { \ - uint32_t total_size = CGPRepeatedFieldTotalSize(field); \ - if (CGPRepeatedFieldSize(field) == total_size) { \ - CGPRepeatedFieldReserve(field, total_size + 1, sizeof(TYPE_##NAME)); \ - } \ +#define REPEATED_FIELD_ADDER_IMP(NAME) \ + CGP_ALWAYS_INLINE inline void CGPRepeatedFieldAdd##NAME(CGPRepeatedField *field, \ + TYPE_##NAME value) { \ + uint32_t total_size = CGPRepeatedFieldTotalSize(field); \ + if (CGPRepeatedFieldSize(field) == total_size) { \ + CGPRepeatedFieldReserve(field, total_size + 1, sizeof(TYPE_##NAME)); \ + } \ ((TYPE_##NAME *)field->data->buffer)[field->data->size++] = TYPE_RETAIN_##NAME(value); \ } @@ -125,13 +123,13 @@ static void MessageToString( #undef REPEATED_FIELD_ADDER_IMP -#define REPEATED_FIELD_SETTER_IMP(NAME) \ - CGP_ALWAYS_INLINE inline void CGPRepeatedFieldSet##NAME( \ - CGPRepeatedField *field, jint idx, TYPE_##NAME value) { \ - CGPRepeatedFieldCheckBounds(field, idx); \ - TYPE_##NAME *ptr = &((TYPE_##NAME *)field->data->buffer)[idx]; \ - TYPE_ASSIGN_##NAME(*ptr, value); \ - } \ +#define REPEATED_FIELD_SETTER_IMP(NAME) \ + CGP_ALWAYS_INLINE inline void CGPRepeatedFieldSet##NAME(CGPRepeatedField *field, jint idx, \ + TYPE_##NAME value) { \ + CGPRepeatedFieldCheckBounds(field, idx); \ + TYPE_##NAME *ptr = &((TYPE_##NAME *)field->data->buffer)[idx]; \ + TYPE_ASSIGN_##NAME(*ptr, value); \ + } FOR_EACH_TYPE_WITH_ENUM(REPEATED_FIELD_SETTER_IMP) @@ -153,9 +151,7 @@ static void MessageToString( } } - ~CGPExtensionValue() { - AUTORELEASE(value_); - } + ~CGPExtensionValue() { AUTORELEASE(value_); } id get() { return value_; } @@ -169,13 +165,9 @@ void set_retained(id __attribute__((ns_consumed)) retainedValue) { value_ = retainedValue; } - bool operator==(const CGPExtensionValue &other) const { - return [value_ isEqual:other.value_]; - } + bool operator==(const CGPExtensionValue &other) const { return [value_ isEqual:other.value_]; } - bool operator!=(const CGPExtensionValue &other) const { - return !(*this == other); - } + bool operator!=(const CGPExtensionValue &other) const { return !(*this == other); } private: id value_; @@ -201,13 +193,15 @@ @interface ComGoogleProtobufGeneratedMessage_ExtendableBuilder () { @end static inline CGPExtensionMap *MessageExtensionMap(id msg, CGPDescriptor *descriptor) { - return CGPIsExtendable(descriptor) ? - &((ComGoogleProtobufGeneratedMessage_ExtendableMessage *)msg)->extensionMap_ : NULL; + return CGPIsExtendable(descriptor) + ? &((ComGoogleProtobufGeneratedMessage_ExtendableMessage *)msg)->extensionMap_ + : NULL; } static inline CGPExtensionMap *BuilderExtensionMap(id msg, CGPDescriptor *descriptor) { - return CGPIsExtendable(descriptor) ? - &((ComGoogleProtobufGeneratedMessage_ExtendableBuilder *)msg)->extensionMap_ : NULL; + return CGPIsExtendable(descriptor) + ? &((ComGoogleProtobufGeneratedMessage_ExtendableBuilder *)msg)->extensionMap_ + : NULL; } // This struct describes how to access a field's "has" state. For regular @@ -315,17 +309,18 @@ static inline BOOL ClearPreviousOneof(id msg, CGPHasLocator loc, uintptr_t ptr) #define MAP_FIELD_PTR(msg, offset) ((CGPMapField *)((uint8_t *)msg + offset)) #define FIELD_PTR(TYPE, msg, offset) ((TYPE *)((uint8_t *)msg + offset)) -#define SINGULAR_SETTER_IMP(NAME) \ +#define SINGULAR_SETTER_IMP(NAME) \ static void SingularSet##NAME(id msg, TYPE_##NAME value, size_t offset, CGPHasLocator hasLoc) { \ - TYPE_##NAME *ptr = FIELD_PTR(TYPE_##NAME, msg, offset); \ - ClearPreviousOneof(msg, hasLoc, (uintptr_t)ptr); \ - TYPE_ASSIGN_##NAME(*ptr, value); \ - SetHas(msg, hasLoc); \ + TYPE_##NAME *ptr = FIELD_PTR(TYPE_##NAME, msg, offset); \ + ClearPreviousOneof(msg, hasLoc, (uintptr_t)ptr); \ + TYPE_ASSIGN_##NAME(*ptr, value); \ + SetHas(msg, hasLoc); \ } FOR_EACH_TYPE_NO_RETAINABLE(SINGULAR_SETTER_IMP) -static void SingularSetRetainable(id msg, TYPE_Retainable value, size_t offset, CGPHasLocator hasLoc) { +static void SingularSetRetainable(id msg, TYPE_Retainable value, size_t offset, + CGPHasLocator hasLoc) { TYPE_Retainable *ptr = FIELD_PTR(TYPE_Retainable, msg, offset); if (!ClearPreviousOneof(msg, hasLoc, (uintptr_t)ptr)) { // If it is not a one of field, we need to release the previous value. @@ -338,31 +333,30 @@ static void SingularSetRetainable(id msg, TYPE_Retainable value, size_t offset, #undef SINGULAR_SETTER_IMP - // ***************************************************************************** // ********** Dynamic field accessors ****************************************** // ***************************************************************************** -#define SINGULAR_PRIMITIVE_GETTER_IMP(NAME) \ - static IMP GetSingularGetterImp##NAME( \ - size_t offset, CGPHasLocator hasLoc, TYPE_##NAME defaultValue) { \ - return imp_implementationWithBlock(^TYPE_##NAME(id msg) { \ - if (GetHas(msg, hasLoc)) { \ - return *FIELD_PTR(TYPE_##NAME, msg, offset); \ - } \ - return defaultValue; \ - }); \ - } - -#define SINGULAR_RETAINABLE_GETTER_IMP(NAME) \ - static IMP GetSingularGetterImp##NAME( \ - size_t offset, CGPHasLocator hasLoc, TYPE_##NAME defaultValue) { \ - return imp_implementationWithBlock(^TYPE_##NAME(id msg) { \ - if (GetHas(msg, hasLoc)) { \ +#define SINGULAR_PRIMITIVE_GETTER_IMP(NAME) \ + static IMP GetSingularGetterImp##NAME(size_t offset, CGPHasLocator hasLoc, \ + TYPE_##NAME defaultValue) { \ + return imp_implementationWithBlock(^TYPE_##NAME(id msg) { \ + if (GetHas(msg, hasLoc)) { \ + return *FIELD_PTR(TYPE_##NAME, msg, offset); \ + } \ + return defaultValue; \ + }); \ + } + +#define SINGULAR_RETAINABLE_GETTER_IMP(NAME) \ + static IMP GetSingularGetterImp##NAME(size_t offset, CGPHasLocator hasLoc, \ + TYPE_##NAME defaultValue) { \ + return imp_implementationWithBlock(^TYPE_##NAME(id msg) { \ + if (GetHas(msg, hasLoc)) { \ return RETAIN_AND_AUTORELEASE(*FIELD_PTR(TYPE_##NAME, msg, offset)); \ - } \ - return defaultValue; \ - }); \ + } \ + return defaultValue; \ + }); \ } FOR_EACH_TYPE_NO_ENUM(SINGULAR_PRIMITIVE_GETTER_IMP, SINGULAR_RETAINABLE_GETTER_IMP) @@ -370,11 +364,11 @@ static void SingularSetRetainable(id msg, TYPE_Retainable value, size_t offset, #undef SINGULAR_PRIMITIVE_GETTER_IMP #undef SINGULAR_RETAINABLE_GETTER_IMP -#define REPEATED_GETTER_IMP(NAME) \ - static IMP GetRepeatedGetterImp##NAME(size_t offset) { \ - return imp_implementationWithBlock(^TYPE_##NAME(id msg, jint idx) { \ +#define REPEATED_GETTER_IMP(NAME) \ + static IMP GetRepeatedGetterImp##NAME(size_t offset) { \ + return imp_implementationWithBlock(^TYPE_##NAME(id msg, jint idx) { \ return CGPRepeatedFieldGet##NAME(REPEATED_FIELD_PTR(msg, offset), idx); \ - }); \ + }); \ } // Same macro for all types, uses getter functions defined earlier that @@ -390,10 +384,11 @@ static BOOL AddGetterMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { size_t offset = CGPFieldGetOffset(field, cls); CGPHasLocator hasLoc = GetHasLocator(cls, field); -#define ADD_GETTER_METHOD_CASE(NAME) \ - imp = repeated ? GetRepeatedGetterImp##NAME(offset) : \ - GetSingularGetterImp##NAME(offset, hasLoc, field->data_->defaultValue.value##NAME); \ - strcpy(encoding, @encode(TYPE_##NAME)); \ +#define ADD_GETTER_METHOD_CASE(NAME) \ + imp = repeated \ + ? GetRepeatedGetterImp##NAME(offset) \ + : GetSingularGetterImp##NAME(offset, hasLoc, field->data_->defaultValue.value##NAME); \ + strcpy(encoding, @encode(TYPE_##NAME)); \ break; SWITCH_TYPES_NO_ENUM(CGPFieldGetJavaType(field), ADD_GETTER_METHOD_CASE) @@ -513,26 +508,25 @@ static BOOL AddClearMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { return class_addMethod(cls, sel, imp, "@@:"); } -#define GET_SINGULAR_SETTER_IMP(NAME) \ +#define GET_SINGULAR_SETTER_IMP(NAME) \ static IMP GetSingularSetterImp##NAME(size_t offset, CGPHasLocator hasLoc) { \ - return imp_implementationWithBlock(^id(id msg, TYPE_##NAME value) { \ - NIL_CHECK_##NAME(value) \ - SingularSet##NAME(msg, value, offset, hasLoc); \ - return msg; \ - }); \ + return imp_implementationWithBlock(^id(id msg, TYPE_##NAME value) { \ + NIL_CHECK_##NAME(value) SingularSet##NAME(msg, value, offset, hasLoc); \ + return msg; \ + }); \ } FOR_EACH_TYPE_WITH_ENUM(GET_SINGULAR_SETTER_IMP) #undef GET_SINGULAR_SETTER_IMP -#define GET_REPEATED_SETTER_IMP(NAME) \ - static IMP GetRepeatedSetterImp##NAME(size_t offset) { \ +#define GET_REPEATED_SETTER_IMP(NAME) \ + static IMP GetRepeatedSetterImp##NAME(size_t offset) { \ return imp_implementationWithBlock(^id(id msg, jint idx, TYPE_##NAME value) { \ - NIL_CHECK_##NAME(value) \ - CGPRepeatedFieldSet##NAME(REPEATED_FIELD_PTR(msg, offset), idx, value); \ - return msg; \ - }); \ + NIL_CHECK_##NAME(value) \ + CGPRepeatedFieldSet##NAME(REPEATED_FIELD_PTR(msg, offset), idx, value); \ + return msg; \ + }); \ } FOR_EACH_TYPE_WITH_ENUM(GET_REPEATED_SETTER_IMP) @@ -549,10 +543,10 @@ static BOOL AddSetterMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { } size_t offset = CGPFieldGetOffset(field, cls); -#define ADD_SETTER_METHOD_CASE(NAME) \ - imp = repeated ? GetRepeatedSetterImp##NAME(offset) : \ - GetSingularSetterImp##NAME(offset, GetHasLocator(cls, field)); \ - strcat(encoding, @encode(TYPE_##NAME)); \ +#define ADD_SETTER_METHOD_CASE(NAME) \ + imp = repeated ? GetRepeatedSetterImp##NAME(offset) \ + : GetSingularSetterImp##NAME(offset, GetHasLocator(cls, field)); \ + strcat(encoding, @encode(TYPE_##NAME)); \ break; SWITCH_TYPES_WITH_ENUM(CGPFieldGetJavaType(field), ADD_SETTER_METHOD_CASE) @@ -581,13 +575,12 @@ static BOOL AddBuilderSetterMethod(Class cls, SEL sel, CGPFieldDescriptor *field return class_addMethod(cls, sel, imp, "@@:@"); } -#define GET_ADDER_IMP(NAME) \ - static IMP GetAdderImp##NAME(size_t offset) { \ - return imp_implementationWithBlock(^id(id msg, TYPE_##NAME value) { \ - NIL_CHECK_##NAME(value) \ - CGPRepeatedFieldAdd##NAME(REPEATED_FIELD_PTR(msg, offset), value); \ - return msg; \ - }); \ +#define GET_ADDER_IMP(NAME) \ + static IMP GetAdderImp##NAME(size_t offset) { \ + return imp_implementationWithBlock(^id(id msg, TYPE_##NAME value) { \ + NIL_CHECK_##NAME(value) CGPRepeatedFieldAdd##NAME(REPEATED_FIELD_PTR(msg, offset), value); \ + return msg; \ + }); \ } FOR_EACH_TYPE_WITH_ENUM(GET_ADDER_IMP) @@ -600,8 +593,8 @@ static BOOL AddAdderMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { strcpy(encoding, "@@:"); size_t offset = CGPFieldGetOffset(field, cls); -#define ADD_ADDER_METHOD_CASE(NAME) \ - imp = GetAdderImp##NAME(offset); \ +#define ADD_ADDER_METHOD_CASE(NAME) \ + imp = GetAdderImp##NAME(offset); \ strcat(encoding, @encode(TYPE_##NAME)); \ break; @@ -614,24 +607,24 @@ static BOOL AddAdderMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { static BOOL AddBuilderAdderMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { size_t offset = CGPFieldGetOffset(field, cls); - IMP imp = imp_implementationWithBlock(^id( - id msg, ComGoogleProtobufGeneratedMessage_Builder *value) { - (void)nil_chk(value); - CGPRepeatedFieldAddRetainable(REPEATED_FIELD_PTR(msg, offset), [value build]); - return msg; - }); + IMP imp = + imp_implementationWithBlock(^id(id msg, ComGoogleProtobufGeneratedMessage_Builder *value) { + (void)nil_chk(value); + CGPRepeatedFieldAddRetainable(REPEATED_FIELD_PTR(msg, offset), [value build]); + return msg; + }); return class_addMethod(cls, sel, imp, "@@:@"); } -#define GET_ADD_ALL_IMP(NAME) \ - static IMP GetAddAllImp##NAME(size_t offset) { \ - return imp_implementationWithBlock(^id(id msg, id values) { \ - CGPRepeatedField *repeatedField = REPEATED_FIELD_PTR(msg, offset); \ - for (id value in nil_chk(values)) { \ +#define GET_ADD_ALL_IMP(NAME) \ + static IMP GetAddAllImp##NAME(size_t offset) { \ + return imp_implementationWithBlock(^id(id msg, id values) { \ + CGPRepeatedField *repeatedField = REPEATED_FIELD_PTR(msg, offset); \ + for (id value in nil_chk(values)) { \ CGPRepeatedFieldAdd##NAME(repeatedField, CGPUnboxValue##NAME(nil_chk(value))); \ - } \ - return msg; \ - }); \ + } \ + return msg; \ + }); \ } FOR_EACH_TYPE_WITH_ENUM(GET_ADD_ALL_IMP) @@ -642,7 +635,7 @@ static BOOL AddAddAllMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { IMP imp = NULL; size_t offset = CGPFieldGetOffset(field, cls); -#define ADD_ALL_METHOD_CASE(NAME) \ +#define ADD_ALL_METHOD_CASE(NAME) \ imp = GetAddAllImp##NAME(offset); \ break; @@ -679,9 +672,9 @@ static BOOL AddContainsMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { CGPFieldJavaType keyType = CGPFieldGetJavaType(CGPFieldMapKey(field)); CGPFieldJavaType valueType = CGPFieldGetJavaType(CGPFieldMapValue(field)); -#define CONTAINS_METHOD_CASE(NAME) \ +#define CONTAINS_METHOD_CASE(NAME) \ imp = GetContainsImp##NAME(offset, keyType, valueType); \ - strcat(encoding, @encode(TYPE_##NAME)); \ + strcat(encoding, @encode(TYPE_##NAME)); \ break; switch (keyType) { @@ -706,77 +699,78 @@ static BOOL AddContainsMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { return class_addMethod(cls, sel, imp, encoding); } -#define GET_MAP_PRIMITIVE_GETTER_IMP(KEY_NAME, VALUE_NAME) \ - static IMP GetMapGetOrThrowImp##KEY_NAME##VALUE_NAME( \ - size_t offset, CGPFieldJavaType keyType, CGPFieldJavaType valueType) { \ - return imp_implementationWithBlock(^TYPE_##VALUE_NAME(id msg, TYPE_##KEY_NAME pKey) { \ - CGPValue key; \ - key.CGPValueField_##KEY_NAME = pKey; \ - CGPMapFieldEntry *entry = CGPMapFieldGetWithKey( \ - MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ - if (entry) { \ - return entry->value.CGPValueField_##VALUE_NAME; \ - } \ - @throw create_JavaLangIllegalArgumentException_init(); \ - }); \ - } \ - static IMP GetMapGetOrDefaultImp##KEY_NAME##VALUE_NAME( \ - size_t offset, CGPFieldJavaType keyType, CGPFieldJavaType valueType) { \ - return imp_implementationWithBlock(^TYPE_##VALUE_NAME( \ - id msg, TYPE_##KEY_NAME pKey, TYPE_##VALUE_NAME defaultValue) { \ - CGPValue key; \ - key.CGPValueField_##KEY_NAME = pKey; \ - CGPMapFieldEntry *entry = CGPMapFieldGetWithKey( \ - MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ - if (entry) { \ - return entry->value.CGPValueField_##VALUE_NAME; \ - } \ - return defaultValue; \ - }); \ - } - -#define GET_MAP_RETAINABLE_GETTER_IMP(KEY_NAME, VALUE_NAME) \ - static IMP GetMapGetOrThrowImp##KEY_NAME##VALUE_NAME( \ - size_t offset, CGPFieldJavaType keyType, CGPFieldJavaType valueType) { \ - return imp_implementationWithBlock(^TYPE_##VALUE_NAME(id msg, TYPE_##KEY_NAME pKey) { \ - CGPValue key; \ - key.CGPValueField_##KEY_NAME = pKey; \ - CGPMapFieldEntry *entry = CGPMapFieldGetWithKey( \ - MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ - if (entry) { \ - return RETAIN_AND_AUTORELEASE(entry->value.CGPValueField_##VALUE_NAME); \ - } \ - @throw create_JavaLangIllegalArgumentException_init(); \ - }); \ - } \ - static IMP GetMapGetOrDefaultImp##KEY_NAME##VALUE_NAME( \ - size_t offset, CGPFieldJavaType keyType, CGPFieldJavaType valueType) { \ - return imp_implementationWithBlock(^TYPE_##VALUE_NAME( \ - id msg, TYPE_##KEY_NAME pKey, TYPE_##VALUE_NAME defaultValue) { \ - CGPValue key; \ - key.CGPValueField_##KEY_NAME = pKey; \ - CGPMapFieldEntry *entry = CGPMapFieldGetWithKey( \ - MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ - if (entry) { \ - return RETAIN_AND_AUTORELEASE(entry->value.CGPValueField_##VALUE_NAME); \ - } \ - return defaultValue; \ - }); \ +#define GET_MAP_PRIMITIVE_GETTER_IMP(KEY_NAME, VALUE_NAME) \ + static IMP GetMapGetOrThrowImp##KEY_NAME##VALUE_NAME(size_t offset, CGPFieldJavaType keyType, \ + CGPFieldJavaType valueType) { \ + return imp_implementationWithBlock(^TYPE_##VALUE_NAME(id msg, TYPE_##KEY_NAME pKey) { \ + CGPValue key; \ + key.CGPValueField_##KEY_NAME = pKey; \ + CGPMapFieldEntry *entry = \ + CGPMapFieldGetWithKey(MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ + if (entry) { \ + return entry->value.CGPValueField_##VALUE_NAME; \ + } \ + @throw create_JavaLangIllegalArgumentException_init(); \ + }); \ + } \ + static IMP GetMapGetOrDefaultImp##KEY_NAME##VALUE_NAME(size_t offset, CGPFieldJavaType keyType, \ + CGPFieldJavaType valueType) { \ + return imp_implementationWithBlock( \ + ^TYPE_##VALUE_NAME(id msg, TYPE_##KEY_NAME pKey, TYPE_##VALUE_NAME defaultValue) { \ + CGPValue key; \ + key.CGPValueField_##KEY_NAME = pKey; \ + CGPMapFieldEntry *entry = \ + CGPMapFieldGetWithKey(MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ + if (entry) { \ + return entry->value.CGPValueField_##VALUE_NAME; \ + } \ + return defaultValue; \ + }); \ + } + +#define GET_MAP_RETAINABLE_GETTER_IMP(KEY_NAME, VALUE_NAME) \ + static IMP GetMapGetOrThrowImp##KEY_NAME##VALUE_NAME(size_t offset, CGPFieldJavaType keyType, \ + CGPFieldJavaType valueType) { \ + return imp_implementationWithBlock(^TYPE_##VALUE_NAME(id msg, TYPE_##KEY_NAME pKey) { \ + CGPValue key; \ + key.CGPValueField_##KEY_NAME = pKey; \ + CGPMapFieldEntry *entry = \ + CGPMapFieldGetWithKey(MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ + if (entry) { \ + return RETAIN_AND_AUTORELEASE(entry->value.CGPValueField_##VALUE_NAME); \ + } \ + @throw create_JavaLangIllegalArgumentException_init(); \ + }); \ + } \ + static IMP GetMapGetOrDefaultImp##KEY_NAME##VALUE_NAME(size_t offset, CGPFieldJavaType keyType, \ + CGPFieldJavaType valueType) { \ + return imp_implementationWithBlock( \ + ^TYPE_##VALUE_NAME(id msg, TYPE_##KEY_NAME pKey, TYPE_##VALUE_NAME defaultValue) { \ + CGPValue key; \ + key.CGPValueField_##KEY_NAME = pKey; \ + CGPMapFieldEntry *entry = \ + CGPMapFieldGetWithKey(MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ + if (entry) { \ + return RETAIN_AND_AUTORELEASE(entry->value.CGPValueField_##VALUE_NAME); \ + } \ + return defaultValue; \ + }); \ } #define GET_MAP_PRIMITIVE_GETTER_IMP_FOR_VALUE(VALUE_NAME) \ - GET_MAP_PRIMITIVE_GETTER_IMP(Int, VALUE_NAME) \ - GET_MAP_PRIMITIVE_GETTER_IMP(Long, VALUE_NAME) \ - GET_MAP_PRIMITIVE_GETTER_IMP(Bool, VALUE_NAME) \ + GET_MAP_PRIMITIVE_GETTER_IMP(Int, VALUE_NAME) \ + GET_MAP_PRIMITIVE_GETTER_IMP(Long, VALUE_NAME) \ + GET_MAP_PRIMITIVE_GETTER_IMP(Bool, VALUE_NAME) \ GET_MAP_PRIMITIVE_GETTER_IMP(Id, VALUE_NAME) #define GET_MAP_RETAINABLE_GETTER_IMP_FOR_VALUE(VALUE_NAME) \ - GET_MAP_RETAINABLE_GETTER_IMP(Int, VALUE_NAME) \ - GET_MAP_RETAINABLE_GETTER_IMP(Long, VALUE_NAME) \ - GET_MAP_RETAINABLE_GETTER_IMP(Bool, VALUE_NAME) \ + GET_MAP_RETAINABLE_GETTER_IMP(Int, VALUE_NAME) \ + GET_MAP_RETAINABLE_GETTER_IMP(Long, VALUE_NAME) \ + GET_MAP_RETAINABLE_GETTER_IMP(Bool, VALUE_NAME) \ GET_MAP_RETAINABLE_GETTER_IMP(Id, VALUE_NAME) -FOR_EACH_TYPE_NO_ENUM(GET_MAP_PRIMITIVE_GETTER_IMP_FOR_VALUE, GET_MAP_RETAINABLE_GETTER_IMP_FOR_VALUE) +FOR_EACH_TYPE_NO_ENUM(GET_MAP_PRIMITIVE_GETTER_IMP_FOR_VALUE, + GET_MAP_RETAINABLE_GETTER_IMP_FOR_VALUE) #undef GET_MAP_PRIMITIVE_GETTER_IMP #undef GET_MAP_RETAINABLE_GETTER_IMP @@ -790,34 +784,34 @@ static BOOL AddMapGetWithKeyMethod(Class cls, SEL sel, CGPFieldDescriptor *field CGPFieldJavaType keyType = CGPFieldGetJavaType(CGPFieldMapKey(field)); CGPFieldJavaType valueType = CGPFieldGetJavaType(CGPFieldMapValue(field)); -#define MAP_GETTER_CASE(KEY_NAME, VALUE_NAME) \ - imp = orDefault ? GetMapGetOrDefaultImp##KEY_NAME##VALUE_NAME(offset, keyType, valueType) : \ - GetMapGetOrThrowImp##KEY_NAME##VALUE_NAME(offset, keyType, valueType); \ - strcat(encoding, @encode(TYPE_##KEY_NAME)); \ +#define MAP_GETTER_CASE(KEY_NAME, VALUE_NAME) \ + imp = orDefault ? GetMapGetOrDefaultImp##KEY_NAME##VALUE_NAME(offset, keyType, valueType) \ + : GetMapGetOrThrowImp##KEY_NAME##VALUE_NAME(offset, keyType, valueType); \ + strcat(encoding, @encode(TYPE_##KEY_NAME)); \ break; -#define MAP_GETTER_INNER_SWITCH(VALUE_NAME) \ - strcpy(encoding, @encode(TYPE_##VALUE_NAME)); \ - strcat(encoding, "@:"); \ - switch (keyType) { \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_INT: \ - MAP_GETTER_CASE(Int, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_LONG: \ - MAP_GETTER_CASE(Long, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BOOLEAN: \ - MAP_GETTER_CASE(Bool, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_STRING: \ - MAP_GETTER_CASE(Id, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_FLOAT: \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_DOUBLE: \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_ENUM: \ +#define MAP_GETTER_INNER_SWITCH(VALUE_NAME) \ + strcpy(encoding, @encode(TYPE_##VALUE_NAME)); \ + strcat(encoding, "@:"); \ + switch (keyType) { \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_INT: \ + MAP_GETTER_CASE(Int, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_LONG: \ + MAP_GETTER_CASE(Long, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BOOLEAN: \ + MAP_GETTER_CASE(Bool, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_STRING: \ + MAP_GETTER_CASE(Id, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_FLOAT: \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_DOUBLE: \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_ENUM: \ case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BYTE_STRING: \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_MESSAGE: \ - return NO; \ - } \ - if (orDefault) { \ - strcat(encoding, @encode(TYPE_##VALUE_NAME)); \ - } \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_MESSAGE: \ + return NO; \ + } \ + if (orDefault) { \ + strcat(encoding, @encode(TYPE_##VALUE_NAME)); \ + } \ break; SWITCH_TYPES_NO_ENUM(valueType, MAP_GETTER_INNER_SWITCH) @@ -828,26 +822,25 @@ static BOOL AddMapGetWithKeyMethod(Class cls, SEL sel, CGPFieldDescriptor *field return class_addMethod(cls, sel, imp, encoding); } -#define GET_PUT_IMP(KEY_NAME, VALUE_NAME) \ - static IMP GetPutImp##KEY_NAME##VALUE_NAME( \ - size_t offset, CGPFieldJavaType keyType, CGPFieldJavaType valueType) { \ - return imp_implementationWithBlock( \ - ^id(id msg, TYPE_##KEY_NAME pKey, TYPE_##VALUE_NAME pValue) { \ - CGPValue key; \ - key.CGPValueField_##KEY_NAME = pKey; \ - CGPValue value; \ - value.CGPValueField_##VALUE_NAME = pValue; \ - CGPMapFieldPut( \ - MAP_FIELD_PTR(msg, offset), key, keyType, value, valueType, \ - /* retainedKeyAndValue */ false); \ - return msg; \ - }); \ +#define GET_PUT_IMP(KEY_NAME, VALUE_NAME) \ + static IMP GetPutImp##KEY_NAME##VALUE_NAME(size_t offset, CGPFieldJavaType keyType, \ + CGPFieldJavaType valueType) { \ + return imp_implementationWithBlock( \ + ^id(id msg, TYPE_##KEY_NAME pKey, TYPE_##VALUE_NAME pValue) { \ + CGPValue key; \ + key.CGPValueField_##KEY_NAME = pKey; \ + CGPValue value; \ + value.CGPValueField_##VALUE_NAME = pValue; \ + CGPMapFieldPut(MAP_FIELD_PTR(msg, offset), key, keyType, value, valueType, \ + /* retainedKeyAndValue */ false); \ + return msg; \ + }); \ } #define GET_PUT_IMP_FOR_VALUE(VALUE_NAME) \ - GET_PUT_IMP(Int, VALUE_NAME) \ - GET_PUT_IMP(Long, VALUE_NAME) \ - GET_PUT_IMP(Bool, VALUE_NAME) \ + GET_PUT_IMP(Int, VALUE_NAME) \ + GET_PUT_IMP(Long, VALUE_NAME) \ + GET_PUT_IMP(Bool, VALUE_NAME) \ GET_PUT_IMP(Id, VALUE_NAME) // No difference in put implementation by type, CGPMapFieldPut() handles both types. @@ -864,29 +857,29 @@ static BOOL AddPutMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { CGPFieldJavaType keyType = CGPFieldGetJavaType(CGPFieldMapKey(field)); CGPFieldJavaType valueType = CGPFieldGetJavaType(CGPFieldMapValue(field)); -#define PUT_METHOD_CASE(KEY_NAME, VALUE_NAME) \ +#define PUT_METHOD_CASE(KEY_NAME, VALUE_NAME) \ imp = GetPutImp##KEY_NAME##VALUE_NAME(offset, keyType, valueType); \ - strcat(encoding, @encode(TYPE_##KEY_NAME)); \ + strcat(encoding, @encode(TYPE_##KEY_NAME)); \ break; -#define PUT_METHOD_INNER_SWITCH(VALUE_NAME) \ - switch (keyType) { \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_INT: \ - PUT_METHOD_CASE(Int, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_LONG: \ - PUT_METHOD_CASE(Long, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BOOLEAN: \ - PUT_METHOD_CASE(Bool, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_STRING: \ - PUT_METHOD_CASE(Id, VALUE_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_FLOAT: \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_DOUBLE: \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_ENUM: \ +#define PUT_METHOD_INNER_SWITCH(VALUE_NAME) \ + switch (keyType) { \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_INT: \ + PUT_METHOD_CASE(Int, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_LONG: \ + PUT_METHOD_CASE(Long, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BOOLEAN: \ + PUT_METHOD_CASE(Bool, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_STRING: \ + PUT_METHOD_CASE(Id, VALUE_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_FLOAT: \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_DOUBLE: \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_ENUM: \ case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BYTE_STRING: \ - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_MESSAGE: \ - return NO; \ - } \ - strcat(encoding, @encode(TYPE_##VALUE_NAME)); \ + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_MESSAGE: \ + return NO; \ + } \ + strcat(encoding, @encode(TYPE_##VALUE_NAME)); \ break; SWITCH_TYPES_NO_ENUM(valueType, PUT_METHOD_INNER_SWITCH) @@ -897,15 +890,15 @@ static BOOL AddPutMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { return class_addMethod(cls, sel, imp, encoding); } -#define GET_MAP_REMOVE_IMP(NAME) \ - static IMP GetMapRemoveImp##NAME( \ - size_t offset, CGPFieldJavaType keyType, CGPFieldJavaType valueType) { \ - return imp_implementationWithBlock(^id(id msg, TYPE_##NAME pKey) { \ - CGPValue key; \ - key.CGPValueField_##NAME = pKey; \ +#define GET_MAP_REMOVE_IMP(NAME) \ + static IMP GetMapRemoveImp##NAME(size_t offset, CGPFieldJavaType keyType, \ + CGPFieldJavaType valueType) { \ + return imp_implementationWithBlock(^id(id msg, TYPE_##NAME pKey) { \ + CGPValue key; \ + key.CGPValueField_##NAME = pKey; \ CGPMapFieldRemove(MAP_FIELD_PTR(msg, offset), key, keyType, valueType); \ - return msg; \ - }); \ + return msg; \ + }); \ } GET_MAP_REMOVE_IMP(Int) @@ -923,9 +916,9 @@ static BOOL AddMapRemoveMethod(Class cls, SEL sel, CGPFieldDescriptor *field) { CGPFieldJavaType keyType = CGPFieldGetJavaType(CGPFieldMapKey(field)); CGPFieldJavaType valueType = CGPFieldGetJavaType(CGPFieldMapValue(field)); -#define REMOVE_METHOD_CASE(NAME) \ +#define REMOVE_METHOD_CASE(NAME) \ imp = GetMapRemoveImp##NAME(offset, keyType, valueType); \ - strcat(encoding, @encode(TYPE_##NAME)); \ + strcat(encoding, @encode(TYPE_##NAME)); \ break; switch (keyType) { @@ -976,12 +969,18 @@ static BOOL AddOneofGetterMethod(Class cls, SEL sel, CGPOneofDescriptor *oneof) static const char *GetParamKeyword(CGPFieldDescriptor *field) { switch (CGPFieldGetJavaType(field)) { - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_INT: return "Int"; - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_LONG: return "Long"; - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_FLOAT: return "Float"; - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_DOUBLE: return "Double"; - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BOOLEAN: return "Boolean"; - case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_STRING: return "NSString"; + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_INT: + return "Int"; + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_LONG: + return "Long"; + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_FLOAT: + return "Float"; + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_DOUBLE: + return "Double"; + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BOOLEAN: + return "Boolean"; + case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_STRING: + return "NSString"; case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_BYTE_STRING: return "ComGoogleProtobufByteString"; case ComGoogleProtobufDescriptors_FieldDescriptor_JavaType_Enum_ENUM: @@ -1009,8 +1008,8 @@ static bool MatchesStr(const char **strPtr, const char *match) { // will not be changed in the case of a match. // Otherwise, if the match is found at strPtr, strPtr is advanced accordingly. // This code needs to match the logic in UnderscoresToCamelCase in j2objc_helpers.cc -static bool CamelCaseMatchesUndescored( - const char **strPtr, const char *match, bool cap_next_letter, bool end) { +static bool CamelCaseMatchesUndescored(const char **strPtr, const char *match, bool cap_next_letter, + bool end) { size_t sPos = 0; size_t mPos = 0; while (match[mPos] != 0 && (*strPtr)[sPos] != 0) { @@ -1056,9 +1055,7 @@ static bool MatchesName(const char **strPtr, CGPFieldDescriptor *field) { return CamelCaseMatchesUndescored(strPtr, field->data_->name, true, false); } -static bool MatchesEnd(const char *str, const char *match) { - return strcmp(str, match) == 0; -} +static bool MatchesEnd(const char *str, const char *match) { return strcmp(str, match) == 0; } static BOOL ResolveGetAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, const char *selName) { IOSObjectArray *fields = descriptor->fields_; @@ -1087,8 +1084,7 @@ static BOOL ResolveGetAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, co return AddMapGetWithKeyMethod(cls, sel, field, true); } } else if (CGPFieldIsRepeated(field)) { - if (MatchesEnd(tail, "WithInt:") || - MatchesEnd(tail, "Index:") ) { + if (MatchesEnd(tail, "WithInt:") || MatchesEnd(tail, "Index:")) { return AddGetterMethod(cls, sel, field); } else if (MatchesEnd(tail, "Count")) { return AddCountMethod(cls, sel, field); @@ -1125,8 +1121,8 @@ static BOOL ResolveHasAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, co NSUInteger count = fields->size_; for (NSUInteger i = 0; i < count; ++i) { ComGoogleProtobufDescriptors_FieldDescriptor *field = fieldsBuf[i]; - if (!CGPFieldIsRepeated(field) - && CamelCaseMatchesUndescored(&selName, field->data_->name, true, true)) { + if (!CGPFieldIsRepeated(field) && + CamelCaseMatchesUndescored(&selName, field->data_->name, true, true)) { return AddHasMethod(cls, sel, field); } } @@ -1143,10 +1139,10 @@ static BOOL ResolveSetAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, co continue; } const char *tail = selName; - if (MatchesName(&tail, field) - && (CGPFieldIsRepeated(field) ? Matches(&tail, "WithInt:with", 12) - : Matches(&tail, "With", 4)) - && MatchesKeyword(&tail, field)) { + if (MatchesName(&tail, field) && + (CGPFieldIsRepeated(field) ? Matches(&tail, "WithInt:with", 12) + : Matches(&tail, "With", 4)) && + MatchesKeyword(&tail, field)) { if (MatchesEnd(tail, ":")) { return AddSetterMethod(cls, sel, field); } else if (MatchesEnd(tail, "_Builder:")) { @@ -1157,8 +1153,8 @@ static BOOL ResolveSetAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, co return NO; } -static BOOL ResolveClearAccessor( - Class cls, CGPDescriptor *descriptor, SEL sel, const char *selName) { +static BOOL ResolveClearAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, + const char *selName) { IOSObjectArray *fields = descriptor->fields_; ComGoogleProtobufDescriptors_FieldDescriptor **fieldsBuf = fields->buffer_; NSUInteger count = fields->size_; @@ -1190,8 +1186,8 @@ static BOOL ResolveAddAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, co return NO; } -static BOOL ResolveAddAllAccessor( - Class cls, CGPDescriptor *descriptor, SEL sel, const char *selName) { +static BOOL ResolveAddAllAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, + const char *selName) { IOSObjectArray *fields = descriptor->fields_; ComGoogleProtobufDescriptors_FieldDescriptor **fieldsBuf = fields->buffer_; NSUInteger count = fields->size_; @@ -1206,16 +1202,16 @@ static BOOL ResolveAddAllAccessor( return NO; } -static BOOL ResolveContainsAccessor( - Class cls, CGPDescriptor *descriptor, SEL sel, const char *selName) { +static BOOL ResolveContainsAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, + const char *selName) { IOSObjectArray *fields = descriptor->fields_; CGPFieldDescriptor **fieldsBuf = fields->buffer_; NSUInteger count = fields->size_; for (NSUInteger i = 0; i < count; ++i) { CGPFieldDescriptor *field = fieldsBuf[i]; const char *tail = selName; - if (CGPFieldIsMap(field) && MatchesName(&tail, field) && Matches(&tail, "With", 4) - && MatchesKeyword(&tail, CGPFieldMapKey(field)) && MatchesEnd(tail, ":")) { + if (CGPFieldIsMap(field) && MatchesName(&tail, field) && Matches(&tail, "With", 4) && + MatchesKeyword(&tail, CGPFieldMapKey(field)) && MatchesEnd(tail, ":")) { return AddContainsMethod(cls, sel, field); } } @@ -1243,21 +1239,21 @@ static BOOL ResolvePutAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, co return NO; } -static BOOL ResolveRemoveAccessor( - Class cls, CGPDescriptor *descriptor, SEL sel, const char *selName) { +static BOOL ResolveRemoveAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, + const char *selName) { IOSObjectArray *fields = descriptor->fields_; CGPFieldDescriptor **fieldsBuf = fields->buffer_; NSUInteger count = fields->size_; for (NSUInteger i = 0; i < count; ++i) { CGPFieldDescriptor *field = fieldsBuf[i]; const char *tail = selName; - if (CGPFieldIsMap(field) && MatchesName(&tail, field) && Matches(&tail, "With", 4) - && MatchesKeyword(&tail, CGPFieldMapKey(field)) && MatchesEnd(tail, ":")) { + if (CGPFieldIsMap(field) && MatchesName(&tail, field) && Matches(&tail, "With", 4) && + MatchesKeyword(&tail, CGPFieldMapKey(field)) && MatchesEnd(tail, ":")) { return AddMapRemoveMethod(cls, sel, field); } tail = selName; - if (CGPFieldIsRepeated(field) && CGPFieldTypeIsMessage(field) && MatchesName(&tail, field) - && MatchesEnd(tail, "WithInt:")) { + if (CGPFieldIsRepeated(field) && CGPFieldTypeIsMessage(field) && MatchesName(&tail, field) && + MatchesEnd(tail, "WithInt:")) { return AddRepeatedMessageRemoveMethod(cls, sel, field); } } @@ -1280,8 +1276,8 @@ static BOOL ResolveAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, BOOL return ResolveClearAccessor(cls, descriptor, sel, selName); } else if (Matches(&selName, "add", 3)) { const char *addAllSelName = selName; - if (Matches(&addAllSelName, "All", 3) - && ResolveAddAllAccessor(cls, descriptor, sel, addAllSelName)) { + if (Matches(&addAllSelName, "All", 3) && + ResolveAddAllAccessor(cls, descriptor, sel, addAllSelName)) { return YES; } return ResolveAddAccessor(cls, descriptor, sel, selName); @@ -1294,7 +1290,6 @@ static BOOL ResolveAccessor(Class cls, CGPDescriptor *descriptor, SEL sel, BOOL return NO; } - // ***************************************************************************** // ********** Reflective field accessors (using descriptors) ****************** // ***************************************************************************** @@ -1304,11 +1299,11 @@ static id GetSingularField(id msg, CGPFieldDescriptor *field) { bool isSet = GetHas(msg, GetHasLocator(msgCls, field)); size_t offset = CGPFieldGetOffset(field, msgCls); -#define GET_FIELD_CASE(NAME) \ - { \ - TYPE_##NAME value = isSet ? *FIELD_PTR(TYPE_##NAME, msg, offset) \ - : field->data_->defaultValue.CGPValueField_##NAME; \ - return CGPToReflectionType##NAME(value, field); \ +#define GET_FIELD_CASE(NAME) \ + { \ + TYPE_##NAME value = isSet ? *FIELD_PTR(TYPE_##NAME, msg, offset) \ + : field->data_->defaultValue.CGPValueField_##NAME; \ + return CGPToReflectionType##NAME(value, field); \ } SWITCH_TYPES_WITH_ENUM(CGPFieldGetJavaType(field), GET_FIELD_CASE) @@ -1373,8 +1368,8 @@ static bool HasField(id msg, CGPFieldDescriptor *descriptor) { static void CheckIsRepeated(CGPFieldDescriptor *descriptor) { if (!CGPFieldIsRepeated(descriptor)) { - @throw AUTORELEASE([[JavaLangUnsupportedOperationException alloc] initWithNSString: - @"Expected a repeated field."]); + @throw AUTORELEASE([[JavaLangUnsupportedOperationException alloc] + initWithNSString:@"Expected a repeated field."]); } } @@ -1406,9 +1401,8 @@ static void ReleaseAllFields(id self, Class cls, CGPDescriptor *descriptor, BOOL uintptr_t ptr = ((uintptr_t)self + CGPFieldGetOffset(field, cls)); CGPFieldJavaType javaType = CGPFieldGetJavaType(field); if (CGPFieldIsMap(field)) { - CGPMapFieldClear( - (CGPMapField *)ptr, CGPFieldGetJavaType(CGPFieldMapKey(field)), - CGPFieldGetJavaType(CGPFieldMapValue(field)), dealloc); + CGPMapFieldClear((CGPMapField *)ptr, CGPFieldGetJavaType(CGPFieldMapKey(field)), + CGPFieldGetJavaType(CGPFieldMapValue(field)), dealloc); } else if (CGPFieldIsRepeated(field)) { CGPRepeatedFieldClear((CGPRepeatedField *)ptr, javaType); } else if (CGPIsRetainedType(javaType) && GetHas(self, GetHasLocator(cls, field))) { @@ -1417,10 +1411,10 @@ static void ReleaseAllFields(id self, Class cls, CGPDescriptor *descriptor, BOOL } } -static void CopyAllFields( - id orig, Class origCls, id copy, Class copyCls, CGPDescriptor *descriptor) { +static void CopyAllFields(id orig, Class origCls, id copy, Class copyCls, + CGPDescriptor *descriptor) { memcpy((uint8_t *)copy + class_getInstanceSize(copyCls), - (uint8_t *)orig + class_getInstanceSize(origCls), descriptor->storageSize_); + (uint8_t *)orig + class_getInstanceSize(origCls), descriptor->storageSize_); // Retain object types. CGPFieldDescriptor **fields = descriptor->fields_->buffer_; NSUInteger count = descriptor->fields_->size_; @@ -1429,9 +1423,8 @@ static void CopyAllFields( uintptr_t ptr = ((uintptr_t)copy + CGPFieldGetOffset(field, copyCls)); CGPFieldJavaType javaType = CGPFieldGetJavaType(field); if (CGPFieldIsMap(field)) { - CGPMapFieldCopyData( - (CGPMapField *)ptr, CGPFieldGetJavaType(CGPFieldMapKey(field)), - CGPFieldGetJavaType(CGPFieldMapValue(field))); + CGPMapFieldCopyData((CGPMapField *)ptr, CGPFieldGetJavaType(CGPFieldMapKey(field)), + CGPFieldGetJavaType(CGPFieldMapValue(field))); } else if (CGPFieldIsRepeated(field)) { CGPRepeatedFieldCopyData((CGPRepeatedField *)ptr, javaType); } else if (CGPIsRetainedType(javaType) && GetHas(copy, GetHasLocator(copyCls, field))) { @@ -1440,9 +1433,8 @@ static void CopyAllFields( } } -static void CopyMessage( - id copy, CGPExtensionMap *copyExtensionMap, id orig, CGPExtensionMap *origExtensionMap, - CGPDescriptor *descriptor) { +static void CopyMessage(id copy, CGPExtensionMap *copyExtensionMap, id orig, + CGPExtensionMap *origExtensionMap, CGPDescriptor *descriptor) { CopyAllFields(orig, object_getClass(orig), copy, object_getClass(copy), descriptor); if (copyExtensionMap != NULL) { *copyExtensionMap = *origExtensionMap; @@ -1462,18 +1454,17 @@ static void CopyMessage( return NSAllocateObject(descriptor->builderClass_, descriptor->storageSize_, nil); } - // ***************************************************************************** // ********** Merging from another message ************************************* // ***************************************************************************** -static ComGoogleProtobufGeneratedMessage *NewMergedMessageField( - id msg, id other, CGPDescriptor *descriptor) { +static ComGoogleProtobufGeneratedMessage *NewMergedMessageField(id msg, id other, + CGPDescriptor *descriptor) { id newMsg = CGPNewMessage(descriptor); CGPExtensionMap *newExtensionMap = MessageExtensionMap(newMsg, descriptor); CopyMessage(newMsg, newExtensionMap, msg, MessageExtensionMap(msg, descriptor), descriptor); - MergeFromMessage( - newMsg, newExtensionMap, other, MessageExtensionMap(other, descriptor), descriptor); + MergeFromMessage(newMsg, newExtensionMap, other, MessageExtensionMap(other, descriptor), + descriptor); return newMsg; } @@ -1488,9 +1479,9 @@ static void MergeFieldsFromMessage(id msg, id other, CGPDescriptor *descriptor) size_t msgOffset = CGPFieldGetOffset(field, msgCls); size_t otherOffset = CGPFieldGetOffset(field, otherCls); if (CGPFieldIsMap(field)) { - CGPMapFieldAppendOther( - MAP_FIELD_PTR(msg, msgOffset), MAP_FIELD_PTR(other, otherOffset), - CGPFieldGetJavaType(CGPFieldMapKey(field)), CGPFieldGetJavaType(CGPFieldMapValue(field))); + CGPMapFieldAppendOther(MAP_FIELD_PTR(msg, msgOffset), MAP_FIELD_PTR(other, otherOffset), + CGPFieldGetJavaType(CGPFieldMapKey(field)), + CGPFieldGetJavaType(CGPFieldMapValue(field))); } else if (CGPFieldIsRepeated(field)) { CGPRepeatedField *repeatedField = REPEATED_FIELD_PTR(msg, msgOffset); CGPRepeatedField *otherRepeatedField = REPEATED_FIELD_PTR(other, otherOffset); @@ -1513,11 +1504,11 @@ static void MergeFieldsFromMessage(id msg, id other, CGPDescriptor *descriptor) } ClearPreviousOneof(msg, hasLoc, fieldPtr); -#define MERGE_FIELD_CASE(NAME) \ - { \ - TYPE_ASSIGN_##NAME(*(TYPE_##NAME *)fieldPtr, *(TYPE_##NAME *)otherFieldPtr); \ - break; \ - } +#define MERGE_FIELD_CASE(NAME) \ + { \ + TYPE_ASSIGN_##NAME(*(TYPE_##NAME *)fieldPtr, *(TYPE_##NAME *)otherFieldPtr); \ + break; \ + } SWITCH_TYPES_WITH_ENUM(type, MERGE_FIELD_CASE) @@ -1556,9 +1547,8 @@ static void MergeExtensions(CGPExtensionMap *msgExtensionMap, CGPExtensionMap *o } } -static void MergeFromMessage( - id msg, CGPExtensionMap *msgExtensionMap, id other, CGPExtensionMap *otherExtensionMap, - CGPDescriptor *descriptor) { +static void MergeFromMessage(id msg, CGPExtensionMap *msgExtensionMap, id other, + CGPExtensionMap *otherExtensionMap, CGPDescriptor *descriptor) { MergeFieldsFromMessage(msg, other, descriptor); if (msgExtensionMap != NULL && otherExtensionMap != NULL) { MergeExtensions(msgExtensionMap, otherExtensionMap); @@ -1567,44 +1557,42 @@ static void MergeFromMessage( static id DynamicMergeFromMessage(id builder, SEL _cmd, id other) { CGPDescriptor *descriptor = [object_getClass(builder) getDescriptor]; - MergeFromMessage( - builder, BuilderExtensionMap(builder, descriptor), other, - MessageExtensionMap(other, descriptor), descriptor); + MergeFromMessage(builder, BuilderExtensionMap(builder, descriptor), other, + MessageExtensionMap(other, descriptor), descriptor); return builder; } ComGoogleProtobufGeneratedMessage_Builder *CGPBuilderFromPrototype( CGPDescriptor *descriptor, ComGoogleProtobufGeneratedMessage *prototype) { ComGoogleProtobufGeneratedMessage_Builder *builder = CGPNewBuilder(descriptor); - CopyMessage(builder, BuilderExtensionMap(builder, descriptor), - prototype, MessageExtensionMap(prototype, descriptor), descriptor); + CopyMessage(builder, BuilderExtensionMap(builder, descriptor), prototype, + MessageExtensionMap(prototype, descriptor), descriptor); return AUTORELEASE(builder); } - // ***************************************************************************** // ********** Deserializing **************************************************** // ***************************************************************************** -static inline BOOL ReadEnumValueDescriptor( - CGPCodedInputStream *input, CGPEnumDescriptor *enumType, id *valueDescriptor) { +static inline BOOL ReadEnumValueDescriptor(CGPCodedInputStream *input, CGPEnumDescriptor *enumType, + id *valueDescriptor) { jint value; if (!CGPReadEnum(input, &value)) return NO; *valueDescriptor = CGPEnumValueDescriptorFromInt(enumType, value); return YES; } -static BOOL ReadEnumJavaValue( - CGPCodedInputStream *input, CGPEnumDescriptor *enumType, id *javaValue) { +static BOOL ReadEnumJavaValue(CGPCodedInputStream *input, CGPEnumDescriptor *enumType, + id *javaValue) { CGPEnumValueDescriptor *valueDescriptor; if (!ReadEnumValueDescriptor(input, enumType, &valueDescriptor)) return NO; *javaValue = valueDescriptor == nil ? nil : valueDescriptor->enum_; return YES; } -static inline BOOL MergeGroupFieldFromStream( - id msg, CGPFieldDescriptor *field, CGPCodedInputStream *input, - CGPExtensionRegistryLite *registry) { +static inline BOOL MergeGroupFieldFromStream(id msg, CGPFieldDescriptor *field, + CGPCodedInputStream *input, + CGPExtensionRegistryLite *registry) { CGPDescriptor *type = field->valueType_; if (!MergeFromStream(msg, type, input, registry, MessageExtensionMap(msg, type))) return NO; if (!input->LastTagWas(CGPWireFormatMakeTag(CGPFieldGetNumber(field), CGPWireFormatEndGroup))) @@ -1612,9 +1600,9 @@ static inline BOOL MergeGroupFieldFromStream( return YES; } -static inline BOOL MergeMessageFieldFromStream( - id msg, CGPFieldDescriptor *field, CGPCodedInputStream *input, - CGPExtensionRegistryLite *registry) { +static inline BOOL MergeMessageFieldFromStream(id msg, CGPFieldDescriptor *field, + CGPCodedInputStream *input, + CGPExtensionRegistryLite *registry) { int length; if (!CGPReadInt32(input, &length)) return NO; CGPCodedInputStream::Limit limit = input->PushLimit(length); @@ -1626,9 +1614,8 @@ static inline BOOL MergeMessageFieldFromStream( } // Reads a retained value if it is a retainable type. -static BOOL ReadMapEntryField( - CGPCodedInputStream *stream, CGPFieldDescriptor *field, uint32_t tag, - CGPExtensionRegistryLite *registry, CGPValue *value) { +static BOOL ReadMapEntryField(CGPCodedInputStream *stream, CGPFieldDescriptor *field, uint32_t tag, + CGPExtensionRegistryLite *registry, CGPValue *value) { CGPFieldType type = CGPFieldGetType(field); CGPWireFormat wireType = CGPWireFormatGetTagWireType(tag); if (wireType != CGPWireFormatForType(type, false)) { @@ -1659,8 +1646,7 @@ static BOOL ReadMapEntryField( case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_DOUBLE: return CGPReadDouble(stream, &value->valueDouble); case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: - return ReadEnumJavaValue(stream, field->valueType_, &value->valueId) - && value->valueId != nil; + return ReadEnumJavaValue(stream, field->valueType_, &value->valueId) && value->valueId != nil; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: return stream->ReadRetainedByteString(&value->valueId); case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: @@ -1670,9 +1656,8 @@ static BOOL ReadMapEntryField( FALLTHROUGH_INTENDED; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { ComGoogleProtobufGeneratedMessage *newMsg = CGPNewMessage(field->valueType_); - if (!(isGroup ? - MergeGroupFieldFromStream(newMsg, field, stream, registry) : - MergeMessageFieldFromStream(newMsg, field, stream, registry))) { + if (!(isGroup ? MergeGroupFieldFromStream(newMsg, field, stream, registry) + : MergeMessageFieldFromStream(newMsg, field, stream, registry))) { RELEASE_(newMsg); return NO; } @@ -1683,9 +1668,8 @@ static BOOL ReadMapEntryField( __builtin_unreachable(); } -static BOOL MergeMapEntryFromStream( - CGPMapField *field, CGPCodedInputStream *stream, CGPDescriptor *entry, - CGPExtensionRegistryLite *registry) { +static BOOL MergeMapEntryFromStream(CGPMapField *field, CGPCodedInputStream *stream, + CGPDescriptor *entry, CGPExtensionRegistryLite *registry) { int length; if (!CGPReadInt32(stream, &length)) return NO; CGPCodedInputStream::Limit limit = stream->PushLimit(length); @@ -1720,14 +1704,13 @@ static BOOL MergeMapEntryFromStream( } if (!stream->ConsumedEntireMessage()) return NO; stream->PopLimit(limit); - CGPMapFieldPut( - field, key, CGPFieldGetJavaType(keyField), value, CGPFieldGetJavaType(valueField), - /* retainedKeyAndValue */ true); + CGPMapFieldPut(field, key, CGPFieldGetJavaType(keyField), value, CGPFieldGetJavaType(valueField), + /* retainedKeyAndValue */ true); return YES; } -static void AddExtensionWithReflectionType( - CGPExtensionMap *extensionMap, CGPFieldDescriptor *field, id retainedValue) { +static void AddExtensionWithReflectionType(CGPExtensionMap *extensionMap, CGPFieldDescriptor *field, + id retainedValue) { CGPExtensionValue &extValue = (*extensionMap)[field]; id list = extValue.get(); if (list == nil) { @@ -1737,20 +1720,19 @@ static void AddExtensionWithReflectionType( [list addWithId:retainedValue]; } -static BOOL MergeExtensionValueFromStream( - CGPCodedInputStream *stream, CGPFieldDescriptor *field, id existingValue, - CGPExtensionRegistryLite *registry, id *result, BOOL *isRetained) { +static BOOL MergeExtensionValueFromStream(CGPCodedInputStream *stream, CGPFieldDescriptor *field, + id existingValue, CGPExtensionRegistryLite *registry, + id *result, BOOL *isRetained) { BOOL isGroup = NO; switch (CGPFieldGetType(field)) { -#define READ_EXTENSION_CASE(ENUM_NAME, WIRE_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - { \ - TYPE_##JAVA_NAME value; \ - if (!CGPRead##WIRE_NAME(stream, &value)) return NO; \ - *result = CGPToReflectionType##JAVA_NAME(value, field); \ - *isRetained = NO; \ - return YES; \ - } +#define READ_EXTENSION_CASE(ENUM_NAME, WIRE_NAME, JAVA_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: { \ + TYPE_##JAVA_NAME value; \ + if (!CGPRead##WIRE_NAME(stream, &value)) return NO; \ + *result = CGPToReflectionType##JAVA_NAME(value, field); \ + *isRetained = NO; \ + return YES; \ + } READ_EXTENSION_CASE(INT32, Int32, Int) READ_EXTENSION_CASE(UINT32, Int32, Int) READ_EXTENSION_CASE(SINT32, Sint32, Int) @@ -1779,32 +1761,30 @@ static BOOL MergeExtensionValueFromStream( case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: isGroup = YES; FALLTHROUGH_INTENDED; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - CGPDescriptor *fieldType = field->valueType_; - ComGoogleProtobufGeneratedMessage *msgField = CGPNewMessage(fieldType); - if (existingValue != nil) { - CopyMessage(msgField, MessageExtensionMap(msgField, fieldType), - existingValue, MessageExtensionMap(existingValue, fieldType), fieldType); - } - if (!(isGroup ? - MergeGroupFieldFromStream(msgField, field, stream, registry) : - MergeMessageFieldFromStream(msgField, field, stream, registry))) { - AUTORELEASE(msgField); - return NO; - } - *result = msgField; - *isRetained = YES; - return YES; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + CGPDescriptor *fieldType = field->valueType_; + ComGoogleProtobufGeneratedMessage *msgField = CGPNewMessage(fieldType); + if (existingValue != nil) { + CopyMessage(msgField, MessageExtensionMap(msgField, fieldType), existingValue, + MessageExtensionMap(existingValue, fieldType), fieldType); } + if (!(isGroup ? MergeGroupFieldFromStream(msgField, field, stream, registry) + : MergeMessageFieldFromStream(msgField, field, stream, registry))) { + AUTORELEASE(msgField); + return NO; + } + *result = msgField; + *isRetained = YES; + return YES; + } } #undef READ_EXTENSION_CASE __builtin_unreachable(); } -static BOOL MergeExtensionFromStream( - CGPCodedInputStream *stream, CGPFieldDescriptor *field, CGPExtensionRegistryLite *registry, - CGPExtensionMap *extensionMap) { +static BOOL MergeExtensionFromStream(CGPCodedInputStream *stream, CGPFieldDescriptor *field, + CGPExtensionRegistryLite *registry, + CGPExtensionMap *extensionMap) { id value; BOOL isRetained; if (CGPFieldIsRepeated(field)) { @@ -1847,9 +1827,10 @@ static BOOL MergeExtensionFromStream( return YES; } -static BOOL MergeMessageSetExtensionFromStream( - CGPCodedInputStream *stream, CGPDescriptor *descriptor, CGPExtensionRegistryLite *registry, - CGPExtensionMap *extensionMap) { +static BOOL MergeMessageSetExtensionFromStream(CGPCodedInputStream *stream, + CGPDescriptor *descriptor, + CGPExtensionRegistryLite *registry, + CGPExtensionMap *extensionMap) { uint32_t typeId = 0; CGPByteString *rawBytes = nil; CGPFieldDescriptor *extension = nil; @@ -1885,8 +1866,8 @@ static BOOL MergeMessageSetExtensionFromStream( if (extension != nil) { if (!MergeExtensionFromStream(stream, extension, registry, extensionMap)) return NO; } else { - CGPWireFormatSkipField( - stream, CGPWireFormatMakeTag(typeId, CGPWireFormatLengthDelimited)); + CGPWireFormatSkipField(stream, + CGPWireFormatMakeTag(typeId, CGPWireFormatLengthDelimited)); } } break; @@ -1900,9 +1881,9 @@ static BOOL MergeMessageSetExtensionFromStream( } } -static BOOL ParseUnknownField( - CGPCodedInputStream *stream, CGPDescriptor *descriptor, CGPExtensionRegistryLite *registry, - CGPExtensionMap *extensionMap, uint32_t tag) { +static BOOL ParseUnknownField(CGPCodedInputStream *stream, CGPDescriptor *descriptor, + CGPExtensionRegistryLite *registry, CGPExtensionMap *extensionMap, + uint32_t tag) { if (registry != nil && extensionMap != NULL) { uint32_t fieldNumber = CGPWireFormatGetTagFieldNumber(tag); CGPFieldDescriptor *field = CGPExtensionRegistryFind(registry, descriptor, fieldNumber); @@ -1926,9 +1907,8 @@ static BOOL ParseUnknownField( return CGPWireFormatSkipField(stream, tag); } -static BOOL MergeFieldFromStream( - id msg, CGPFieldDescriptor *field, CGPCodedInputStream *stream, - CGPExtensionRegistryLite *registry) { +static BOOL MergeFieldFromStream(id msg, CGPFieldDescriptor *field, CGPCodedInputStream *stream, + CGPExtensionRegistryLite *registry) { Class msgCls = object_getClass(msg); uintptr_t fieldPtr = (uintptr_t)msg + CGPFieldGetOffset(field, msgCls); BOOL repeated = CGPFieldIsRepeated(field); @@ -1941,31 +1921,31 @@ static BOOL MergeFieldFromStream( alreadyCleared = YES; } switch (CGPFieldGetType(field)) { -#define MERGE_FIELD_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - if (repeated) { \ - CGPRepeatedField *repeatedField = (CGPRepeatedField *)fieldPtr; \ - TYPE_##JAVA_NAME value; \ - if (CGPFieldIsPacked(field)) { \ - int length; \ - if (!CGPReadInt32(stream, &length)) return NO; \ - CGPRepeatedFieldReserveAdditionalCapacity( \ - repeatedField, length, sizeof(TYPE_##JAVA_NAME)); \ - CGPCodedInputStream::Limit limit = stream->PushLimit(length); \ - while (stream->BytesUntilLimit() > 0) { \ - if (!CGPRead##NAME(stream, &value)) return NO; \ - CGPRepeatedFieldAdd##JAVA_NAME(repeatedField, value); \ - } \ - stream->PopLimit(limit); \ - } else { \ - if (!CGPRead##NAME(stream, &value)) return NO; \ - CGPRepeatedFieldAdd##JAVA_NAME(repeatedField, value); \ - } \ - } else { \ - if (!CGPRead##NAME(stream, (TYPE_##JAVA_NAME *)fieldPtr)) return NO; \ - SetHas(msg, hasLoc); \ - } \ - return YES; +#define MERGE_FIELD_CASE(NAME, ENUM_NAME, JAVA_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ + if (repeated) { \ + CGPRepeatedField *repeatedField = (CGPRepeatedField *)fieldPtr; \ + TYPE_##JAVA_NAME value; \ + if (CGPFieldIsPacked(field)) { \ + int length; \ + if (!CGPReadInt32(stream, &length)) return NO; \ + CGPRepeatedFieldReserveAdditionalCapacity(repeatedField, length, \ + sizeof(TYPE_##JAVA_NAME)); \ + CGPCodedInputStream::Limit limit = stream->PushLimit(length); \ + while (stream->BytesUntilLimit() > 0) { \ + if (!CGPRead##NAME(stream, &value)) return NO; \ + CGPRepeatedFieldAdd##JAVA_NAME(repeatedField, value); \ + } \ + stream->PopLimit(limit); \ + } else { \ + if (!CGPRead##NAME(stream, &value)) return NO; \ + CGPRepeatedFieldAdd##JAVA_NAME(repeatedField, value); \ + } \ + } else { \ + if (!CGPRead##NAME(stream, (TYPE_##JAVA_NAME *)fieldPtr)) return NO; \ + SetHas(msg, hasLoc); \ + } \ + return YES; MERGE_FIELD_CASE(Int32, INT32, Int) MERGE_FIELD_CASE(Int32, UINT32, Int) MERGE_FIELD_CASE(Sint32, SINT32, Int) @@ -1979,109 +1959,104 @@ static BOOL MergeFieldFromStream( MERGE_FIELD_CASE(Bool, BOOL, Bool) MERGE_FIELD_CASE(Float, FLOAT, Float) MERGE_FIELD_CASE(Double, DOUBLE, Double) - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: - { - CGPEnumDescriptor *enumType = field->valueType_; - id value; - if (repeated) { - CGPRepeatedField *repeatedField = (CGPRepeatedField *)fieldPtr; - if (CGPFieldIsPacked(field)) { - int length; - if (!CGPReadInt32(stream, &length)) return NO; - CGPRepeatedFieldReserveAdditionalCapacity(repeatedField, length, sizeof(id)); - CGPCodedInputStream::Limit limit = stream->PushLimit(length); - while (stream->BytesUntilLimit() > 0) { - if (!ReadEnumJavaValue(stream, enumType, &value)) return NO; - if (value != nil) { - CGPRepeatedFieldAddEnum(repeatedField, value); - } - } \ - stream->PopLimit(limit); - } else { + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: { + CGPEnumDescriptor *enumType = field->valueType_; + id value; + if (repeated) { + CGPRepeatedField *repeatedField = (CGPRepeatedField *)fieldPtr; + if (CGPFieldIsPacked(field)) { + int length; + if (!CGPReadInt32(stream, &length)) return NO; + CGPRepeatedFieldReserveAdditionalCapacity(repeatedField, length, sizeof(id)); + CGPCodedInputStream::Limit limit = stream->PushLimit(length); + while (stream->BytesUntilLimit() > 0) { if (!ReadEnumJavaValue(stream, enumType, &value)) return NO; if (value != nil) { CGPRepeatedFieldAddEnum(repeatedField, value); } } + stream->PopLimit(limit); } else { if (!ReadEnumJavaValue(stream, enumType, &value)) return NO; - if (value == nil) return YES; // Skip setting has-bit. - *(id *)fieldPtr = value; - SetHas(msg, hasLoc); + if (value != nil) { + CGPRepeatedFieldAddEnum(repeatedField, value); + } } + } else { + if (!ReadEnumJavaValue(stream, enumType, &value)) return NO; + if (value == nil) return YES; // Skip setting has-bit. + *(id *)fieldPtr = value; + SetHas(msg, hasLoc); } + } return YES; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: - { - CGPByteString *value; - if (!stream->ReadRetainedByteString(&value)) return NO; - if (repeated) { - CGPRepeatedFieldAddRetainedId((CGPRepeatedField *)fieldPtr, value); - } else { - id *ptr = (id *)fieldPtr; - if (!alreadyCleared) { - AUTORELEASE(*ptr); - } - *ptr = value; - SetHas(msg, hasLoc); + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: { + CGPByteString *value; + if (!stream->ReadRetainedByteString(&value)) return NO; + if (repeated) { + CGPRepeatedFieldAddRetainedId((CGPRepeatedField *)fieldPtr, value); + } else { + id *ptr = (id *)fieldPtr; + if (!alreadyCleared) { + AUTORELEASE(*ptr); } + *ptr = value; + SetHas(msg, hasLoc); } + } return YES; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: - { - NSString *value; - if (!stream->ReadRetainedNSString(&value)) return NO; - if (repeated) { - CGPRepeatedFieldAddRetainedId((CGPRepeatedField *)fieldPtr, value); - } else { - id *ptr = (id *)fieldPtr; - if (!alreadyCleared) { - AUTORELEASE(*ptr); - } - *ptr = value; - SetHas(msg, hasLoc); + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: { + NSString *value; + if (!stream->ReadRetainedNSString(&value)) return NO; + if (repeated) { + CGPRepeatedFieldAddRetainedId((CGPRepeatedField *)fieldPtr, value); + } else { + id *ptr = (id *)fieldPtr; + if (!alreadyCleared) { + AUTORELEASE(*ptr); } + *ptr = value; + SetHas(msg, hasLoc); } + } return YES; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: isGroup = YES; FALLTHROUGH_INTENDED; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - CGPDescriptor *fieldType = field->valueType_; - if (CGPFieldIsMap(field)) { - return MergeMapEntryFromStream((CGPMapField *)fieldPtr, stream, fieldType, registry); - } - ComGoogleProtobufGeneratedMessage *msgField = CGPNewMessage(fieldType); - if (repeated) { - CGPRepeatedFieldAddRetainedId((CGPRepeatedField *)fieldPtr, msgField); - } else { - id *ptr = (id *)fieldPtr; - if (GetHas(msg, hasLoc)) { - CopyMessage(msgField, MessageExtensionMap(msgField, fieldType), - *ptr, MessageExtensionMap(*ptr, fieldType), fieldType); - } - if (!alreadyCleared) { - AUTORELEASE(*ptr); - } - *ptr = msgField; - SetHas(msg, hasLoc); + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + CGPDescriptor *fieldType = field->valueType_; + if (CGPFieldIsMap(field)) { + return MergeMapEntryFromStream((CGPMapField *)fieldPtr, stream, fieldType, registry); + } + ComGoogleProtobufGeneratedMessage *msgField = CGPNewMessage(fieldType); + if (repeated) { + CGPRepeatedFieldAddRetainedId((CGPRepeatedField *)fieldPtr, msgField); + } else { + id *ptr = (id *)fieldPtr; + if (GetHas(msg, hasLoc)) { + CopyMessage(msgField, MessageExtensionMap(msgField, fieldType), *ptr, + MessageExtensionMap(*ptr, fieldType), fieldType); } - if (isGroup) { - if (!MergeGroupFieldFromStream(msgField, field, stream, registry)) return NO; - } else { - if (!MergeMessageFieldFromStream(msgField, field, stream, registry)) return NO; + if (!alreadyCleared) { + AUTORELEASE(*ptr); } + *ptr = msgField; + SetHas(msg, hasLoc); } + if (isGroup) { + if (!MergeGroupFieldFromStream(msgField, field, stream, registry)) return NO; + } else { + if (!MergeMessageFieldFromStream(msgField, field, stream, registry)) return NO; + } + } return YES; } #undef MERGE_FIELD_CASE __builtin_unreachable(); } -static BOOL MergeFromStream( - id msg, CGPDescriptor *descriptor, CGPCodedInputStream *stream, - CGPExtensionRegistryLite *registry, CGPExtensionMap *extensionMap) { +static BOOL MergeFromStream(id msg, CGPDescriptor *descriptor, CGPCodedInputStream *stream, + CGPExtensionRegistryLite *registry, CGPExtensionMap *extensionMap) { NSUInteger index = 0; NSUInteger fieldsCount = descriptor->fields_->size_; CGPFieldDescriptor **fieldsBuf = descriptor->fields_->buffer_; @@ -2119,41 +2094,44 @@ static void InvalidPB() { void CGPMergeFromRawData(id msg, CGPDescriptor *descriptor, const char *data, uint32_t length) { CGPCodedInputStream codedStream(data, length); - BOOL success = MergeFromStream(msg, descriptor, &codedStream, nil, nil) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(msg, descriptor, &codedStream, nil, nil) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } } -ComGoogleProtobufGeneratedMessage *CGPParseFromByteArray( - CGPDescriptor *descriptor, IOSByteArray *bytes, CGPExtensionRegistryLite *registry) { +ComGoogleProtobufGeneratedMessage *CGPParseFromByteArray(CGPDescriptor *descriptor, + IOSByteArray *bytes, + CGPExtensionRegistryLite *registry) { ComGoogleProtobufGeneratedMessage *msg = AUTORELEASE(CGPNewMessage(descriptor)); CGPCodedInputStream codedStream(bytes->buffer_, (int)bytes->size_); - BOOL success = - MergeFromStream(msg, descriptor, &codedStream, registry, MessageExtensionMap(msg, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(msg, descriptor, &codedStream, registry, + MessageExtensionMap(msg, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } return msg; } -ComGoogleProtobufGeneratedMessage *CGPParseFromInputStream( - CGPDescriptor *descriptor, JavaIoInputStream *input, CGPExtensionRegistryLite *registry) { +ComGoogleProtobufGeneratedMessage *CGPParseFromInputStream(CGPDescriptor *descriptor, + JavaIoInputStream *input, + CGPExtensionRegistryLite *registry) { ComGoogleProtobufGeneratedMessage *msg = AUTORELEASE(CGPNewMessage(descriptor)); CGPCodedInputStream codedStream(input, INT_MAX); - BOOL success = - MergeFromStream(msg, descriptor, &codedStream, registry, MessageExtensionMap(msg, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(msg, descriptor, &codedStream, registry, + MessageExtensionMap(msg, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } return msg; } -ComGoogleProtobufGeneratedMessage *CGPParseFromByteString( - CGPDescriptor *descriptor, CGPByteString *byteString, CGPExtensionRegistryLite *registry) { +ComGoogleProtobufGeneratedMessage *CGPParseFromByteString(CGPDescriptor *descriptor, + CGPByteString *byteString, + CGPExtensionRegistryLite *registry) { return CGPParseFromByteArray(descriptor, [byteString toByteArray], registry); } @@ -2167,25 +2145,24 @@ void CGPMergeFromRawData(id msg, CGPDescriptor *descriptor, const char *data, ui if (!CGPCodedInputStream::ReadVarint32(firstByte, input, &length)) InvalidPB(); ComGoogleProtobufGeneratedMessage *msg = AUTORELEASE(CGPNewMessage(descriptor)); CGPCodedInputStream codedStream(input, length); - BOOL success = - MergeFromStream(msg, descriptor, &codedStream, registry, MessageExtensionMap(msg, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(msg, descriptor, &codedStream, registry, + MessageExtensionMap(msg, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } return msg; } - // ***************************************************************************** // ********** Computing serialized size **************************************** // ***************************************************************************** static int SerializedSizeForSingularExtensionValue(CGPFieldDescriptor *field, id value) { switch (CGPFieldGetType(field)) { -#define EXT_SIZE_VARIABLE_LENGTH_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - return CGPGet##NAME##Size(CGPFromReflectionType##JAVA_NAME(value)); +#define EXT_SIZE_VARIABLE_LENGTH_CASE(NAME, ENUM_NAME, JAVA_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ + return CGPGet##NAME##Size(CGPFromReflectionType##JAVA_NAME(value)); EXT_SIZE_VARIABLE_LENGTH_CASE(Int32, INT32, Int) EXT_SIZE_VARIABLE_LENGTH_CASE(Uint32, UINT32, Int) EXT_SIZE_VARIABLE_LENGTH_CASE(Sint32, SINT32, Int) @@ -2210,11 +2187,10 @@ static int SerializedSizeForSingularExtensionValue(CGPFieldDescriptor *field, id return CGPGetStringSize(value); case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: return SerializedSizeForMessage(value, field->valueType_) + CGPGetTagSize(field->tag_); - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - int msgSize = SerializedSizeForMessage(value, field->valueType_); - return CGPGetInt32Size(msgSize) + msgSize; - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + int msgSize = SerializedSizeForMessage(value, field->valueType_); + return CGPGetInt32Size(msgSize) + msgSize; + } } #undef EXT_SIZE_VARIABLE_LENGTH_CASE __builtin_unreachable(); @@ -2248,9 +2224,10 @@ static int SerializedSizeForExtensionValue(CGPFieldDescriptor *field, id value) static int SerializedSizeForMessageSetExtension(CGPFieldDescriptor *field, id value) { int msgSize = SerializedSizeForMessage(value, field->valueType_); - return CGPGetTagSize(CGPWireFormatMessageSetItemTag) * 2 - + CGPGetTagSize(CGPWireFormatMessageSetTypeIdTag) + CGPGetUint32Size(CGPFieldGetNumber(field)) - + CGPGetTagSize(CGPWireFormatMessageSetMessageTag) + CGPGetUint32Size(msgSize) + msgSize; + return CGPGetTagSize(CGPWireFormatMessageSetItemTag) * 2 + + CGPGetTagSize(CGPWireFormatMessageSetTypeIdTag) + + CGPGetUint32Size(CGPFieldGetNumber(field)) + + CGPGetTagSize(CGPWireFormatMessageSetMessageTag) + CGPGetUint32Size(msgSize) + msgSize; } static int SerializedSizeForExtensions(CGPDescriptor *descriptor, CGPExtensionMap *extensionMap) { @@ -2296,16 +2273,14 @@ static int SerializedSizeForMapEntryField(CGPFieldDescriptor *field, CGPValue va return tagSize + CGPGetBytesSize(value.valueId); case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: return tagSize + CGPGetStringSize(value.valueId); - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: - { - int msgSize = SerializedSizeForMessage(value.valueId, field->valueType_); - return tagSize * 2 + msgSize; - } - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - int msgSize = SerializedSizeForMessage(value.valueId, field->valueType_); - return tagSize + CGPGetInt32Size(msgSize) + msgSize; - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: { + int msgSize = SerializedSizeForMessage(value.valueId, field->valueType_); + return tagSize * 2 + msgSize; + } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + int msgSize = SerializedSizeForMessage(value.valueId, field->valueType_); + return tagSize + CGPGetInt32Size(msgSize) + msgSize; + } } __builtin_unreachable(); } @@ -2326,7 +2301,7 @@ static int SerializedSizeForMapField(id msg, CGPFieldDescriptor *field) { CGPMapFieldEntry *entry = data->header.next; while (entry != &data->header) { int entrySize = SerializedSizeForMapEntryField(keyField, entry->key) + - SerializedSizeForMapEntryField(valueField, entry->value); + SerializedSizeForMapEntryField(valueField, entry->value); entriesSize += CGPGetInt32Size(entrySize) + entrySize; numEntries++; entry = entry->next; @@ -2348,14 +2323,12 @@ static int SerializedSizeForRepeatedField(id msg, CGPFieldDescriptor *field) { switch (CGPFieldGetType(field)) { #define REPEATED_FIELD_SIZE_VARIABLE_LENGTH_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - { \ - TYPE_##JAVA_NAME *buffer = (TYPE_##JAVA_NAME *)data->buffer; \ - for (uint32_t i = 0; i < arrayLen; i++) { \ - arraySize += CGPGet##NAME##Size(buffer[i]); \ - } \ - } \ - break; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: { \ + TYPE_##JAVA_NAME *buffer = (TYPE_##JAVA_NAME *)data->buffer; \ + for (uint32_t i = 0; i < arrayLen; i++) { \ + arraySize += CGPGet##NAME##Size(buffer[i]); \ + } \ + } break; REPEATED_FIELD_SIZE_VARIABLE_LENGTH_CASE(Int32, INT32, Int) REPEATED_FIELD_SIZE_VARIABLE_LENGTH_CASE(Uint32, UINT32, Int) REPEATED_FIELD_SIZE_VARIABLE_LENGTH_CASE(Sint32, SINT32, Int) @@ -2375,49 +2348,39 @@ static int SerializedSizeForRepeatedField(id msg, CGPFieldDescriptor *field) { case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BOOL: arraySize = arrayLen; break; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: - { - CGPEnumDescriptor *enumType = field->valueType_; - id *buffer = (id *)data->buffer; - for (uint32_t i = 0; i < arrayLen; i++) { - arraySize += CGPGetEnumSize(CGPEnumGetIntValue(enumType, buffer[i])); - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: { + CGPEnumDescriptor *enumType = field->valueType_; + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + arraySize += CGPGetEnumSize(CGPEnumGetIntValue(enumType, buffer[i])); } - break; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: - { - id *buffer = (id *)data->buffer; - for (uint32_t i = 0; i < arrayLen; i++) { - arraySize += CGPGetBytesSize(buffer[i]); - } + } break; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + arraySize += CGPGetBytesSize(buffer[i]); } - break; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: - { - id *buffer = (id *)data->buffer; - for (uint32_t i = 0; i < arrayLen; i++) { - arraySize += CGPGetStringSize(buffer[i]); - } + } break; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + arraySize += CGPGetStringSize(buffer[i]); } - break; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: - { - id *buffer = (id *)data->buffer; - for (uint32_t i = 0; i < arrayLen; i++) { - arraySize += SerializedSizeForMessage(buffer[i], field->valueType_); - } - arraySize += arrayLen * tagSize; // End group tags. + } break; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + arraySize += SerializedSizeForMessage(buffer[i], field->valueType_); } - break; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - id *buffer = (id *)data->buffer; - for (uint32_t i = 0; i < arrayLen; i++) { - int msgSize = SerializedSizeForMessage(buffer[i], field->valueType_); - arraySize += CGPGetInt32Size(msgSize) + msgSize; - } + arraySize += arrayLen * tagSize; // End group tags. + } break; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + int msgSize = SerializedSizeForMessage(buffer[i], field->valueType_); + arraySize += CGPGetInt32Size(msgSize) + msgSize; } - break; + } break; } if (CGPFieldIsPacked(field)) { @@ -2439,9 +2402,9 @@ static int SerializedSizeForSingularField(id msg, CGPFieldDescriptor *field) { size_t offset = CGPFieldGetOffset(field, msgCls); switch (CGPFieldGetType(field)) { -#define SINGULAR_FIELD_SIZE_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - return tagSize + CGPGet##NAME##Size(*FIELD_PTR(TYPE_##JAVA_NAME, msg, offset)); +#define SINGULAR_FIELD_SIZE_CASE(NAME, ENUM_NAME, JAVA_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ + return tagSize + CGPGet##NAME##Size(*FIELD_PTR(TYPE_##JAVA_NAME, msg, offset)); SINGULAR_FIELD_SIZE_CASE(Int32, INT32, Int) SINGULAR_FIELD_SIZE_CASE(Uint32, UINT32, Int) SINGULAR_FIELD_SIZE_CASE(Sint32, SINT32, Int) @@ -2459,29 +2422,27 @@ static int SerializedSizeForSingularField(id msg, CGPFieldDescriptor *field) { case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BOOL: return tagSize + 1; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: - return tagSize + CGPGetEnumSize(CGPEnumGetIntValue( - field->valueType_, *FIELD_PTR(id, msg, offset))); + return tagSize + + CGPGetEnumSize(CGPEnumGetIntValue(field->valueType_, *FIELD_PTR(id, msg, offset))); case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: return tagSize + CGPGetBytesSize(*FIELD_PTR(id, msg, offset)); case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: return tagSize + CGPGetStringSize(*FIELD_PTR(id, msg, offset)); - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: - { - int msgSize = SerializedSizeForMessage(*FIELD_PTR(id, msg, offset), field->valueType_); - return tagSize * 2 + msgSize; - } - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - int msgSize = SerializedSizeForMessage(*FIELD_PTR(id, msg, offset), field->valueType_); - return tagSize + CGPGetInt32Size(msgSize) + msgSize; - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: { + int msgSize = SerializedSizeForMessage(*FIELD_PTR(id, msg, offset), field->valueType_); + return tagSize * 2 + msgSize; + } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + int msgSize = SerializedSizeForMessage(*FIELD_PTR(id, msg, offset), field->valueType_); + return tagSize + CGPGetInt32Size(msgSize) + msgSize; + } } #undef SINGULAR_FIELD_SIZE_CASE __builtin_unreachable(); } -static int ComputeSerializedSizeForMessage( - ComGoogleProtobufGeneratedMessage *msg, CGPDescriptor *descriptor) { +static int ComputeSerializedSizeForMessage(ComGoogleProtobufGeneratedMessage *msg, + CGPDescriptor *descriptor) { int size = 0; NSUInteger fieldsCount = descriptor->fields_->size_; CGPFieldDescriptor **fieldsBuf = descriptor->fields_->buffer_; @@ -2503,8 +2464,8 @@ static int ComputeSerializedSizeForMessage( return size; } -static inline int SerializedSizeForMessage( - ComGoogleProtobufGeneratedMessage *msg, CGPDescriptor *descriptor) { +static inline int SerializedSizeForMessage(ComGoogleProtobufGeneratedMessage *msg, + CGPDescriptor *descriptor) { // Assuming that reading and writing an int field is atomic. int size = msg->memoizedSize_; if (size != -1) { @@ -2513,18 +2474,17 @@ static inline int SerializedSizeForMessage( return ComputeSerializedSizeForMessage(msg, descriptor); } - // ***************************************************************************** // ********** Serializing ****************************************************** // ***************************************************************************** -static void WriteSingularExtensionValue( - CGPFieldDescriptor *field, id value, CGPCodedOutputStream *output) { +static void WriteSingularExtensionValue(CGPFieldDescriptor *field, id value, + CGPCodedOutputStream *output) { switch (CGPFieldGetType(field)) { -#define WRITE_SINGULAR_EXTENSION_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - CGPWrite##NAME(CGPFromReflectionType##JAVA_NAME(value), output); \ - return; +#define WRITE_SINGULAR_EXTENSION_CASE(NAME, ENUM_NAME, JAVA_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ + CGPWrite##NAME(CGPFromReflectionType##JAVA_NAME(value), output); \ + return; WRITE_SINGULAR_EXTENSION_CASE(Int32, INT32, Int) WRITE_SINGULAR_EXTENSION_CASE(Uint32, UINT32, Int) WRITE_SINGULAR_EXTENSION_CASE(Sint32, SINT32, Int) @@ -2587,8 +2547,8 @@ static void WriteExtension(CGPFieldDescriptor *field, id value, CGPCodedOutputSt } } -static void WriteMessageSetExtension( - CGPFieldDescriptor *field, id value, CGPCodedOutputStream *output) { +static void WriteMessageSetExtension(CGPFieldDescriptor *field, id value, + CGPCodedOutputStream *output) { output->WriteTag(CGPWireFormatMessageSetItemTag); output->WriteTag(CGPWireFormatMessageSetTypeIdTag); CGPWriteUint32(CGPFieldGetNumber(field), output); @@ -2607,25 +2567,25 @@ static void WriteSingularField(id msg, CGPFieldDescriptor *field, CGPCodedOutput output->WriteTag(field->tag_); switch (CGPFieldGetType(field)) { -#define WRITE_SINGULAR_FIELD_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - CGPWrite##NAME(*FIELD_PTR(TYPE_##JAVA_NAME, msg, offset), output); \ - return; - WRITE_SINGULAR_FIELD_CASE(Int32, INT32, Int) - WRITE_SINGULAR_FIELD_CASE(Uint32, UINT32, Int) - WRITE_SINGULAR_FIELD_CASE(Sint32, SINT32, Int) - WRITE_SINGULAR_FIELD_CASE(Fixed32, FIXED32, Int) - WRITE_SINGULAR_FIELD_CASE(Fixed32, SFIXED32, Int) - WRITE_SINGULAR_FIELD_CASE(Int64, INT64, Long) - WRITE_SINGULAR_FIELD_CASE(Int64, UINT64, Long) - WRITE_SINGULAR_FIELD_CASE(Sint64, SINT64, Long) - WRITE_SINGULAR_FIELD_CASE(Fixed64, FIXED64, Long) - WRITE_SINGULAR_FIELD_CASE(Fixed64, SFIXED64, Long) - WRITE_SINGULAR_FIELD_CASE(Bool, BOOL, Bool) - WRITE_SINGULAR_FIELD_CASE(Float, FLOAT, Float) - WRITE_SINGULAR_FIELD_CASE(Double, DOUBLE, Double) - WRITE_SINGULAR_FIELD_CASE(Bytes, BYTES, Id) - WRITE_SINGULAR_FIELD_CASE(String, STRING, Id) +#define WRITE_SINGULAR_FIELD_CASE(NAME, ENUM_NAME, JAVA_NAME) \ + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ + CGPWrite##NAME(*FIELD_PTR(TYPE_##JAVA_NAME, msg, offset), output); \ + return; + WRITE_SINGULAR_FIELD_CASE(Int32, INT32, Int) + WRITE_SINGULAR_FIELD_CASE(Uint32, UINT32, Int) + WRITE_SINGULAR_FIELD_CASE(Sint32, SINT32, Int) + WRITE_SINGULAR_FIELD_CASE(Fixed32, FIXED32, Int) + WRITE_SINGULAR_FIELD_CASE(Fixed32, SFIXED32, Int) + WRITE_SINGULAR_FIELD_CASE(Int64, INT64, Long) + WRITE_SINGULAR_FIELD_CASE(Int64, UINT64, Long) + WRITE_SINGULAR_FIELD_CASE(Sint64, SINT64, Long) + WRITE_SINGULAR_FIELD_CASE(Fixed64, FIXED64, Long) + WRITE_SINGULAR_FIELD_CASE(Fixed64, SFIXED64, Long) + WRITE_SINGULAR_FIELD_CASE(Bool, BOOL, Bool) + WRITE_SINGULAR_FIELD_CASE(Float, FLOAT, Float) + WRITE_SINGULAR_FIELD_CASE(Double, DOUBLE, Double) + WRITE_SINGULAR_FIELD_CASE(Bytes, BYTES, Id) + WRITE_SINGULAR_FIELD_CASE(String, STRING, Id) case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: CGPWriteEnum(CGPEnumGetIntValue(field->valueType_, *FIELD_PTR(id, msg, offset)), output); return; @@ -2633,20 +2593,19 @@ static void WriteSingularField(id msg, CGPFieldDescriptor *field, CGPCodedOutput WriteMessage(*FIELD_PTR(id, msg, offset), field->valueType_, output); output->WriteTag(CGPWireFormatMakeTag(CGPFieldGetNumber(field), CGPWireFormatEndGroup)); return; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - id msgField = *FIELD_PTR(id, msg, offset); - CGPDescriptor *msgDescriptor = field->valueType_; - CGPWriteInt32(SerializedSizeForMessage(msgField, msgDescriptor), output); - WriteMessage(msgField, msgDescriptor, output); - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + id msgField = *FIELD_PTR(id, msg, offset); + CGPDescriptor *msgDescriptor = field->valueType_; + CGPWriteInt32(SerializedSizeForMessage(msgField, msgDescriptor), output); + WriteMessage(msgField, msgDescriptor, output); + } return; } #undef WRITE_SINGULAR_FIELD_CASE } -static void WriteMapEntryField( - CGPFieldDescriptor *field, CGPValue value, CGPCodedOutputStream *output) { +static void WriteMapEntryField(CGPFieldDescriptor *field, CGPValue value, + CGPCodedOutputStream *output) { output->WriteTag(field->tag_); switch (CGPFieldGetType(field)) { case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_INT32: @@ -2715,7 +2674,7 @@ static void WriteMapField(id msg, CGPFieldDescriptor *field, CGPCodedOutputStrea CGPMapFieldEntry *entry = data->header.next; while (entry != &data->header) { int entrySize = SerializedSizeForMapEntryField(keyField, entry->key) + - SerializedSizeForMapEntryField(valueField, entry->value); + SerializedSizeForMapEntryField(valueField, entry->value); output->WriteTag(field->tag_); CGPWriteInt32(entrySize, output); WriteMapEntryField(CGPFieldMapKey(field), entry->key, output); @@ -2724,7 +2683,6 @@ static void WriteMapField(id msg, CGPFieldDescriptor *field, CGPCodedOutputStrea } } - static void WriteRepeatedField(id msg, CGPFieldDescriptor *field, CGPCodedOutputStream *output) { Class msgCls = object_getClass(msg); size_t offset = CGPFieldGetOffset(field, msgCls); @@ -2736,122 +2694,115 @@ static void WriteRepeatedField(id msg, CGPFieldDescriptor *field, CGPCodedOutput switch (CGPFieldGetType(field)) { #define WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(NAME, ENUM_NAME, JAVA_NAME) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - { \ - TYPE_##JAVA_NAME *buffer = (TYPE_##JAVA_NAME *)data->buffer; \ - if (CGPFieldIsPacked(field)) { \ - int arraySize = 0; \ - for (uint32_t i = 0; i < arrayLen; i++) { \ - arraySize += CGPGet##NAME##Size(buffer[i]); \ - } \ - output->WriteTag(field->tag_); \ - CGPWriteInt32(arraySize, output); \ - for (uint32_t i = 0; i < arrayLen; i++) { \ - CGPWrite##NAME(buffer[i], output); \ - } \ - } else { \ - for (uint32_t i = 0; i < arrayLen; i++) { \ - output->WriteTag(field->tag_); \ - CGPWrite##NAME(buffer[i], output); \ - } \ - } \ - } \ - return; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: { \ + TYPE_##JAVA_NAME *buffer = (TYPE_##JAVA_NAME *)data->buffer; \ + if (CGPFieldIsPacked(field)) { \ + int arraySize = 0; \ + for (uint32_t i = 0; i < arrayLen; i++) { \ + arraySize += CGPGet##NAME##Size(buffer[i]); \ + } \ + output->WriteTag(field->tag_); \ + CGPWriteInt32(arraySize, output); \ + for (uint32_t i = 0; i < arrayLen; i++) { \ + CGPWrite##NAME(buffer[i], output); \ + } \ + } else { \ + for (uint32_t i = 0; i < arrayLen; i++) { \ + output->WriteTag(field->tag_); \ + CGPWrite##NAME(buffer[i], output); \ + } \ + } \ + } \ + return; #define WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(NAME, ENUM_NAME, JAVA_NAME, SIZE) \ - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: \ - { \ - TYPE_##JAVA_NAME *buffer = (TYPE_##JAVA_NAME *)data->buffer; \ - if (CGPFieldIsPacked(field)) { \ - output->WriteTag(field->tag_); \ - CGPWriteInt32(arrayLen * SIZE, output); \ - for (uint32_t i = 0; i < arrayLen; i++) { \ - CGPWrite##NAME(buffer[i], output); \ - } \ - } else { \ - for (uint32_t i = 0; i < arrayLen; i++) { \ - output->WriteTag(field->tag_); \ - CGPWrite##NAME(buffer[i], output); \ - } \ - } \ - } \ - return; - WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Int32, INT32, Int) - WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Uint32, UINT32, Int) - WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Sint32, SINT32, Int) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed32, FIXED32, Int, sizeof(uint32_t)) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed32, SFIXED32, Int, sizeof(uint32_t)) - WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Int64, INT64, Long) - WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Int64, UINT64, Long) - WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Sint64, SINT64, Long) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed64, FIXED64, Long, sizeof(uint64_t)) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed64, SFIXED64, Long, sizeof(uint64_t)) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Bool, BOOL, Bool, 1) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Float, FLOAT, Float, sizeof(uint32_t)) - WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Double, DOUBLE, Double, sizeof(uint64_t)) - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: - { - id *buffer = (id *)data->buffer; - CGPEnumDescriptor *enumType = field->valueType_; - if (CGPFieldIsPacked(field)) { - std::vector intValues(arrayLen); - int arraySize = 0; - for (uint32_t i = 0; i < arrayLen; i++) { - intValues[i] = CGPEnumGetIntValue(enumType, buffer[i]); - arraySize += CGPGetEnumSize(intValues[i]); - } - output->WriteTag(field->tag_); - CGPWriteInt32(arraySize, output); - for (uint32_t i = 0; i < arrayLen; i++) { - CGPWriteEnum(intValues[i], output); - } - } else { - for (uint32_t i = 0; i < arrayLen; i++) { - output->WriteTag(field->tag_); - CGPWriteEnum(CGPEnumGetIntValue(enumType, buffer[i]), output); - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_##ENUM_NAME: { \ + TYPE_##JAVA_NAME *buffer = (TYPE_##JAVA_NAME *)data->buffer; \ + if (CGPFieldIsPacked(field)) { \ + output->WriteTag(field->tag_); \ + CGPWriteInt32(arrayLen * SIZE, output); \ + for (uint32_t i = 0; i < arrayLen; i++) { \ + CGPWrite##NAME(buffer[i], output); \ + } \ + } else { \ + for (uint32_t i = 0; i < arrayLen; i++) { \ + output->WriteTag(field->tag_); \ + CGPWrite##NAME(buffer[i], output); \ + } \ + } \ + } \ + return; + WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Int32, INT32, Int) + WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Uint32, UINT32, Int) + WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Sint32, SINT32, Int) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed32, FIXED32, Int, sizeof(uint32_t)) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed32, SFIXED32, Int, sizeof(uint32_t)) + WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Int64, INT64, Long) + WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Int64, UINT64, Long) + WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE(Sint64, SINT64, Long) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed64, FIXED64, Long, sizeof(uint64_t)) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Fixed64, SFIXED64, Long, sizeof(uint64_t)) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Bool, BOOL, Bool, 1) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Float, FLOAT, Float, sizeof(uint32_t)) + WRITE_REPEATED_FIELD_FIXED_LENGTH_CASE(Double, DOUBLE, Double, sizeof(uint64_t)) + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: { + id *buffer = (id *)data->buffer; + CGPEnumDescriptor *enumType = field->valueType_; + if (CGPFieldIsPacked(field)) { + std::vector intValues(arrayLen); + int arraySize = 0; + for (uint32_t i = 0; i < arrayLen; i++) { + intValues[i] = CGPEnumGetIntValue(enumType, buffer[i]); + arraySize += CGPGetEnumSize(intValues[i]); } - } - return; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: - { - id *buffer = (id *)data->buffer; + output->WriteTag(field->tag_); + CGPWriteInt32(arraySize, output); for (uint32_t i = 0; i < arrayLen; i++) { - output->WriteTag(field->tag_); - CGPWriteBytes(buffer[i], output); + CGPWriteEnum(intValues[i], output); } - } - return; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: - { - id *buffer = (id *)data->buffer; + } else { for (uint32_t i = 0; i < arrayLen; i++) { output->WriteTag(field->tag_); - CGPWriteString(buffer[i], output); + CGPWriteEnum(CGPEnumGetIntValue(enumType, buffer[i]), output); } } + } return; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: - { - id *buffer = (id *)data->buffer; - CGPDescriptor *msgType = field->valueType_; - uint32_t endTag = CGPWireFormatMakeTag(CGPFieldGetNumber(field), CGPWireFormatEndGroup); - for (uint32_t i = 0; i < arrayLen; i++) { - output->WriteTag(field->tag_); - WriteMessage(buffer[i], msgType, output); - output->WriteTag(endTag); - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + output->WriteTag(field->tag_); + CGPWriteBytes(buffer[i], output); } + } return; - case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: - { - id *buffer = (id *)data->buffer; - for (uint32_t i = 0; i < arrayLen; i++) { - id elem = buffer[i]; - output->WriteTag(field->tag_); - CGPWriteInt32(SerializedSizeForMessage(elem, field->valueType_), output); - WriteMessage(elem, field->valueType_, output); - } + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_STRING: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + output->WriteTag(field->tag_); + CGPWriteString(buffer[i], output); } + } + return; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_GROUP: { + id *buffer = (id *)data->buffer; + CGPDescriptor *msgType = field->valueType_; + uint32_t endTag = CGPWireFormatMakeTag(CGPFieldGetNumber(field), CGPWireFormatEndGroup); + for (uint32_t i = 0; i < arrayLen; i++) { + output->WriteTag(field->tag_); + WriteMessage(buffer[i], msgType, output); + output->WriteTag(endTag); + } + } + return; + case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_MESSAGE: { + id *buffer = (id *)data->buffer; + for (uint32_t i = 0; i < arrayLen; i++) { + id elem = buffer[i]; + output->WriteTag(field->tag_); + CGPWriteInt32(SerializedSizeForMessage(elem, field->valueType_), output); + WriteMessage(elem, field->valueType_, output); + } + } return; } #undef WRITE_REPEATED_FIELD_VARIABLE_LENGTH_CASE @@ -2885,9 +2836,9 @@ static void WriteMessage(id msg, CGPDescriptor *descriptor, CGPCodedOutputStream nextField = fieldsBuf[fieldIndex++]; } while (nextField != nil || nextExtension != extensionMap->end()) { - if (nextExtension == extensionMap->end() - || (nextField != nil - && CGPFieldGetNumber(nextField) < CGPFieldGetNumber(nextExtension->first))) { + if (nextExtension == extensionMap->end() || + (nextField != nil && + CGPFieldGetNumber(nextField) < CGPFieldGetNumber(nextExtension->first))) { WriteField(msg, nextField, output); if (fieldIndex == fieldsCount) { nextField = nil; @@ -2906,7 +2857,6 @@ static void WriteMessage(id msg, CGPDescriptor *descriptor, CGPCodedOutputStream } } - // ***************************************************************************** // ********** isInitialized **************************************************** // ***************************************************************************** @@ -2923,8 +2873,8 @@ static BOOL MessageIsInitialized(id msg, CGPDescriptor *descriptor) { CGPMapFieldData *data = MAP_FIELD_PTR(msg, offset)->data; if (data != NULL) { CGPDescriptor *msgType = valueField->valueType_; - CGPMapFieldEnsureValidMap( - data, CGPFieldGetJavaType(CGPFieldMapKey(field)), CGPFieldGetJavaType(valueField)); + CGPMapFieldEnsureValidMap(data, CGPFieldGetJavaType(CGPFieldMapKey(field)), + CGPFieldGetJavaType(valueField)); CGPMapFieldEntry *entry = data->header.next; while (entry != &data->header) { if (entry != NULL && !MessageIsInitialized(entry->value.valueId, msgType)) { @@ -2965,7 +2915,6 @@ static BOOL MessageIsInitialized(id msg, CGPDescriptor *descriptor) { return YES; } - // ***************************************************************************** // ********** toString ********************************************************* // ***************************************************************************** @@ -2978,34 +2927,44 @@ static BOOL MessageIsInitialized(id msg, CGPDescriptor *descriptor) { for (int i = 0; i < length; i++) { int8_t b = buffer[i]; switch (b) { - case (int) 0x07: - [builder appendWithNSString:@"\\a"]; break; + case (int)0x07: + [builder appendWithNSString:@"\\a"]; + break; case 0x0008: - [builder appendWithNSString:@"\\b"]; break; + [builder appendWithNSString:@"\\b"]; + break; case 0x000c: - [builder appendWithNSString:@"\\f"]; break; + [builder appendWithNSString:@"\\f"]; + break; case 0x000a: - [builder appendWithNSString:@"\\n"]; break; + [builder appendWithNSString:@"\\n"]; + break; case 0x000d: - [builder appendWithNSString:@"\\r"]; break; + [builder appendWithNSString:@"\\r"]; + break; case 0x0009: - [builder appendWithNSString:@"\\t"]; break; - case (int) 0x0b: - [builder appendWithNSString:@"\\v"]; break; + [builder appendWithNSString:@"\\t"]; + break; + case (int)0x0b: + [builder appendWithNSString:@"\\v"]; + break; case '\\': - [builder appendWithNSString:@"\\\\"]; break; + [builder appendWithNSString:@"\\\\"]; + break; case '\'': - [builder appendWithNSString:@"\\'"]; break; + [builder appendWithNSString:@"\\'"]; + break; case '"': - [builder appendWithNSString:@"\\\""]; break; + [builder appendWithNSString:@"\\\""]; + break; default: - if (b >= (int) 0x20) { - [builder appendWithChar:(unichar) b]; + if (b >= (int)0x20) { + [builder appendWithChar:(unichar)b]; } else { [builder appendWithChar:'\\']; - [builder appendWithChar:(unichar) ('0' + (((char) (((unsigned char) b) >> 6)) & 3))]; - [builder appendWithChar:(unichar) ('0' + (((char) (((unsigned char) b) >> 3)) & 7))]; - [builder appendWithChar:(unichar) ('0' + (b & 7))]; + [builder appendWithChar:(unichar)('0' + (((char)(((unsigned char)b) >> 6)) & 3))]; + [builder appendWithChar:(unichar)('0' + (((char)(((unsigned char)b) >> 3)) & 7))]; + [builder appendWithChar:(unichar)('0' + (b & 7))]; } break; } @@ -3013,9 +2972,8 @@ static BOOL MessageIsInitialized(id msg, CGPDescriptor *descriptor) { return [builder description]; } -static void ExtensionFieldToString( - id value, CGPFieldDescriptor *field, NSMutableString *builder, const char *padding, - int indent) { +static void ExtensionFieldToString(id value, CGPFieldDescriptor *field, NSMutableString *builder, + const char *padding, int indent) { const char *fieldName = field->data_->name; switch (CGPFieldGetType(field)) { @@ -3035,8 +2993,8 @@ static void ExtensionFieldToString( [builder appendFormat:@"%s[%s]: %@\n", padding, fieldName, value]; return; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_ENUM: - [builder appendFormat:@"%s[%s]: %@\n", - padding, fieldName, ((CGPEnumValueDescriptor *)value)->enum_]; + [builder appendFormat:@"%s[%s]: %@\n", padding, fieldName, + ((CGPEnumValueDescriptor *)value)->enum_]; return; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_BYTES: [builder appendFormat:@"%s[%s]: \"%@\"\n", padding, fieldName, BytesToString(value)]; @@ -3053,9 +3011,8 @@ static void ExtensionFieldToString( } } -void ValueToString( - CGPValue value, CGPFieldDescriptor *field, NSMutableString *builder, const char *padding, - int indent) { +void ValueToString(CGPValue value, CGPFieldDescriptor *field, NSMutableString *builder, + const char *padding, int indent) { const char *fieldName = field->data_->name; switch (CGPFieldGetType(field)) { case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_INT32: @@ -3103,8 +3060,8 @@ void ValueToString( } } -static void MapFieldToString( - id msg, CGPFieldDescriptor *field, NSMutableString *builder, const char *padding, int indent) { +static void MapFieldToString(id msg, CGPFieldDescriptor *field, NSMutableString *builder, + const char *padding, int indent) { size_t offset = CGPFieldGetOffset(field, object_getClass(msg)); CGPMapFieldData *data = MAP_FIELD_PTR(msg, offset)->data; if (data == NULL) { @@ -3128,8 +3085,8 @@ static void MapFieldToString( } } -static void FieldToString( - id msg, CGPFieldDescriptor *field, NSMutableString *builder, const char *padding, int indent) { +static void FieldToString(id msg, CGPFieldDescriptor *field, NSMutableString *builder, + const char *padding, int indent) { Class msgCls = object_getClass(msg); size_t offset = CGPFieldGetOffset(field, msgCls); BOOL repeated = CGPFieldIsRepeated(field); @@ -3147,18 +3104,18 @@ static void FieldToString( const char *fieldName = field->data_->name; switch (CGPFieldGetType(field)) { -#define FIELD_TO_STRING_CASE(TYPE, FORMAT, VALUE) \ - if (repeated) { \ - TYPE *buffer = (TYPE *)data->buffer; \ - for (uint32_t i = 0; i < data->size; i++) { \ - TYPE value = buffer[i]; \ - [builder appendFormat:@"%s%s: " FORMAT "\n", padding, fieldName, VALUE]; \ - } \ - } else { \ - TYPE value = *FIELD_PTR(TYPE, msg, offset); \ - [builder appendFormat:@"%s%s: " FORMAT "\n", padding, fieldName, VALUE]; \ - } \ - return; +#define FIELD_TO_STRING_CASE(TYPE, FORMAT, VALUE) \ + if (repeated) { \ + TYPE *buffer = (TYPE *)data->buffer; \ + for (uint32_t i = 0; i < data->size; i++) { \ + TYPE value = buffer[i]; \ + [builder appendFormat:@"%s%s: " FORMAT "\n", padding, fieldName, VALUE]; \ + } \ + } else { \ + TYPE value = *FIELD_PTR(TYPE, msg, offset); \ + [builder appendFormat:@"%s%s: " FORMAT "\n", padding, fieldName, VALUE]; \ + } \ + return; case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_INT32: case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_SINT32: case ComGoogleProtobufDescriptors_FieldDescriptor_Type_Enum_SFIXED32: @@ -3203,8 +3160,8 @@ static void FieldToString( } } -static void MessageToString( - id msg, CGPDescriptor *descriptor, NSMutableString *builder, int indent) { +static void MessageToString(id msg, CGPDescriptor *descriptor, NSMutableString *builder, + int indent) { int paddingSize = indent * 2; std::string padding(paddingSize, ' '); @@ -3234,7 +3191,6 @@ static void MessageToString( } } - // ***************************************************************************** // ********** isEqual and hash ************************************************* // ***************************************************************************** @@ -3248,9 +3204,9 @@ static void MessageToString( #define FieldIsEqualRetainable(a, b) a == b || [a isEqual:b] static BOOL FieldIsEqual(id self, id other, size_t offset, CGPFieldJavaType type) { -#define IS_FIELD_EQUAL_CASE(NAME) \ - return FieldIsEqual##NAME( \ - *FIELD_PTR(TYPE_##NAME, self, offset), *FIELD_PTR(TYPE_##NAME, other, offset)); +#define IS_FIELD_EQUAL_CASE(NAME) \ + return FieldIsEqual##NAME(*FIELD_PTR(TYPE_##NAME, self, offset), \ + *FIELD_PTR(TYPE_##NAME, other, offset)); SWITCH_TYPES_WITH_ENUM(type, IS_FIELD_EQUAL_CASE) @@ -3329,14 +3285,14 @@ static int RepeatedFieldHash(id msg, CGPFieldDescriptor *field, int hash) { } hash = 37 * hash + CGPFieldGetNumber(field); -#define REPEATED_FIELD_HASH_CASE(NAME) \ - { \ +#define REPEATED_FIELD_HASH_CASE(NAME) \ + { \ TYPE_##NAME *buffer = (TYPE_##NAME *)repeatedField->data->buffer; \ - for (uint32_t i = 0; i < length; i++) { \ - TYPE_##NAME value = buffer[i]; \ - hash = 31 * hash + HASH_##NAME(value); \ - } \ - } \ + for (uint32_t i = 0; i < length; i++) { \ + TYPE_##NAME value = buffer[i]; \ + hash = 31 * hash + HASH_##NAME(value); \ + } \ + } \ break; SWITCH_TYPES_NO_ENUM(CGPFieldGetJavaType(field), REPEATED_FIELD_HASH_CASE) @@ -3354,10 +3310,10 @@ static int SingularFieldHash(id msg, CGPFieldDescriptor *field, int hash) { size_t offset = CGPFieldGetOffset(field, msgCls); hash = 37 * hash + CGPFieldGetNumber(field); -#define SINGULAR_FIELD_HASH_CASE(NAME) \ - { \ +#define SINGULAR_FIELD_HASH_CASE(NAME) \ + { \ TYPE_##NAME value = *FIELD_PTR(TYPE_##NAME, msg, offset); \ - return 53 * hash + HASH_##NAME(value); \ + return 53 * hash + HASH_##NAME(value); \ } SWITCH_TYPES_NO_ENUM(CGPFieldGetJavaType(field), SINGULAR_FIELD_HASH_CASE) @@ -3396,7 +3352,6 @@ static int MessageHash(ComGoogleProtobufGeneratedMessage *msg, CGPDescriptor *de return hash; } - // ***************************************************************************** // ********** Objective C type implementations ********************************* // ***************************************************************************** @@ -3462,9 +3417,9 @@ + (id)parseFromNSData:(NSData *)data registry:(CGPExtensionRegistryLite *)regist CGPDescriptor *descriptor = [self getDescriptor]; ComGoogleProtobufGeneratedMessage *msg = AUTORELEASE(CGPNewMessage(descriptor)); CGPCodedInputStream codedStream([data bytes], (int)[data length]); - BOOL success = - MergeFromStream(msg, descriptor, &codedStream, registry, MessageExtensionMap(msg, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(msg, descriptor, &codedStream, registry, + MessageExtensionMap(msg, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } @@ -3594,7 +3549,8 @@ - (jint)getRepeatedFieldCountWithComGoogleProtobufDescriptors_FieldDescriptor: } - (id)getRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: - (CGPFieldDescriptor *)descriptor withInt:(jint)index { + (CGPFieldDescriptor *)descriptor + withInt:(jint)index { return GetRepeatedField(self, descriptor, index); } @@ -3637,8 +3593,8 @@ + (BOOL)resolveInstanceMethod:(SEL)sel { static id DynamicNewBuilder(Class self, SEL _cmd, ComGoogleProtobufGeneratedMessage *prototype) { CGPDescriptor *descriptor = [self getDescriptor]; ComGoogleProtobufGeneratedMessage_Builder *builder = CGPNewBuilder(descriptor); - CopyMessage(builder, BuilderExtensionMap(builder, descriptor), - prototype, MessageExtensionMap(prototype, descriptor), descriptor); + CopyMessage(builder, BuilderExtensionMap(builder, descriptor), prototype, + MessageExtensionMap(prototype, descriptor), descriptor); return AUTORELEASE(builder); } @@ -3647,8 +3603,8 @@ + (BOOL)resolveClassMethod:(SEL)sel { if (memcmp(name, "newBuilderWith", 14) == 0) { const char *className = class_getName(self); size_t classNameLen = strlen(className); - if (memcmp(name + 14, className, classNameLen) == 0 - && strcmp(name + classNameLen + 14, ":") == 0) { + if (memcmp(name + 14, className, classNameLen) == 0 && + strcmp(name + classNameLen + 14, ":") == 0) { IMP imp = (IMP)DynamicNewBuilder; return class_addMethod(object_getClass(self), sel, imp, "@#:@"); } @@ -3703,8 +3659,8 @@ - (ComGoogleProtobufGeneratedMessage *)getDefaultInstanceForType { } - (id) - newBuilderForFieldWithComGoogleProtobufDescriptors_FieldDescriptor: - (CGPFieldDescriptor *)fieldDescriptor { + newBuilderForFieldWithComGoogleProtobufDescriptors_FieldDescriptor: + (CGPFieldDescriptor *)fieldDescriptor { CGPDescriptor *descriptor = [fieldDescriptor getMessageType]; return AUTORELEASE(CGPNewBuilder(descriptor)); } @@ -3723,7 +3679,8 @@ - (jint)getRepeatedFieldCountWithComGoogleProtobufDescriptors_FieldDescriptor: } - (id)getRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: - (CGPFieldDescriptor *)descriptor withInt:(jint)index { + (CGPFieldDescriptor *)descriptor + withInt:(jint)index { return GetRepeatedField(self, descriptor, index); } @@ -3742,21 +3699,21 @@ - (id)getRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: } else { CGPHasLocator hasLoc = GetHasLocator(cls, descriptor); -#define SET_SINGULAR_FIELD_CASE(NAME) \ +#define SET_SINGULAR_FIELD_CASE(NAME) \ SingularSet##NAME(self, CGPFromReflectionType##NAME(object), offset, hasLoc); \ break; SWITCH_TYPES_WITH_ENUM(javaType, SET_SINGULAR_FIELD_CASE) #undef SET_SINGULAR_FIELD_CASE - } return self; } - (id) addRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: - (CGPFieldDescriptor *)descriptor withId:(id)object { + (CGPFieldDescriptor *)descriptor + withId:(id)object { (void)nil_chk(object); size_t offset = CGPFieldGetOffset(descriptor, object_getClass(self)); if (CGPFieldIsMap(descriptor)) { @@ -3769,20 +3726,22 @@ - (id)getRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: - (id) setRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: - (CGPFieldDescriptor *)descriptor withInt:(jint)index withId:(id)object { + (CGPFieldDescriptor *)descriptor + withInt:(jint)index + withId:(id)object { (void)nil_chk(object); size_t offset = CGPFieldGetOffset(descriptor, object_getClass(self)); if (CGPFieldIsMap(descriptor)) { CGPMapFieldSet(MAP_FIELD_PTR(self, offset), index, object, descriptor); } else { - CGPRepeatedFieldSet( - REPEATED_FIELD_PTR(self, offset), index, object, CGPFieldGetJavaType(descriptor)); + CGPRepeatedFieldSet(REPEATED_FIELD_PTR(self, offset), index, object, + CGPFieldGetJavaType(descriptor)); } return self; } -- (id) - clearFieldWithComGoogleProtobufDescriptors_FieldDescriptor:(CGPFieldDescriptor *)descriptor { +- (id)clearFieldWithComGoogleProtobufDescriptors_FieldDescriptor: + (CGPFieldDescriptor *)descriptor { Class cls = object_getClass(self); size_t offset = CGPFieldGetOffset(descriptor, cls); if (CGPFieldIsMap(descriptor)) { @@ -3811,29 +3770,27 @@ - (id)getRepeatedFieldWithComGoogleProtobufDescriptors_FieldDescriptor: CGPDescriptor *descriptor = [object_getClass(self) getDescriptor]; CGPDescriptor *otherDescriptor = [object_getClass(message) getDescriptor]; if (descriptor != otherDescriptor) { - @throw [[[JavaLangIllegalArgumentException alloc] initWithNSString: - @"mergeFrom(Message) can only merge messages of the same type."] autorelease]; + @throw [[[JavaLangIllegalArgumentException alloc] + initWithNSString:@"mergeFrom(Message) can only merge messages of the same type."] + autorelease]; } - MergeFromMessage( - self, BuilderExtensionMap(self, descriptor), message, - MessageExtensionMap(message, descriptor), descriptor); + MergeFromMessage(self, BuilderExtensionMap(self, descriptor), message, + MessageExtensionMap(message, descriptor), descriptor); return self; } -- (id) - mergeFromWithJavaIoInputStream:(JavaIoInputStream *)input { +- (id)mergeFromWithJavaIoInputStream:(JavaIoInputStream *)input { return [self mergeFromWithJavaIoInputStream:input withComGoogleProtobufExtensionRegistryLite:nil]; } -- (id) - mergeFromWithJavaIoInputStream:(JavaIoInputStream *)input - withComGoogleProtobufExtensionRegistryLite: - (ComGoogleProtobufExtensionRegistryLite *)extensionRegistry { +- (id)mergeFromWithJavaIoInputStream:(JavaIoInputStream *)input + withComGoogleProtobufExtensionRegistryLite: + (ComGoogleProtobufExtensionRegistryLite *)extensionRegistry { CGPDescriptor *descriptor = [object_getClass(self) getDescriptor]; CGPCodedInputStream codedStream(input, INT_MAX); - BOOL success = MergeFromStream( - self, descriptor, &codedStream, extensionRegistry, BuilderExtensionMap(self, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(self, descriptor, &codedStream, extensionRegistry, + BuilderExtensionMap(self, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } @@ -3855,28 +3812,28 @@ - (bool)mergeDelimitedFromWithJavaIoInputStream:(JavaIoInputStream *)input if (!CGPCodedInputStream::ReadVarint32(firstByte, input, &length)) InvalidPB(); CGPDescriptor *descriptor = [object_getClass(self) getDescriptor]; CGPCodedInputStream codedStream(input, length); - if (!MergeFromStream( - self, descriptor, &codedStream, extensionRegistry, BuilderExtensionMap(self, descriptor)) - || !codedStream.ConsumedEntireMessage()) { + if (!MergeFromStream(self, descriptor, &codedStream, extensionRegistry, + BuilderExtensionMap(self, descriptor)) || + !codedStream.ConsumedEntireMessage()) { InvalidPB(); } return true; } -- (id) - mergeFromWithComGoogleProtobufByteString:(CGPByteString *)data { +- (id)mergeFromWithComGoogleProtobufByteString: + (CGPByteString *)data { return [self mergeFromWithComGoogleProtobufByteString:data withComGoogleProtobufExtensionRegistryLite:nil]; } - (id) - mergeFromWithComGoogleProtobufByteString:(CGPByteString *)data + mergeFromWithComGoogleProtobufByteString:(CGPByteString *)data withComGoogleProtobufExtensionRegistryLite:(CGPExtensionRegistryLite *)extensionRegistry { CGPDescriptor *descriptor = [object_getClass(self) getDescriptor]; CGPCodedInputStream codedStream(data->buffer_, data->size_); - BOOL success = MergeFromStream( - self, descriptor, &codedStream, extensionRegistry, BuilderExtensionMap(self, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(self, descriptor, &codedStream, extensionRegistry, + BuilderExtensionMap(self, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } @@ -3888,13 +3845,13 @@ - (bool)mergeDelimitedFromWithJavaIoInputStream:(JavaIoInputStream *)input } - (id)mergeFromWithByteArray:(IOSByteArray *)data - withComGoogleProtobufExtensionRegistryLite: - (ComGoogleProtobufExtensionRegistryLite *)extensionRegistry { + withComGoogleProtobufExtensionRegistryLite: + (ComGoogleProtobufExtensionRegistryLite *)extensionRegistry { CGPDescriptor *descriptor = [object_getClass(self) getDescriptor]; CGPCodedInputStream codedStream(data->buffer_, (int)data->size_); - BOOL success = MergeFromStream( - self, descriptor, &codedStream, extensionRegistry, BuilderExtensionMap(self, descriptor)) - && codedStream.ConsumedEntireMessage(); + BOOL success = MergeFromStream(self, descriptor, &codedStream, extensionRegistry, + BuilderExtensionMap(self, descriptor)) && + codedStream.ConsumedEntireMessage(); if (!success) { InvalidPB(); } @@ -3920,8 +3877,8 @@ + (BOOL)resolveInstanceMethod:(SEL)sel { if (memcmp(name, "mergeFromWith", 13) == 0) { const char *className = class_getName(descriptor->messageClass_); size_t classNameLen = strlen(className); - if (memcmp(name + 13, className, classNameLen) == 0 - && strcmp(name + classNameLen + 13, ":") == 0) { + if (memcmp(name + 13, className, classNameLen) == 0 && + strcmp(name + classNameLen + 13, ":") == 0) { IMP imp = (IMP)DynamicMergeFromMessage; return class_addMethod(self, sel, imp, "@#:@"); } @@ -3970,8 +3927,7 @@ static id ToReflectionType(CGPFieldDescriptor *field, id value) { CGPFieldJavaType type = CGPFieldGetJavaType(field); if (CGPFieldIsRepeated(field)) { id valueList = (id)value; - id result = - AUTORELEASE([[JavaUtilArrayList alloc] initWithInt:[valueList size]]); + id result = AUTORELEASE([[JavaUtilArrayList alloc] initWithInt:[valueList size]]); for (id element in valueList) { [result addWithId:ToReflectionTypeSingular(type, element)]; } @@ -3989,7 +3945,8 @@ static id ToReflectionType(CGPFieldDescriptor *field, id value) { return result; } -static id GetSingularExtension(CGPExtensionMap *extensionMap, ComGoogleProtobufExtensionLite *extension) { +static id GetSingularExtension(CGPExtensionMap *extensionMap, + ComGoogleProtobufExtensionLite *extension) { CGPFieldDescriptor *field = extension->fieldDescriptor_; CGPExtensionMap::iterator it = extensionMap->find(field); id value; @@ -4001,8 +3958,8 @@ static id GetSingularExtension(CGPExtensionMap *extensionMap, ComGoogleProtobufE return FromReflectionType(field, value); } -static id GetRepeatedExtension( - CGPExtensionMap *extensionMap, ComGoogleProtobufExtensionLite *extension, int index) { +static id GetRepeatedExtension(CGPExtensionMap *extensionMap, + ComGoogleProtobufExtensionLite *extension, int index) { CGPFieldDescriptor *field = extension->fieldDescriptor_; CGPFieldJavaType type = CGPFieldGetJavaType(field); CGPExtensionMap::iterator it = extensionMap->find(field); @@ -4015,7 +3972,8 @@ static id GetRepeatedExtension( return FromReflectionTypeSingular(type, value); } -static int GetExtensionCount(ComGoogleProtobufExtensionLite *extension, CGPExtensionMap *extensionMap) { +static int GetExtensionCount(ComGoogleProtobufExtensionLite *extension, + CGPExtensionMap *extensionMap) { CGPFieldDescriptor *field = extension->fieldDescriptor_; CGPExtensionMap::iterator it = extensionMap->find(field); if (it != extensionMap->end()) { @@ -4047,8 +4005,7 @@ - (ComGoogleProtobufGeneratedMessage_ExtendableBuilder *)toBuilder { return builder; } -- (id)getExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension { +- (id)getExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension { return GetSingularExtension(&extensionMap_, extension); } - (id)getExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension { @@ -4059,15 +4016,16 @@ - (id)getExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: return GetSingularExtension(&extensionMap_, extension); } -- (id)getExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withInt:(jint)index { +- (id)getExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withInt:(jint)index { return GetRepeatedExtension(&extensionMap_, extension, index); } - (id)getExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withInt:(jint)index { return GetRepeatedExtension(&extensionMap_, extension, index); } - (id)getExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withInt:(jint)index { + (CGPGeneratedExtension *)extension + withInt:(jint)index { return GetRepeatedExtension(&extensionMap_, extension, index); } @@ -4111,8 +4069,7 @@ - (id)buildPartial { return msg; } -- (id)getExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension { +- (id)getExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension { return GetSingularExtension(&extensionMap_, extension); } - (id)getExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension { @@ -4123,15 +4080,16 @@ - (id)getExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: return GetSingularExtension(&extensionMap_, extension); } -- (id)getExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withInt:(jint)index { +- (id)getExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withInt:(jint)index { return GetRepeatedExtension(&extensionMap_, extension, index); } - (id)getExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withInt:(jint)index { return GetRepeatedExtension(&extensionMap_, extension, index); } - (id)getExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withInt:(jint)index { + (CGPGeneratedExtension *)extension + withInt:(jint)index { return GetRepeatedExtension(&extensionMap_, extension, index); } @@ -4158,8 +4116,8 @@ - (bool)hasExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: return extensionMap_.find(extension->fieldDescriptor_) != extensionMap_.end(); } -- (id)setExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withId:(id)value { +- (id)setExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withId:(id)value { (void)nil_chk(value); CGPFieldDescriptor *field = extension->fieldDescriptor_; extensionMap_[field].set(ToReflectionType(field, value)); @@ -4174,39 +4132,43 @@ - (id)setExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension return [self setExtensionWithComGoogleProtobufExtensionLite:extension withInt:index withId:value]; } - (id)setExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withId:(id)value { + (CGPGeneratedExtension *)extension + withId:(id)value { return [self setExtensionWithComGoogleProtobufExtensionLite:extension withId:value]; } - (id)setExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withInt:(jint)index withId:(id)value { + (CGPGeneratedExtension *)extension + withInt:(jint)index + withId:(id)value { return [self setExtensionWithComGoogleProtobufExtensionLite:extension withInt:index withId:value]; } -- (id)setExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withInt:(jint)index withId:(id)value { +- (id)setExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withInt:(jint)index + withId:(id)value { (void)nil_chk(value); SetRepeatedExtension(&extensionMap_, extension, index, value); return self; } -- (id)addExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension withId:(id)value { +- (id)addExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension + withId:(id)value { (void)nil_chk(value); CGPFieldDescriptor *field = extension->fieldDescriptor_; AddExtensionWithReflectionType(&extensionMap_, field, - ToReflectionTypeSingular(CGPFieldGetJavaType(field), value)); + ToReflectionTypeSingular(CGPFieldGetJavaType(field), value)); return self; } - (id)addExtensionWithComGoogleProtobufExtension:(CGPExtension *)extension withId:(id)value { return [self addExtensionWithComGoogleProtobufExtensionLite:extension withId:value]; } - (id)addExtensionWithComGoogleProtobufGeneratedMessage_GeneratedExtension: - (CGPGeneratedExtension *)extension withId:(id)value { + (CGPGeneratedExtension *)extension + withId:(id)value { return [self addExtensionWithComGoogleProtobufExtensionLite:extension withId:value]; } -- (id)clearExtensionWithComGoogleProtobufExtensionLite: - (ComGoogleProtobufExtensionLite *)extension { +- (id)clearExtensionWithComGoogleProtobufExtensionLite:(ComGoogleProtobufExtensionLite *)extension { extensionMap_.erase(extension->fieldDescriptor_); return self; }