Beta quality drop of Objective C Support.
- Add more to the ObjC dir readme. - Merge the ExtensionField and ExtensionDescriptor to reduce overhead. - Fix an initialization race. - Clean up the Xcode schemes. - Remove the class/enum filter. - Remove some forced inline that were bloating things without proof of performance wins. - Rename some internal types to avoid conflicts with the well know types protos. - Drop the use of ApplyFunctions to the compiler/optimizer can do what it wants. - Better document some possible future improvements. - Add missing support for parsing repeated primitive fields in packed or unpacked forms. - Improve -hash. - Add *Count for repeated and map<> fields to avoid auto create when checking for them being set.
This commit is contained in:
parent
3f9be70d06
commit
d846b0b059
18
Makefile.am
18
Makefile.am
@ -506,14 +506,10 @@ objectivec_EXTRA_DIST= \
|
||||
objectivec/GPBDictionary.h \
|
||||
objectivec/GPBDictionary.m \
|
||||
objectivec/GPBDictionary_PackagePrivate.h \
|
||||
objectivec/GPBExtensionField.h \
|
||||
objectivec/GPBExtensionField.m \
|
||||
objectivec/GPBExtensionField_PackagePrivate.h \
|
||||
objectivec/GPBExtensionInternals.h \
|
||||
objectivec/GPBExtensionInternals.m \
|
||||
objectivec/GPBExtensionRegistry.h \
|
||||
objectivec/GPBExtensionRegistry.m \
|
||||
objectivec/GPBField.h \
|
||||
objectivec/GPBField.m \
|
||||
objectivec/GPBField_PackagePrivate.h \
|
||||
objectivec/GPBMessage.h \
|
||||
objectivec/GPBMessage.m \
|
||||
objectivec/GPBMessage_PackagePrivate.h \
|
||||
@ -523,7 +519,10 @@ objectivec_EXTRA_DIST= \
|
||||
objectivec/GPBRootObject.h \
|
||||
objectivec/GPBRootObject.m \
|
||||
objectivec/GPBRootObject_PackagePrivate.h \
|
||||
objectivec/GPBTypes.h \
|
||||
objectivec/GPBRuntimeTypes.h \
|
||||
objectivec/GPBUnknownField.h \
|
||||
objectivec/GPBUnknownField.m \
|
||||
objectivec/GPBUnknownField_PackagePrivate.h \
|
||||
objectivec/GPBUnknownFieldSet.h \
|
||||
objectivec/GPBUnknownFieldSet.m \
|
||||
objectivec/GPBUnknownFieldSet_PackagePrivate.h \
|
||||
@ -547,8 +546,6 @@ objectivec_EXTRA_DIST= \
|
||||
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
|
||||
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
|
||||
objectivec/README.md \
|
||||
objectivec/Tests/Filter1.txt \
|
||||
objectivec/Tests/Filter2.txt \
|
||||
objectivec/Tests/golden_message \
|
||||
objectivec/Tests/golden_packed_fields_message \
|
||||
objectivec/Tests/GPBARCUnittestProtos.m \
|
||||
@ -564,7 +561,6 @@ objectivec_EXTRA_DIST= \
|
||||
objectivec/Tests/GPBDictionaryTests+UInt32.m \
|
||||
objectivec/Tests/GPBDictionaryTests+UInt64.m \
|
||||
objectivec/Tests/GPBDictionaryTests.pddm \
|
||||
objectivec/Tests/GPBFilteredMessageTests.m \
|
||||
objectivec/Tests/GPBMessageTests+Merge.m \
|
||||
objectivec/Tests/GPBMessageTests+Runtime.m \
|
||||
objectivec/Tests/GPBMessageTests+Serialization.m \
|
||||
@ -596,8 +592,6 @@ objectivec_EXTRA_DIST= \
|
||||
objectivec/Tests/text_format_map_unittest_data.txt \
|
||||
objectivec/Tests/text_format_unittest_data.txt \
|
||||
objectivec/Tests/unittest_cycle.proto \
|
||||
objectivec/Tests/unittest_filter.proto \
|
||||
objectivec/Tests/unittest_name_mangling.proto \
|
||||
objectivec/Tests/unittest_objc.proto \
|
||||
objectivec/Tests/unittest_runtime_proto2.proto \
|
||||
objectivec/Tests/unittest_runtime_proto3.proto \
|
||||
|
113
objectivec/DevTools/compile_testing_protos.sh
Executable file
113
objectivec/DevTools/compile_testing_protos.sh
Executable file
@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Invoked by the Xcode projects to build the protos needed for the unittests.
|
||||
|
||||
set -eu
|
||||
|
||||
readonly OUTPUT_DIR="${PROJECT_DERIVED_FILE_DIR}/protos"
|
||||
|
||||
# Helper for bailing.
|
||||
die() {
|
||||
echo "Error: $1"
|
||||
exit 2
|
||||
}
|
||||
|
||||
# What to do.
|
||||
case "${ACTION}" in
|
||||
"")
|
||||
# Build, fall thru
|
||||
;;
|
||||
"clean")
|
||||
rm -rf "${OUTPUT_DIR}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
die "Unknown action requested: ${ACTION}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Move to the top of the protobuf directories.
|
||||
cd "${SRCROOT}/.."
|
||||
|
||||
[[ -x src/protoc ]] || \
|
||||
die "Could not find the protoc binary; make sure you have built it (objectivec/DevTools/full_mac_build.sh -h)."
|
||||
|
||||
RUN_PROTOC=no
|
||||
if [[ ! -d "${OUTPUT_DIR}" ]] ; then
|
||||
RUN_PROTOC=yes
|
||||
else
|
||||
# Find the newest input file (protos, compiler, and this script).
|
||||
# (these patterns catch some extra stuff, but better to over sample than
|
||||
# under)
|
||||
readonly NewestInput=$(find \
|
||||
src/google/protobuf/*.proto \
|
||||
objectivec/Tests/*.proto \
|
||||
src/.libs src/*.la src/protoc \
|
||||
objectivec/DevTools/compile_testing_protos.sh \
|
||||
-type f -print0 \
|
||||
| xargs -0 stat -f "%m %N" \
|
||||
| sort -n | tail -n1 | cut -f2- -d" ")
|
||||
# Find the oldest output file.
|
||||
readonly OldestOutput=$(find \
|
||||
"${OUTPUT_DIR}" \
|
||||
-type f -print0 \
|
||||
| xargs -0 stat -f "%m %N" \
|
||||
| sort -n -r | tail -n1 | cut -f2- -d" ")
|
||||
# If the newest input is newer than the oldest output, regenerate.
|
||||
if [[ "${NewestInput}" -nt "${OldestOutput}" ]] ; then
|
||||
RUN_PROTOC=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${RUN_PROTOC}" != "yes" ]] ; then
|
||||
# Up to date.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Ensure the output dir exists
|
||||
mkdir -p "${OUTPUT_DIR}/google/protobuf"
|
||||
|
||||
CORE_PROTO_FILES=( \
|
||||
src/google/protobuf/unittest_custom_options.proto \
|
||||
src/google/protobuf/unittest_enormous_descriptor.proto \
|
||||
src/google/protobuf/unittest_embed_optimize_for.proto \
|
||||
src/google/protobuf/unittest_empty.proto \
|
||||
src/google/protobuf/unittest_import.proto \
|
||||
src/google/protobuf/unittest_import_lite.proto \
|
||||
src/google/protobuf/unittest_lite.proto \
|
||||
src/google/protobuf/unittest_mset.proto \
|
||||
src/google/protobuf/unittest_no_generic_services.proto \
|
||||
src/google/protobuf/unittest_optimize_for.proto \
|
||||
src/google/protobuf/unittest.proto \
|
||||
src/google/protobuf/unittest_import_public.proto \
|
||||
src/google/protobuf/unittest_import_public_lite.proto \
|
||||
src/google/protobuf/unittest_drop_unknown_fields.proto \
|
||||
src/google/protobuf/unittest_preserve_unknown_enum.proto \
|
||||
src/google/protobuf/map_lite_unittest.proto \
|
||||
src/google/protobuf/map_proto2_unittest.proto \
|
||||
src/google/protobuf/map_unittest.proto \
|
||||
)
|
||||
|
||||
compile_proto() {
|
||||
src/protoc \
|
||||
--objc_out="${OUTPUT_DIR}/google/protobuf" \
|
||||
--proto_path=src/google/protobuf/ \
|
||||
--proto_path=src \
|
||||
$*
|
||||
}
|
||||
|
||||
for a_proto in "${CORE_PROTO_FILES[@]}" ; do
|
||||
compile_proto "${a_proto}"
|
||||
done
|
||||
|
||||
OBJC_PROTO_FILES=( \
|
||||
objectivec/Tests/unittest_cycle.proto \
|
||||
objectivec/Tests/unittest_runtime_proto2.proto \
|
||||
objectivec/Tests/unittest_runtime_proto3.proto \
|
||||
objectivec/Tests/unittest_objc.proto \
|
||||
objectivec/Tests/unittest_objc_startup.proto \
|
||||
)
|
||||
|
||||
for a_proto in "${OBJC_PROTO_FILES[@]}" ; do
|
||||
compile_proto --proto_path="objectivec/Tests" "${a_proto}"
|
||||
done
|
@ -162,7 +162,7 @@ wrapped_make -j "${NUM_MAKE_JOBS}" all
|
||||
wrapped_make -j "${NUM_MAKE_JOBS}" check
|
||||
|
||||
header "Ensuring the ObjC descriptors are current."
|
||||
# Find the newest input file (protos, compiler, and this script).
|
||||
# Find the newest input file (protos, compiler, and the generator script).
|
||||
# (these patterns catch some extra stuff, but better to over sample than under)
|
||||
readonly NewestInput=$(find \
|
||||
src/google/protobuf/*.proto \
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBRuntimeTypes.h"
|
||||
|
||||
// These classes are used for repeated fields of basic data types. They are used because
|
||||
// they perform better than boxing into NSNumbers in NSArrays.
|
||||
|
@ -60,7 +60,7 @@
|
||||
- (int64_t)readSInt64;
|
||||
- (BOOL)readBool;
|
||||
- (NSString *)readString;
|
||||
- (NSData *)readData;
|
||||
- (NSData *)readBytes;
|
||||
|
||||
// Read an embedded message field value from the stream.
|
||||
- (void)readMessage:(GPBMessage *)message
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
static const NSUInteger kDefaultRecursionLimit = 64;
|
||||
|
||||
static inline void CheckSize(GPBCodedInputStreamState *state, size_t size) {
|
||||
static void CheckSize(GPBCodedInputStreamState *state, size_t size) {
|
||||
size_t newSize = state->bufferPos + size;
|
||||
if (newSize > state->bufferSize) {
|
||||
[NSException raise:NSParseErrorException format:@""];
|
||||
@ -50,26 +50,26 @@ static inline void CheckSize(GPBCodedInputStreamState *state, size_t size) {
|
||||
}
|
||||
}
|
||||
|
||||
static inline int8_t ReadRawByte(GPBCodedInputStreamState *state) {
|
||||
static int8_t ReadRawByte(GPBCodedInputStreamState *state) {
|
||||
CheckSize(state, sizeof(int8_t));
|
||||
return ((int8_t *)state->bytes)[state->bufferPos++];
|
||||
}
|
||||
|
||||
static inline int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) {
|
||||
static int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) {
|
||||
CheckSize(state, sizeof(int32_t));
|
||||
int32_t value = OSReadLittleInt32(state->bytes, state->bufferPos);
|
||||
state->bufferPos += sizeof(int32_t);
|
||||
return value;
|
||||
}
|
||||
|
||||
static inline int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) {
|
||||
static int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) {
|
||||
CheckSize(state, sizeof(int64_t));
|
||||
int64_t value = OSReadLittleInt64(state->bytes, state->bufferPos);
|
||||
state->bufferPos += sizeof(int64_t);
|
||||
return value;
|
||||
}
|
||||
|
||||
static inline int32_t ReadRawVarint32(GPBCodedInputStreamState *state) {
|
||||
static int32_t ReadRawVarint32(GPBCodedInputStreamState *state) {
|
||||
int8_t tmp = ReadRawByte(state);
|
||||
if (tmp >= 0) {
|
||||
return tmp;
|
||||
@ -104,7 +104,7 @@ static inline int32_t ReadRawVarint32(GPBCodedInputStreamState *state) {
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int64_t ReadRawVarint64(GPBCodedInputStreamState *state) {
|
||||
static int64_t ReadRawVarint64(GPBCodedInputStreamState *state) {
|
||||
int32_t shift = 0;
|
||||
int64_t result = 0;
|
||||
while (shift < 64) {
|
||||
@ -119,7 +119,7 @@ static inline int64_t ReadRawVarint64(GPBCodedInputStreamState *state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void SkipRawData(GPBCodedInputStreamState *state, size_t size) {
|
||||
static void SkipRawData(GPBCodedInputStreamState *state, size_t size) {
|
||||
CheckSize(state, size);
|
||||
state->bufferPos += size;
|
||||
}
|
||||
@ -222,7 +222,7 @@ NSString *GPBCodedInputStreamReadRetainedString(
|
||||
return result;
|
||||
}
|
||||
|
||||
NSData *GPBCodedInputStreamReadRetainedData(GPBCodedInputStreamState *state) {
|
||||
NSData *GPBCodedInputStreamReadRetainedBytes(GPBCodedInputStreamState *state) {
|
||||
int32_t size = ReadRawVarint32(state);
|
||||
if (size < 0) return nil;
|
||||
CheckSize(state, size);
|
||||
@ -232,7 +232,7 @@ NSData *GPBCodedInputStreamReadRetainedData(GPBCodedInputStreamState *state) {
|
||||
return result;
|
||||
}
|
||||
|
||||
NSData *GPBCodedInputStreamReadRetainedDataNoCopy(
|
||||
NSData *GPBCodedInputStreamReadRetainedBytesNoCopy(
|
||||
GPBCodedInputStreamState *state) {
|
||||
int32_t size = ReadRawVarint32(state);
|
||||
if (size < 0) return nil;
|
||||
@ -453,8 +453,8 @@ void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state,
|
||||
GPBCodedInputStreamPopLimit(&state_, oldLimit);
|
||||
}
|
||||
|
||||
- (NSData *)readData {
|
||||
return [GPBCodedInputStreamReadRetainedData(&state_) autorelease];
|
||||
- (NSData *)readBytes {
|
||||
return [GPBCodedInputStreamReadRetainedBytes(&state_) autorelease];
|
||||
}
|
||||
|
||||
- (uint32_t)readUInt32 {
|
||||
@ -499,7 +499,7 @@ void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state,
|
||||
|
||||
// Returns true if the passed in bytes are 7 bit ascii.
|
||||
// This routine needs to be fast.
|
||||
static inline bool AreBytesIn7BitASCII(const uint8_t *bytes, NSUInteger len) {
|
||||
static bool AreBytesIn7BitASCII(const uint8_t *bytes, NSUInteger len) {
|
||||
// In the loops below, it's more efficient to collect rather than do
|
||||
// conditional at every step.
|
||||
#if __LP64__
|
||||
@ -587,7 +587,7 @@ static inline bool AreBytesIn7BitASCII(const uint8_t *bytes, NSUInteger len) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void GPBStringInitStringValue(GPBString *string) {
|
||||
static void GPBStringInitStringValue(GPBString *string) {
|
||||
OSSpinLockLock(&string->lock_);
|
||||
GPBStringInitStringValueAlreadyLocked(string);
|
||||
OSSpinLockUnlock(&string->lock_);
|
||||
|
@ -114,9 +114,9 @@ int64_t GPBCodedInputStreamReadSInt64(GPBCodedInputStreamState *state);
|
||||
BOOL GPBCodedInputStreamReadBool(GPBCodedInputStreamState *state);
|
||||
NSString *GPBCodedInputStreamReadRetainedString(GPBCodedInputStreamState *state)
|
||||
__attribute((ns_returns_retained));
|
||||
NSData *GPBCodedInputStreamReadRetainedData(GPBCodedInputStreamState *state)
|
||||
NSData *GPBCodedInputStreamReadRetainedBytes(GPBCodedInputStreamState *state)
|
||||
__attribute((ns_returns_retained));
|
||||
NSData *GPBCodedInputStreamReadRetainedDataNoCopy(
|
||||
NSData *GPBCodedInputStreamReadRetainedBytesNoCopy(
|
||||
GPBCodedInputStreamState *state) __attribute((ns_returns_retained));
|
||||
|
||||
size_t GPBCodedInputStreamPushLimit(GPBCodedInputStreamState *state,
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBRuntimeTypes.h"
|
||||
#import "GPBWireFormat.h"
|
||||
|
||||
@class GPBBoolArray;
|
||||
@ -84,110 +84,110 @@
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeDouble:(int32_t)fieldNumber value:(double)value;
|
||||
- (void)writeDoubles:(int32_t)fieldNumber
|
||||
values:(GPBDoubleArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeDoubleArray:(int32_t)fieldNumber
|
||||
values:(GPBDoubleArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeDoubleNoTag:(double)value;
|
||||
|
||||
- (void)writeFloat:(int32_t)fieldNumber value:(float)value;
|
||||
- (void)writeFloats:(int32_t)fieldNumber
|
||||
values:(GPBFloatArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeFloatArray:(int32_t)fieldNumber
|
||||
values:(GPBFloatArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeFloatNoTag:(float)value;
|
||||
|
||||
- (void)writeUInt64:(int32_t)fieldNumber value:(uint64_t)value;
|
||||
- (void)writeUInt64s:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeUInt64Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeUInt64NoTag:(uint64_t)value;
|
||||
|
||||
- (void)writeInt64:(int32_t)fieldNumber value:(int64_t)value;
|
||||
- (void)writeInt64s:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeInt64Array:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeInt64NoTag:(int64_t)value;
|
||||
|
||||
- (void)writeInt32:(int32_t)fieldNumber value:(int32_t)value;
|
||||
- (void)writeInt32s:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeInt32Array:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeInt32NoTag:(int32_t)value;
|
||||
|
||||
- (void)writeUInt32:(int32_t)fieldNumber value:(uint32_t)value;
|
||||
- (void)writeUInt32s:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeUInt32Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeUInt32NoTag:(uint32_t)value;
|
||||
|
||||
- (void)writeFixed64:(int32_t)fieldNumber value:(uint64_t)value;
|
||||
- (void)writeFixed64s:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeFixed64Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeFixed64NoTag:(uint64_t)value;
|
||||
|
||||
- (void)writeFixed32:(int32_t)fieldNumber value:(uint32_t)value;
|
||||
- (void)writeFixed32s:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeFixed32Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeFixed32NoTag:(uint32_t)value;
|
||||
|
||||
- (void)writeSInt32:(int32_t)fieldNumber value:(int32_t)value;
|
||||
- (void)writeSInt32s:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSInt32Array:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSInt32NoTag:(int32_t)value;
|
||||
|
||||
- (void)writeSInt64:(int32_t)fieldNumber value:(int64_t)value;
|
||||
- (void)writeSInt64s:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSInt64Array:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSInt64NoTag:(int64_t)value;
|
||||
|
||||
- (void)writeSFixed64:(int32_t)fieldNumber value:(int64_t)value;
|
||||
- (void)writeSFixed64s:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSFixed64Array:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSFixed64NoTag:(int64_t)value;
|
||||
|
||||
- (void)writeSFixed32:(int32_t)fieldNumber value:(int32_t)value;
|
||||
- (void)writeSFixed32s:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSFixed32Array:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeSFixed32NoTag:(int32_t)value;
|
||||
|
||||
- (void)writeBool:(int32_t)fieldNumber value:(BOOL)value;
|
||||
- (void)writeBools:(int32_t)fieldNumber
|
||||
values:(GPBBoolArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeBoolArray:(int32_t)fieldNumber
|
||||
values:(GPBBoolArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeBoolNoTag:(BOOL)value;
|
||||
|
||||
- (void)writeEnum:(int32_t)fieldNumber value:(int32_t)value;
|
||||
- (void)writeEnums:(int32_t)fieldNumber
|
||||
values:(GPBEnumArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeEnumArray:(int32_t)fieldNumber
|
||||
values:(GPBEnumArray *)values
|
||||
tag:(uint32_t)tag;
|
||||
- (void)writeEnumNoTag:(int32_t)value;
|
||||
|
||||
- (void)writeString:(int32_t)fieldNumber value:(NSString *)value;
|
||||
- (void)writeStrings:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeStringNoTag:(NSString *)value;
|
||||
|
||||
- (void)writeMessage:(int32_t)fieldNumber value:(GPBMessage *)value;
|
||||
- (void)writeMessages:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeMessageNoTag:(GPBMessage *)value;
|
||||
|
||||
- (void)writeData:(int32_t)fieldNumber value:(NSData *)value;
|
||||
- (void)writeDatas:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeDataNoTag:(NSData *)value;
|
||||
- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value;
|
||||
- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeBytesNoTag:(NSData *)value;
|
||||
|
||||
- (void)writeGroup:(int32_t)fieldNumber
|
||||
value:(GPBMessage *)value;
|
||||
- (void)writeGroups:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeGroupNoTag:(int32_t)fieldNumber
|
||||
value:(GPBMessage *)value;
|
||||
|
||||
- (void)writeUnknownGroup:(int32_t)fieldNumber
|
||||
value:(GPBUnknownFieldSet *)value;
|
||||
- (void)writeUnknownGroups:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
- (void)writeUnknownGroupNoTag:(int32_t)fieldNumber
|
||||
value:(GPBUnknownFieldSet *)value;
|
||||
|
||||
@ -230,7 +230,7 @@ size_t GPBComputeUnknownGroupSize(int32_t fieldNumber,
|
||||
__attribute__((const));
|
||||
size_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value)
|
||||
__attribute__((const));
|
||||
size_t GPBComputeDataSize(int32_t fieldNumber, NSData *value)
|
||||
size_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value)
|
||||
__attribute__((const));
|
||||
size_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value)
|
||||
__attribute__((const));
|
||||
@ -243,7 +243,7 @@ size_t GPBComputeSInt32Size(int32_t fieldNumber, int32_t value)
|
||||
size_t GPBComputeSInt64Size(int32_t fieldNumber, int64_t value)
|
||||
__attribute__((const));
|
||||
size_t GPBComputeTagSize(int32_t fieldNumber) __attribute__((const));
|
||||
size_t GPBComputeWireFormatTagSize(int field_number, GPBType type)
|
||||
size_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType)
|
||||
__attribute__((const));
|
||||
|
||||
size_t GPBComputeDoubleSizeNoTag(double value) __attribute__((const));
|
||||
@ -259,7 +259,7 @@ size_t GPBComputeGroupSizeNoTag(GPBMessage *value) __attribute__((const));
|
||||
size_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value)
|
||||
__attribute__((const));
|
||||
size_t GPBComputeMessageSizeNoTag(GPBMessage *value) __attribute__((const));
|
||||
size_t GPBComputeDataSizeNoTag(NSData *value) __attribute__((const));
|
||||
size_t GPBComputeBytesSizeNoTag(NSData *value) __attribute__((const));
|
||||
size_t GPBComputeUInt32SizeNoTag(int32_t value) __attribute__((const));
|
||||
size_t GPBComputeEnumSizeNoTag(int32_t value) __attribute__((const));
|
||||
size_t GPBComputeSFixed32SizeNoTag(int32_t value) __attribute__((const));
|
||||
@ -297,22 +297,22 @@ CF_EXTERN_C_END
|
||||
// Write methods for types that can be in packed arrays.
|
||||
//%PDDM-DEFINE _WRITE_PACKABLE_DECLS(NAME, ARRAY_TYPE, TYPE)
|
||||
//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE)value;
|
||||
//%- (void)write##NAME##s:(int32_t)fieldNumber
|
||||
//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
|
||||
//% NAME$S tag:(uint32_t)tag;
|
||||
//%- (void)write##NAME##Array:(int32_t)fieldNumber
|
||||
//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
|
||||
//% NAME$S tag:(uint32_t)tag;
|
||||
//%- (void)write##NAME##NoTag:(TYPE)value;
|
||||
//%
|
||||
// Write methods for types that aren't in packed arrays.
|
||||
//%PDDM-DEFINE _WRITE_UNPACKABLE_DECLS(NAME, TYPE)
|
||||
//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE)value;
|
||||
//%- (void)write##NAME##s:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
//%- (void)write##NAME##NoTag:(TYPE)value;
|
||||
//%
|
||||
// Special write methods for Groups.
|
||||
//%PDDM-DEFINE _WRITE_GROUP_DECLS(NAME, TYPE)
|
||||
//%- (void)write##NAME:(int32_t)fieldNumber
|
||||
//% NAME$S value:(TYPE)value;
|
||||
//%- (void)write##NAME##s:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values;
|
||||
//%- (void)write##NAME##NoTag:(int32_t)fieldNumber
|
||||
//% NAME$S value:(TYPE)value;
|
||||
//%
|
||||
@ -335,6 +335,6 @@ CF_EXTERN_C_END
|
||||
//%_WRITE_PACKABLE_DECLS(Enum, Enum, int32_t)
|
||||
//%_WRITE_UNPACKABLE_DECLS(String, NSString *)
|
||||
//%_WRITE_UNPACKABLE_DECLS(Message, GPBMessage *)
|
||||
//%_WRITE_UNPACKABLE_DECLS(Data, NSData *)
|
||||
//%_WRITE_UNPACKABLE_DECLS(Bytes, NSData *)
|
||||
//%_WRITE_GROUP_DECLS(Group, GPBMessage *)
|
||||
//%_WRITE_GROUP_DECLS(UnknownGroup, GPBUnknownFieldSet *)
|
||||
|
@ -372,14 +372,14 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
[self writeMessageNoTag:value];
|
||||
}
|
||||
|
||||
- (void)writeDataNoTag:(NSData *)value {
|
||||
- (void)writeBytesNoTag:(NSData *)value {
|
||||
GPBWriteRawVarint32(&state_, (int32_t)[value length]);
|
||||
[self writeRawData:value];
|
||||
}
|
||||
|
||||
- (void)writeData:(int32_t)fieldNumber value:(NSData *)value {
|
||||
- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value {
|
||||
GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited);
|
||||
[self writeDataNoTag:value];
|
||||
[self writeBytesNoTag:value];
|
||||
}
|
||||
|
||||
- (void)writeUInt32NoTag:(uint32_t)value {
|
||||
@ -436,9 +436,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
}
|
||||
|
||||
//%PDDM-DEFINE WRITE_PACKABLE_DEFNS(NAME, ARRAY_TYPE, TYPE, ACCESSOR_NAME)
|
||||
//%- (void)write##NAME##s:(int32_t)fieldNumber
|
||||
//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
|
||||
//% NAME$S tag:(uint32_t)tag {
|
||||
//%- (void)write##NAME##Array:(int32_t)fieldNumber
|
||||
//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
|
||||
//% NAME$S tag:(uint32_t)tag {
|
||||
//% if (tag != 0) {
|
||||
//% if (values.count == 0) return;
|
||||
//% __block size_t dataSize = 0;
|
||||
@ -461,7 +461,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%}
|
||||
//%
|
||||
//%PDDM-DEFINE WRITE_UNPACKABLE_DEFNS(NAME, TYPE)
|
||||
//%- (void)write##NAME##s:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
//% for (TYPE *value in values) {
|
||||
//% [self write##NAME:fieldNumber value:value];
|
||||
//% }
|
||||
@ -470,9 +470,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Double, Double, double, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeDoubles:(int32_t)fieldNumber
|
||||
values:(GPBDoubleArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeDoubleArray:(int32_t)fieldNumber
|
||||
values:(GPBDoubleArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -497,9 +497,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Float, Float, float, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeFloats:(int32_t)fieldNumber
|
||||
values:(GPBFloatArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeFloatArray:(int32_t)fieldNumber
|
||||
values:(GPBFloatArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -524,9 +524,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt64, UInt64, uint64_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeUInt64s:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeUInt64Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -551,9 +551,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int64, Int64, int64_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeInt64s:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeInt64Array:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -578,9 +578,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int32, Int32, int32_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeInt32s:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeInt32Array:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -605,9 +605,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt32, UInt32, uint32_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeUInt32s:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeUInt32Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -632,9 +632,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed64, UInt64, uint64_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeFixed64s:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeFixed64Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -659,9 +659,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed32, UInt32, uint32_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeFixed32s:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeFixed32Array:(int32_t)fieldNumber
|
||||
values:(GPBUInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -686,9 +686,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt32, Int32, int32_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeSInt32s:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeSInt32Array:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -713,9 +713,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt64, Int64, int64_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeSInt64s:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeSInt64Array:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -740,9 +740,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed64, Int64, int64_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeSFixed64s:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeSFixed64Array:(int32_t)fieldNumber
|
||||
values:(GPBInt64Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -767,9 +767,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed32, Int32, int32_t, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeSFixed32s:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeSFixed32Array:(int32_t)fieldNumber
|
||||
values:(GPBInt32Array *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -794,9 +794,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Bool, Bool, BOOL, )
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeBools:(int32_t)fieldNumber
|
||||
values:(GPBBoolArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeBoolArray:(int32_t)fieldNumber
|
||||
values:(GPBBoolArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -821,9 +821,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Enum, Enum, int32_t, Raw)
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeEnums:(int32_t)fieldNumber
|
||||
values:(GPBEnumArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
- (void)writeEnumArray:(int32_t)fieldNumber
|
||||
values:(GPBEnumArray *)values
|
||||
tag:(uint32_t)tag {
|
||||
if (tag != 0) {
|
||||
if (values.count == 0) return;
|
||||
__block size_t dataSize = 0;
|
||||
@ -848,7 +848,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(String, NSString)
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeStrings:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
for (NSString *value in values) {
|
||||
[self writeString:fieldNumber value:value];
|
||||
}
|
||||
@ -857,25 +857,25 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Message, GPBMessage)
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeMessages:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
for (GPBMessage *value in values) {
|
||||
[self writeMessage:fieldNumber value:value];
|
||||
}
|
||||
}
|
||||
|
||||
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Data, NSData)
|
||||
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Bytes, NSData)
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeDatas:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
for (NSData *value in values) {
|
||||
[self writeData:fieldNumber value:value];
|
||||
[self writeBytes:fieldNumber value:value];
|
||||
}
|
||||
}
|
||||
|
||||
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Group, GPBMessage)
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeGroups:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
for (GPBMessage *value in values) {
|
||||
[self writeGroup:fieldNumber value:value];
|
||||
}
|
||||
@ -884,7 +884,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(UnknownGroup, GPBUnknownFieldSet)
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
- (void)writeUnknownGroups:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray *)values {
|
||||
for (GPBUnknownFieldSet *value in values) {
|
||||
[self writeUnknownGroup:fieldNumber value:value];
|
||||
}
|
||||
@ -906,7 +906,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
|
||||
GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem,
|
||||
GPBWireFormatStartGroup);
|
||||
GPBWriteUInt32(&state_, GPBWireFormatMessageSetTypeId, fieldNumber);
|
||||
[self writeData:GPBWireFormatMessageSetMessage value:value];
|
||||
[self writeBytes:GPBWireFormatMessageSetMessage value:value];
|
||||
GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem,
|
||||
GPBWireFormatEndGroup);
|
||||
}
|
||||
@ -1062,7 +1062,7 @@ size_t GPBComputeMessageSizeNoTag(GPBMessage *value) {
|
||||
return GPBComputeRawVarint32SizeForInteger(size) + size;
|
||||
}
|
||||
|
||||
size_t GPBComputeDataSizeNoTag(NSData *value) {
|
||||
size_t GPBComputeBytesSizeNoTag(NSData *value) {
|
||||
NSUInteger valueLength = [value length];
|
||||
return GPBComputeRawVarint32SizeForInteger(valueLength) + valueLength;
|
||||
}
|
||||
@ -1143,8 +1143,8 @@ size_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value) {
|
||||
return GPBComputeTagSize(fieldNumber) + GPBComputeMessageSizeNoTag(value);
|
||||
}
|
||||
|
||||
size_t GPBComputeDataSize(int32_t fieldNumber, NSData *value) {
|
||||
return GPBComputeTagSize(fieldNumber) + GPBComputeDataSizeNoTag(value);
|
||||
size_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value) {
|
||||
return GPBComputeTagSize(fieldNumber) + GPBComputeBytesSizeNoTag(value);
|
||||
}
|
||||
|
||||
size_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value) {
|
||||
@ -1183,7 +1183,7 @@ size_t GPBComputeRawMessageSetExtensionSize(int32_t fieldNumber,
|
||||
NSData *value) {
|
||||
return GPBComputeTagSize(GPBWireFormatMessageSetItem) * 2 +
|
||||
GPBComputeUInt32Size(GPBWireFormatMessageSetTypeId, fieldNumber) +
|
||||
GPBComputeDataSize(GPBWireFormatMessageSetMessage, value);
|
||||
GPBComputeBytesSize(GPBWireFormatMessageSetMessage, value);
|
||||
}
|
||||
|
||||
size_t GPBComputeTagSize(int32_t fieldNumber) {
|
||||
@ -1191,9 +1191,9 @@ size_t GPBComputeTagSize(int32_t fieldNumber) {
|
||||
GPBWireFormatMakeTag(fieldNumber, GPBWireFormatVarint));
|
||||
}
|
||||
|
||||
size_t GPBComputeWireFormatTagSize(int field_number, GPBType type) {
|
||||
size_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType) {
|
||||
size_t result = GPBComputeTagSize(field_number);
|
||||
if (type == GPBTypeGroup) {
|
||||
if (dataType == GPBDataTypeGroup) {
|
||||
// Groups have both a start and an end tag.
|
||||
return result * 2;
|
||||
} else {
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBRuntimeTypes.h"
|
||||
|
||||
@class GPBEnumDescriptor;
|
||||
@class GPBFieldDescriptor;
|
||||
@ -89,14 +89,14 @@ typedef NS_ENUM(NSInteger, GPBFieldType) {
|
||||
|
||||
@property(nonatomic, readonly, copy) NSString *name;
|
||||
@property(nonatomic, readonly) uint32_t number;
|
||||
@property(nonatomic, readonly) GPBType type;
|
||||
@property(nonatomic, readonly) GPBDataType dataType;
|
||||
@property(nonatomic, readonly) BOOL hasDefaultValue;
|
||||
@property(nonatomic, readonly) GPBValue defaultValue;
|
||||
@property(nonatomic, readonly) GPBGenericValue defaultValue;
|
||||
@property(nonatomic, readonly, getter=isRequired) BOOL required;
|
||||
@property(nonatomic, readonly, getter=isOptional) BOOL optional;
|
||||
@property(nonatomic, readonly) GPBFieldType fieldType;
|
||||
// If it is a map, the value type is in -type.
|
||||
@property(nonatomic, readonly) GPBType mapKeyType;
|
||||
@property(nonatomic, readonly) GPBDataType mapKeyDataType;
|
||||
@property(nonatomic, readonly, getter=isPackable) BOOL packable;
|
||||
|
||||
@property(nonatomic, readonly, assign) GPBOneofDescriptor *containingOneof;
|
||||
@ -129,12 +129,14 @@ typedef NS_ENUM(NSInteger, GPBFieldType) {
|
||||
|
||||
@end
|
||||
|
||||
@interface GPBExtensionDescriptor : NSObject
|
||||
@interface GPBExtensionDescriptor : NSObject<NSCopying>
|
||||
@property(nonatomic, readonly) uint32_t fieldNumber;
|
||||
@property(nonatomic, readonly) GPBType type;
|
||||
@property(nonatomic, readonly) Class containingMessageClass;
|
||||
@property(nonatomic, readonly) GPBDataType dataType;
|
||||
@property(nonatomic, readonly, getter=isRepeated) BOOL repeated;
|
||||
@property(nonatomic, readonly, getter=isPackable) BOOL packable;
|
||||
@property(nonatomic, readonly, assign) Class msgClass;
|
||||
@property(nonatomic, readonly) NSString *singletonName;
|
||||
@property(nonatomic, readonly, strong) GPBEnumDescriptor *enumDescriptor;
|
||||
@property(nonatomic, readonly) id defaultValue;
|
||||
@end
|
||||
|
@ -369,16 +369,26 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
GPBWireFormat format;
|
||||
if ((description->flags & GPBFieldMapKeyMask) != 0) {
|
||||
// Maps are repeated messages on the wire.
|
||||
format = GPBWireFormatForType(GPBTypeMessage, NO);
|
||||
format = GPBWireFormatForType(GPBDataTypeMessage, NO);
|
||||
} else {
|
||||
format = GPBWireFormatForType(description->type,
|
||||
description->flags & GPBFieldPacked);
|
||||
format = GPBWireFormatForType(description->dataType,
|
||||
((description->flags & GPBFieldPacked) != 0));
|
||||
}
|
||||
return GPBWireFormatMakeTag(description->number, format);
|
||||
}
|
||||
|
||||
uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self) {
|
||||
GPBMessageFieldDescription *description = self->description_;
|
||||
NSCAssert((description->flags & GPBFieldRepeated) != 0,
|
||||
@"Only valid on repeated fields");
|
||||
GPBWireFormat format =
|
||||
GPBWireFormatForType(description->dataType,
|
||||
((description->flags & GPBFieldPacked) == 0));
|
||||
return GPBWireFormatMakeTag(description->number, format);
|
||||
}
|
||||
|
||||
@implementation GPBFieldDescriptor {
|
||||
GPBValue defaultValue_;
|
||||
GPBGenericValue defaultValue_;
|
||||
GPBFieldOptions *fieldOptions_;
|
||||
|
||||
// Message ivars
|
||||
@ -416,12 +426,66 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
getSel_ = sel_getUid(description->name);
|
||||
setSel_ = SelFromStrings("set", description->name, NULL, YES);
|
||||
|
||||
GPBDataType dataType = description->dataType;
|
||||
BOOL isMessage = GPBDataTypeIsMessage(dataType);
|
||||
BOOL isMapOrArray = GPBFieldIsMapOrArray(self);
|
||||
|
||||
if (isMapOrArray) {
|
||||
// map<>/repeated fields get a *Count property (inplace of a has*) to
|
||||
// support checking if there are any entries without triggering
|
||||
// autocreation.
|
||||
hasOrCountSel_ = SelFromStrings(NULL, description->name, "_Count", NO);
|
||||
} else {
|
||||
// If there is a positive hasIndex, then:
|
||||
// - All fields types for proto2 messages get has* selectors.
|
||||
// - Only message fields for proto3 messages get has* selectors.
|
||||
// Note: the positive check is to handle oneOfs, we can't check
|
||||
// containingOneof_ because it isn't set until after initialization.
|
||||
if ((description->hasIndex >= 0) &&
|
||||
(description->hasIndex != GPBNoHasBit) &&
|
||||
((syntax != GPBFileSyntaxProto3) || isMessage)) {
|
||||
hasOrCountSel_ = SelFromStrings("has", description->name, NULL, NO);
|
||||
setHasSel_ = SelFromStrings("setHas", description->name, NULL, YES);
|
||||
}
|
||||
}
|
||||
|
||||
// Extra type specific data.
|
||||
if (isMessage) {
|
||||
const char *className = description->dataTypeSpecific.className;
|
||||
msgClass_ = objc_getClass(className);
|
||||
NSAssert(msgClass_, @"Class %s not defined", className);
|
||||
} else if (dataType == GPBDataTypeEnum) {
|
||||
if ((description_->flags & GPBFieldHasEnumDescriptor) != 0) {
|
||||
enumHandling_.enumDescriptor_ =
|
||||
description->dataTypeSpecific.enumDescFunc();
|
||||
} else {
|
||||
enumHandling_.enumVerifier_ =
|
||||
description->dataTypeSpecific.enumVerifier;
|
||||
}
|
||||
}
|
||||
|
||||
// Non map<>/repeated fields can have defaults.
|
||||
if (!isMapOrArray) {
|
||||
defaultValue_ = description->defaultValue;
|
||||
if (dataType == GPBDataTypeBytes) {
|
||||
// Data stored as a length prefixed (network byte order) c-string in
|
||||
// descriptor structure.
|
||||
const uint8_t *bytes = (const uint8_t *)defaultValue_.valueData;
|
||||
if (bytes) {
|
||||
uint32_t length = *((uint32_t *)bytes);
|
||||
length = ntohl(length);
|
||||
bytes += sizeof(length);
|
||||
defaultValue_.valueData =
|
||||
[[NSData alloc] initWithBytes:bytes length:length];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FieldOptions stored as a length prefixed (network byte order) c-escaped
|
||||
// string in descriptor records.
|
||||
if (description->fieldOptions) {
|
||||
// FieldOptions stored as a length prefixed c-escaped string in descriptor
|
||||
// records.
|
||||
uint8_t *optionsBytes = (uint8_t *)description->fieldOptions;
|
||||
uint32_t optionsLength = *((uint32_t *)optionsBytes);
|
||||
// The length is stored in network byte order.
|
||||
optionsLength = ntohl(optionsLength);
|
||||
if (optionsLength > 0) {
|
||||
optionsBytes += sizeof(optionsLength);
|
||||
@ -434,69 +498,20 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
error:NULL] retain];
|
||||
}
|
||||
}
|
||||
|
||||
GPBType type = description->type;
|
||||
BOOL isMessage = GPBTypeIsMessage(type);
|
||||
if (isMessage) {
|
||||
// No has* for repeated/map or something in a oneof (we can't check
|
||||
// containingOneof_ because it isn't set until after initialization).
|
||||
if ((description->hasIndex >= 0) &&
|
||||
(description->hasIndex != GPBNoHasBit)) {
|
||||
hasSel_ = SelFromStrings("has", description->name, NULL, NO);
|
||||
setHasSel_ = SelFromStrings("setHas", description->name, NULL, YES);
|
||||
}
|
||||
const char *className = description->typeSpecific.className;
|
||||
msgClass_ = objc_getClass(className);
|
||||
NSAssert1(msgClass_, @"Class %s not defined", className);
|
||||
// The defaultValue_ is fetched directly in -defaultValue to avoid
|
||||
// initialization order issues.
|
||||
} else {
|
||||
if (!GPBFieldIsMapOrArray(self)) {
|
||||
defaultValue_ = description->defaultValue;
|
||||
if (type == GPBTypeData) {
|
||||
// Data stored as a length prefixed c-string in descriptor records.
|
||||
const uint8_t *bytes = (const uint8_t *)defaultValue_.valueData;
|
||||
if (bytes) {
|
||||
uint32_t length = *((uint32_t *)bytes);
|
||||
// The length is stored in network byte order.
|
||||
length = ntohl(length);
|
||||
bytes += sizeof(length);
|
||||
defaultValue_.valueData =
|
||||
[[NSData alloc] initWithBytes:bytes length:length];
|
||||
}
|
||||
}
|
||||
// No has* methods for proto3 or if our hasIndex is < 0 because it
|
||||
// means the field is in a oneof (we can't check containingOneof_
|
||||
// because it isn't set until after initialization).
|
||||
if ((syntax != GPBFileSyntaxProto3) && (description->hasIndex >= 0) &&
|
||||
(description->hasIndex != GPBNoHasBit)) {
|
||||
hasSel_ = SelFromStrings("has", description->name, NULL, NO);
|
||||
setHasSel_ = SelFromStrings("setHas", description->name, NULL, YES);
|
||||
}
|
||||
}
|
||||
if (GPBTypeIsEnum(type)) {
|
||||
if (description_->flags & GPBFieldHasEnumDescriptor) {
|
||||
enumHandling_.enumDescriptor_ =
|
||||
description->typeSpecific.enumDescFunc();
|
||||
} else {
|
||||
enumHandling_.enumVerifier_ = description->typeSpecific.enumVerifier;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
if (description_->type == GPBTypeData &&
|
||||
if (description_->dataType == GPBDataTypeBytes &&
|
||||
!(description_->flags & GPBFieldRepeated)) {
|
||||
[defaultValue_.valueData release];
|
||||
}
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (GPBType)type {
|
||||
return description_->type;
|
||||
- (GPBDataType)dataType {
|
||||
return description_->dataType;
|
||||
}
|
||||
|
||||
- (BOOL)hasDefaultValue {
|
||||
@ -530,36 +545,36 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
}
|
||||
}
|
||||
|
||||
- (GPBType)mapKeyType {
|
||||
- (GPBDataType)mapKeyDataType {
|
||||
switch (description_->flags & GPBFieldMapKeyMask) {
|
||||
case GPBFieldMapKeyInt32:
|
||||
return GPBTypeInt32;
|
||||
return GPBDataTypeInt32;
|
||||
case GPBFieldMapKeyInt64:
|
||||
return GPBTypeInt64;
|
||||
return GPBDataTypeInt64;
|
||||
case GPBFieldMapKeyUInt32:
|
||||
return GPBTypeUInt32;
|
||||
return GPBDataTypeUInt32;
|
||||
case GPBFieldMapKeyUInt64:
|
||||
return GPBTypeUInt64;
|
||||
return GPBDataTypeUInt64;
|
||||
case GPBFieldMapKeySInt32:
|
||||
return GPBTypeSInt32;
|
||||
return GPBDataTypeSInt32;
|
||||
case GPBFieldMapKeySInt64:
|
||||
return GPBTypeSInt64;
|
||||
return GPBDataTypeSInt64;
|
||||
case GPBFieldMapKeyFixed32:
|
||||
return GPBTypeFixed32;
|
||||
return GPBDataTypeFixed32;
|
||||
case GPBFieldMapKeyFixed64:
|
||||
return GPBTypeFixed64;
|
||||
return GPBDataTypeFixed64;
|
||||
case GPBFieldMapKeySFixed32:
|
||||
return GPBTypeSFixed32;
|
||||
return GPBDataTypeSFixed32;
|
||||
case GPBFieldMapKeySFixed64:
|
||||
return GPBTypeSFixed64;
|
||||
return GPBDataTypeSFixed64;
|
||||
case GPBFieldMapKeyBool:
|
||||
return GPBTypeBool;
|
||||
return GPBDataTypeBool;
|
||||
case GPBFieldMapKeyString:
|
||||
return GPBTypeString;
|
||||
return GPBDataTypeString;
|
||||
|
||||
default:
|
||||
NSAssert(0, @"Not a map type");
|
||||
return GPBTypeInt32; // For lack of anything better.
|
||||
return GPBDataTypeInt32; // For lack of anything better.
|
||||
}
|
||||
}
|
||||
|
||||
@ -568,8 +583,8 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
}
|
||||
|
||||
- (BOOL)isValidEnumValue:(int32_t)value {
|
||||
NSAssert(description_->type == GPBTypeEnum,
|
||||
@"Field Must be of type GPBTypeEnum");
|
||||
NSAssert(description_->dataType == GPBDataTypeEnum,
|
||||
@"Field Must be of type GPBDataTypeEnum");
|
||||
if (description_->flags & GPBFieldHasEnumDescriptor) {
|
||||
return enumHandling_.enumDescriptor_.enumVerifier(value);
|
||||
} else {
|
||||
@ -585,18 +600,18 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
}
|
||||
}
|
||||
|
||||
- (GPBValue)defaultValue {
|
||||
- (GPBGenericValue)defaultValue {
|
||||
// Depends on the fact that defaultValue_ is initialized either to "0/nil" or
|
||||
// to an actual defaultValue in our initializer.
|
||||
GPBValue value = defaultValue_;
|
||||
GPBGenericValue value = defaultValue_;
|
||||
|
||||
if (!(description_->flags & GPBFieldRepeated)) {
|
||||
// We special handle data and strings. If they are nil, we replace them
|
||||
// with empty string/empty data.
|
||||
GPBType type = description_->type;
|
||||
if (type == GPBTypeData && value.valueData == nil) {
|
||||
GPBDataType type = description_->dataType;
|
||||
if (type == GPBDataTypeBytes && value.valueData == nil) {
|
||||
value.valueData = GPBEmptyNSData();
|
||||
} else if (type == GPBTypeString && value.valueString == nil) {
|
||||
} else if (type == GPBDataTypeString && value.valueString == nil) {
|
||||
value.valueString = @"";
|
||||
}
|
||||
}
|
||||
@ -635,7 +650,7 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
}
|
||||
|
||||
// Groups vs. other fields.
|
||||
if (description_->type == GPBTypeGroup) {
|
||||
if (description_->dataType == GPBDataTypeGroup) {
|
||||
// Just capitalize the first letter.
|
||||
unichar firstChar = [name characterAtIndex:0];
|
||||
if (firstChar >= 'a' && firstChar <= 'z') {
|
||||
@ -811,16 +826,70 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
|
||||
@end
|
||||
|
||||
@implementation GPBExtensionDescriptor
|
||||
@implementation GPBExtensionDescriptor {
|
||||
GPBGenericValue defaultValue_;
|
||||
}
|
||||
|
||||
@synthesize containingMessageClass = containingMessageClass_;
|
||||
|
||||
- (instancetype)initWithExtensionDescription:
|
||||
(GPBExtensionDescription *)description {
|
||||
if ((self = [super init])) {
|
||||
description_ = description;
|
||||
|
||||
#if DEBUG
|
||||
const char *className = description->messageOrGroupClassName;
|
||||
if (className) {
|
||||
NSAssert(objc_lookUpClass(className) != Nil,
|
||||
@"Class %s not defined", className);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (description->extendedClass) {
|
||||
Class containingClass = objc_lookUpClass(description->extendedClass);
|
||||
NSAssert(containingClass, @"Class %s not defined",
|
||||
description->extendedClass);
|
||||
containingMessageClass_ = containingClass;
|
||||
}
|
||||
|
||||
GPBDataType type = description_->dataType;
|
||||
if (type == GPBDataTypeBytes) {
|
||||
// Data stored as a length prefixed c-string in descriptor records.
|
||||
const uint8_t *bytes =
|
||||
(const uint8_t *)description->defaultValue.valueData;
|
||||
if (bytes) {
|
||||
uint32_t length = *((uint32_t *)bytes);
|
||||
// The length is stored in network byte order.
|
||||
length = ntohl(length);
|
||||
bytes += sizeof(length);
|
||||
defaultValue_.valueData =
|
||||
[[NSData alloc] initWithBytes:bytes length:length];
|
||||
}
|
||||
} else if (type == GPBDataTypeMessage || type == GPBDataTypeGroup) {
|
||||
// The default is looked up in -defaultValue instead since extensions
|
||||
// aren't common, we avoid the hit startup hit and it avoid initialization
|
||||
// order issues.
|
||||
} else {
|
||||
defaultValue_ = description->defaultValue;
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
if ((description_->dataType == GPBDataTypeBytes) &&
|
||||
!GPBExtensionIsRepeated(description_)) {
|
||||
[defaultValue_.valueData release];
|
||||
}
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (instancetype)copyWithZone:(NSZone *)zone {
|
||||
#pragma unused(zone)
|
||||
// Immutable.
|
||||
return [self retain];
|
||||
}
|
||||
|
||||
- (NSString *)singletonName {
|
||||
return @(description_->singletonName);
|
||||
}
|
||||
@ -833,12 +902,24 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
return description_->fieldNumber;
|
||||
}
|
||||
|
||||
- (GPBType)type {
|
||||
return description_->type;
|
||||
- (GPBDataType)dataType {
|
||||
return description_->dataType;
|
||||
}
|
||||
|
||||
- (GPBWireFormat)wireType {
|
||||
return GPBWireFormatForType(description_->dataType,
|
||||
GPBExtensionIsPacked(description_));
|
||||
}
|
||||
|
||||
- (GPBWireFormat)alternateWireType {
|
||||
NSAssert(GPBExtensionIsRepeated(description_),
|
||||
@"Only valid on repeated extensions");
|
||||
return GPBWireFormatForType(description_->dataType,
|
||||
!GPBExtensionIsPacked(description_));
|
||||
}
|
||||
|
||||
- (BOOL)isRepeated {
|
||||
return (description_->options & GPBExtensionRepeated) != 0;
|
||||
return GPBExtensionIsRepeated(description_);
|
||||
}
|
||||
|
||||
- (BOOL)isMap {
|
||||
@ -846,7 +927,7 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
}
|
||||
|
||||
- (BOOL)isPackable {
|
||||
return (description_->options & GPBExtensionPacked) != 0;
|
||||
return GPBExtensionIsPacked(description_);
|
||||
}
|
||||
|
||||
- (Class)msgClass {
|
||||
@ -854,11 +935,63 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
|
||||
}
|
||||
|
||||
- (GPBEnumDescriptor *)enumDescriptor {
|
||||
if (GPBTypeIsEnum(description_->type)) {
|
||||
if (description_->dataType == GPBDataTypeEnum) {
|
||||
GPBEnumDescriptor *enumDescriptor = description_->enumDescriptorFunc();
|
||||
return enumDescriptor;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (id)defaultValue {
|
||||
if (GPBExtensionIsRepeated(description_)) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
switch (description_->dataType) {
|
||||
case GPBDataTypeBool:
|
||||
return @(defaultValue_.valueBool);
|
||||
case GPBDataTypeFloat:
|
||||
return @(defaultValue_.valueFloat);
|
||||
case GPBDataTypeDouble:
|
||||
return @(defaultValue_.valueDouble);
|
||||
case GPBDataTypeInt32:
|
||||
case GPBDataTypeSInt32:
|
||||
case GPBDataTypeEnum:
|
||||
case GPBDataTypeSFixed32:
|
||||
return @(defaultValue_.valueInt32);
|
||||
case GPBDataTypeInt64:
|
||||
case GPBDataTypeSInt64:
|
||||
case GPBDataTypeSFixed64:
|
||||
return @(defaultValue_.valueInt64);
|
||||
case GPBDataTypeUInt32:
|
||||
case GPBDataTypeFixed32:
|
||||
return @(defaultValue_.valueUInt32);
|
||||
case GPBDataTypeUInt64:
|
||||
case GPBDataTypeFixed64:
|
||||
return @(defaultValue_.valueUInt64);
|
||||
case GPBDataTypeBytes:
|
||||
// Like message fields, the default is zero length data.
|
||||
return (defaultValue_.valueData ? defaultValue_.valueData
|
||||
: GPBEmptyNSData());
|
||||
case GPBDataTypeString:
|
||||
// Like message fields, the default is zero length string.
|
||||
return (defaultValue_.valueString ? defaultValue_.valueString : @"");
|
||||
case GPBDataTypeGroup:
|
||||
case GPBDataTypeMessage:
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other {
|
||||
int32_t selfNumber = description_->fieldNumber;
|
||||
int32_t otherNumber = other->description_->fieldNumber;
|
||||
if (selfNumber < otherNumber) {
|
||||
return NSOrderedAscending;
|
||||
} else if (selfNumber == otherNumber) {
|
||||
return NSOrderedSame;
|
||||
} else {
|
||||
return NSOrderedDescending;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -33,6 +33,7 @@
|
||||
// subject to change at any time without notice.
|
||||
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBWireFormat.h"
|
||||
|
||||
// Describes attributes of the field.
|
||||
typedef NS_OPTIONS(uint32_t, GPBFieldFlags) {
|
||||
@ -66,8 +67,6 @@ typedef NS_OPTIONS(uint32_t, GPBFieldFlags) {
|
||||
// set, the name can be derived from the ObjC name.
|
||||
GPBFieldTextFormatNameCustom = 1 << 16,
|
||||
// Indicates the field has an enum descriptor.
|
||||
// TODO(thomasvl): Output the CPP check to use descFunc or validator based
|
||||
// on final compile. This will then get added based on that.
|
||||
GPBFieldHasEnumDescriptor = 1 << 17,
|
||||
};
|
||||
|
||||
@ -84,21 +83,21 @@ typedef struct GPBMessageFieldDescription {
|
||||
int32_t hasIndex;
|
||||
// Field flags. Use accessor functions below.
|
||||
GPBFieldFlags flags;
|
||||
// Type of the ivar.
|
||||
GPBType type;
|
||||
// Data type of the ivar.
|
||||
GPBDataType dataType;
|
||||
// Offset of the variable into it's structure struct.
|
||||
size_t offset;
|
||||
// FieldOptions protobuf, serialized as string.
|
||||
const char *fieldOptions;
|
||||
|
||||
GPBValue defaultValue; // Default value for the ivar.
|
||||
GPBGenericValue defaultValue; // Default value for the ivar.
|
||||
union {
|
||||
const char *className; // Name for message class.
|
||||
// For enums only: If EnumDescriptors are compiled in, it will be that,
|
||||
// otherwise it will be the verifier.
|
||||
GPBEnumDescriptorFunc enumDescFunc;
|
||||
GPBEnumValidationFunc enumVerifier;
|
||||
} typeSpecific;
|
||||
} dataTypeSpecific;
|
||||
} GPBMessageFieldDescription;
|
||||
|
||||
// Describes a oneof.
|
||||
@ -133,10 +132,10 @@ typedef NS_OPTIONS(uint32_t, GPBExtensionOptions) {
|
||||
// An extension
|
||||
typedef struct GPBExtensionDescription {
|
||||
const char *singletonName;
|
||||
GPBType type;
|
||||
GPBDataType dataType;
|
||||
const char *extendedClass;
|
||||
int32_t fieldNumber;
|
||||
GPBValue defaultValue;
|
||||
GPBGenericValue defaultValue;
|
||||
const char *messageOrGroupClassName;
|
||||
GPBExtensionOptions options;
|
||||
GPBEnumDescriptorFunc enumDescriptorFunc;
|
||||
@ -217,7 +216,7 @@ typedef struct GPBExtensionDescription {
|
||||
|
||||
SEL getSel_;
|
||||
SEL setSel_;
|
||||
SEL hasSel_;
|
||||
SEL hasOrCountSel_; // *Count for map<>/repeated fields, has* otherwise.
|
||||
SEL setHasSel_;
|
||||
}
|
||||
|
||||
@ -254,10 +253,18 @@ typedef struct GPBExtensionDescription {
|
||||
@package
|
||||
GPBExtensionDescription *description_;
|
||||
}
|
||||
@property(nonatomic, readonly) GPBWireFormat wireType;
|
||||
|
||||
// For repeated extensions, alternateWireType is the wireType with the opposite
|
||||
// value for the packable property. i.e. - if the extension was marked packed
|
||||
// it would be the wire type for unpacked; if the extension was marked unpacked,
|
||||
// it would be the wire type for packed.
|
||||
@property(nonatomic, readonly) GPBWireFormat alternateWireType;
|
||||
|
||||
// description has to be long lived, it is held as a raw pointer.
|
||||
- (instancetype)initWithExtensionDescription:
|
||||
(GPBExtensionDescription *)description;
|
||||
(GPBExtensionDescription *)description;
|
||||
- (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other;
|
||||
@end
|
||||
|
||||
CF_EXTERN_C_BEGIN
|
||||
@ -267,8 +274,8 @@ GPB_INLINE BOOL GPBFieldIsMapOrArray(GPBFieldDescriptor *field) {
|
||||
(GPBFieldRepeated | GPBFieldMapKeyMask)) != 0;
|
||||
}
|
||||
|
||||
GPB_INLINE GPBType GPBGetFieldType(GPBFieldDescriptor *field) {
|
||||
return field->description_->type;
|
||||
GPB_INLINE GPBDataType GPBGetFieldDataType(GPBFieldDescriptor *field) {
|
||||
return field->description_->dataType;
|
||||
}
|
||||
|
||||
GPB_INLINE int32_t GPBFieldHasIndex(GPBFieldDescriptor *field) {
|
||||
@ -281,6 +288,12 @@ GPB_INLINE uint32_t GPBFieldNumber(GPBFieldDescriptor *field) {
|
||||
|
||||
uint32_t GPBFieldTag(GPBFieldDescriptor *self);
|
||||
|
||||
// For repeated fields, alternateWireType is the wireType with the opposite
|
||||
// value for the packable property. i.e. - if the field was marked packed it
|
||||
// would be the wire type for unpacked; if the field was marked unpacked, it
|
||||
// would be the wire type for packed.
|
||||
uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self);
|
||||
|
||||
GPB_INLINE BOOL GPBPreserveUnknownFields(GPBFileSyntax syntax) {
|
||||
return syntax != GPBFileSyntaxProto3;
|
||||
}
|
||||
@ -289,4 +302,17 @@ GPB_INLINE BOOL GPBHasPreservingUnknownEnumSemantics(GPBFileSyntax syntax) {
|
||||
return syntax == GPBFileSyntaxProto3;
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBExtensionIsRepeated(GPBExtensionDescription *description) {
|
||||
return (description->options & GPBExtensionRepeated) != 0;
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBExtensionIsPacked(GPBExtensionDescription *description) {
|
||||
return (description->options & GPBExtensionPacked) != 0;
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBExtensionIsWireFormat(GPBExtensionDescription *description) {
|
||||
return (description->options & GPBExtensionSetWireFormat) != 0;
|
||||
}
|
||||
|
||||
|
||||
CF_EXTERN_C_END
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBRuntimeTypes.h"
|
||||
|
||||
// These classes are used for map fields of basic data types. They are used because
|
||||
// they perform better than boxing into NSNumbers in NSDictionaries.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -41,7 +41,8 @@
|
||||
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field;
|
||||
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
|
||||
asField:(GPBFieldDescriptor *)field;
|
||||
- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key;
|
||||
- (void)setGPBGenericValue:(GPBGenericValue *)value
|
||||
forGPBGenericValueKey:(GPBGenericValue *)key;
|
||||
- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block;
|
||||
@end
|
||||
|
||||
@ -75,8 +76,8 @@
|
||||
//%
|
||||
//%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Enum()
|
||||
//%- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
//% forKey:(GPBValue *)key
|
||||
//% keyType:(GPBType)keyType;
|
||||
//% forKey:(GPBGenericValue *)key
|
||||
//% keyDataType:(GPBDataType)keyDataType;
|
||||
//%
|
||||
|
||||
//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt32)
|
||||
@ -129,8 +130,8 @@
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
|
||||
}
|
||||
- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
forKey:(GPBValue *)key
|
||||
keyType:(GPBType)keyType;
|
||||
forKey:(GPBGenericValue *)key
|
||||
keyDataType:(GPBDataType)keyDataType;
|
||||
@end
|
||||
|
||||
@interface GPBUInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> {
|
||||
@ -192,8 +193,8 @@
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
|
||||
}
|
||||
- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
forKey:(GPBValue *)key
|
||||
keyType:(GPBType)keyType;
|
||||
forKey:(GPBGenericValue *)key
|
||||
keyDataType:(GPBDataType)keyDataType;
|
||||
@end
|
||||
|
||||
@interface GPBInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> {
|
||||
@ -255,8 +256,8 @@
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
|
||||
}
|
||||
- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
forKey:(GPBValue *)key
|
||||
keyType:(GPBType)keyType;
|
||||
forKey:(GPBGenericValue *)key
|
||||
keyDataType:(GPBDataType)keyDataType;
|
||||
@end
|
||||
|
||||
@interface GPBUInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> {
|
||||
@ -318,8 +319,8 @@
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
|
||||
}
|
||||
- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
forKey:(GPBValue *)key
|
||||
keyType:(GPBType)keyType;
|
||||
forKey:(GPBGenericValue *)key
|
||||
keyDataType:(GPBDataType)keyDataType;
|
||||
@end
|
||||
|
||||
@interface GPBInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> {
|
||||
@ -381,8 +382,8 @@
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
|
||||
}
|
||||
- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
forKey:(GPBValue *)key
|
||||
keyType:(GPBType)keyType;
|
||||
forKey:(GPBGenericValue *)key
|
||||
keyDataType:(GPBDataType)keyDataType;
|
||||
@end
|
||||
|
||||
@interface GPBBoolObjectDictionary () <GPBDictionaryInternalsProtocol> {
|
||||
@ -444,8 +445,8 @@
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
|
||||
}
|
||||
- (NSData *)serializedDataForUnknownValue:(int32_t)value
|
||||
forKey:(GPBValue *)key
|
||||
keyType:(GPBType)keyType;
|
||||
forKey:(GPBGenericValue *)key
|
||||
keyDataType:(GPBDataType)keyDataType;
|
||||
@end
|
||||
|
||||
//%PDDM-EXPAND-END (6 expansions)
|
||||
|
@ -1,525 +0,0 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#import "GPBExtensionField_PackagePrivate.h"
|
||||
|
||||
#import <objc/runtime.h>
|
||||
|
||||
#import "GPBCodedInputStream_PackagePrivate.h"
|
||||
#import "GPBCodedOutputStream.h"
|
||||
#import "GPBDescriptor_PackagePrivate.h"
|
||||
#import "GPBMessage_PackagePrivate.h"
|
||||
#import "GPBUtilities_PackagePrivate.h"
|
||||
|
||||
GPB_INLINE size_t TypeSize(GPBType type) {
|
||||
switch (type) {
|
||||
case GPBTypeBool:
|
||||
return 1;
|
||||
case GPBTypeFixed32:
|
||||
case GPBTypeSFixed32:
|
||||
case GPBTypeFloat:
|
||||
return 4;
|
||||
case GPBTypeFixed64:
|
||||
case GPBTypeSFixed64:
|
||||
case GPBTypeDouble:
|
||||
return 8;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL ExtensionIsRepeated(GPBExtensionDescription *description) {
|
||||
return (description->options & GPBExtensionRepeated) != 0;
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL ExtensionIsPacked(GPBExtensionDescription *description) {
|
||||
return (description->options & GPBExtensionPacked) != 0;
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL ExtensionIsWireFormat(GPBExtensionDescription *description) {
|
||||
return (description->options & GPBExtensionSetWireFormat) != 0;
|
||||
}
|
||||
|
||||
static size_t ComputePBSerializedSizeNoTagOfObject(GPBType type, id object) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBType##TYPE: \
|
||||
return GPBCompute##TYPE##SizeNoTag([(NSNumber *)object ACCESSOR]);
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBType##TYPE: \
|
||||
return GPBCompute##TYPE##SizeNoTag(object);
|
||||
switch (type) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Data)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Message)
|
||||
FIELD_CASE2(Group)
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static size_t ComputeSerializedSizeIncludingTagOfObject(
|
||||
GPBExtensionDescription *description, id object) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBType##TYPE: \
|
||||
return GPBCompute##TYPE##Size(description->fieldNumber, \
|
||||
[(NSNumber *)object ACCESSOR]);
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBType##TYPE: \
|
||||
return GPBCompute##TYPE##Size(description->fieldNumber, object);
|
||||
switch (description->type) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Data)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Group)
|
||||
case GPBTypeMessage:
|
||||
if (ExtensionIsWireFormat(description)) {
|
||||
return GPBComputeMessageSetExtensionSize(description->fieldNumber,
|
||||
object);
|
||||
} else {
|
||||
return GPBComputeMessageSize(description->fieldNumber, object);
|
||||
}
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static size_t ComputeSerializedSizeIncludingTagOfArray(
|
||||
GPBExtensionDescription *description, NSArray *values) {
|
||||
if (ExtensionIsPacked(description)) {
|
||||
size_t size = 0;
|
||||
size_t typeSize = TypeSize(description->type);
|
||||
if (typeSize != 0) {
|
||||
size = values.count * typeSize;
|
||||
} else {
|
||||
for (id value in values) {
|
||||
size += ComputePBSerializedSizeNoTagOfObject(description->type, value);
|
||||
}
|
||||
}
|
||||
return size + GPBComputeTagSize(description->fieldNumber) +
|
||||
GPBComputeRawVarint32SizeForInteger(size);
|
||||
} else {
|
||||
size_t size = 0;
|
||||
for (id value in values) {
|
||||
size += ComputeSerializedSizeIncludingTagOfObject(description, value);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
}
|
||||
|
||||
static void WriteObjectIncludingTagToCodedOutputStream(
|
||||
id object, GPBExtensionDescription *description,
|
||||
GPBCodedOutputStream *output) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBType##TYPE: \
|
||||
[output write##TYPE:description->fieldNumber \
|
||||
value:[(NSNumber *)object ACCESSOR]]; \
|
||||
return;
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBType##TYPE: \
|
||||
[output write##TYPE:description->fieldNumber value:object]; \
|
||||
return;
|
||||
switch (description->type) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Data)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Group)
|
||||
case GPBTypeMessage:
|
||||
if (ExtensionIsWireFormat(description)) {
|
||||
[output writeMessageSetExtension:description->fieldNumber value:object];
|
||||
} else {
|
||||
[output writeMessage:description->fieldNumber value:object];
|
||||
}
|
||||
return;
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static void WriteObjectNoTagToCodedOutputStream(
|
||||
id object, GPBExtensionDescription *description,
|
||||
GPBCodedOutputStream *output) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBType##TYPE: \
|
||||
[output write##TYPE##NoTag:[(NSNumber *)object ACCESSOR]]; \
|
||||
return;
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBType##TYPE: \
|
||||
[output write##TYPE##NoTag:object]; \
|
||||
return;
|
||||
switch (description->type) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Data)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Message)
|
||||
case GPBTypeGroup:
|
||||
[output writeGroupNoTag:description->fieldNumber value:object];
|
||||
return;
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static void WriteArrayIncludingTagsToCodedOutputStream(
|
||||
NSArray *values, GPBExtensionDescription *description,
|
||||
GPBCodedOutputStream *output) {
|
||||
if (ExtensionIsPacked(description)) {
|
||||
[output writeTag:description->fieldNumber
|
||||
format:GPBWireFormatLengthDelimited];
|
||||
size_t dataSize = 0;
|
||||
size_t typeSize = TypeSize(description->type);
|
||||
if (typeSize != 0) {
|
||||
dataSize = values.count * typeSize;
|
||||
} else {
|
||||
for (id value in values) {
|
||||
dataSize +=
|
||||
ComputePBSerializedSizeNoTagOfObject(description->type, value);
|
||||
}
|
||||
}
|
||||
[output writeRawVarintSizeTAs32:dataSize];
|
||||
for (id value in values) {
|
||||
WriteObjectNoTagToCodedOutputStream(value, description, output);
|
||||
}
|
||||
} else {
|
||||
for (id value in values) {
|
||||
WriteObjectIncludingTagToCodedOutputStream(value, description, output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@implementation GPBExtensionField {
|
||||
GPBExtensionDescription *description_;
|
||||
GPBExtensionDescriptor *descriptor_;
|
||||
GPBValue defaultValue_;
|
||||
}
|
||||
|
||||
@synthesize containingType = containingType_;
|
||||
@synthesize descriptor = descriptor_;
|
||||
|
||||
- (instancetype)init {
|
||||
// Throw an exception if people attempt to not use the designated initializer.
|
||||
self = [super init];
|
||||
if (self != nil) {
|
||||
[self doesNotRecognizeSelector:_cmd];
|
||||
self = nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithDescription:(GPBExtensionDescription *)description {
|
||||
if ((self = [super init])) {
|
||||
description_ = description;
|
||||
if (description->extendedClass) {
|
||||
Class containingClass = objc_lookUpClass(description->extendedClass);
|
||||
NSAssert1(containingClass, @"Class %s not defined",
|
||||
description->extendedClass);
|
||||
containingType_ = [containingClass descriptor];
|
||||
}
|
||||
#if DEBUG
|
||||
const char *className = description->messageOrGroupClassName;
|
||||
if (className) {
|
||||
NSAssert1(objc_lookUpClass(className) != Nil, @"Class %s not defined",
|
||||
className);
|
||||
}
|
||||
#endif
|
||||
descriptor_ = [[GPBExtensionDescriptor alloc]
|
||||
initWithExtensionDescription:description];
|
||||
GPBType type = description_->type;
|
||||
if (type == GPBTypeData) {
|
||||
// Data stored as a length prefixed c-string in descriptor records.
|
||||
const uint8_t *bytes =
|
||||
(const uint8_t *)description->defaultValue.valueData;
|
||||
if (bytes) {
|
||||
uint32_t length = *((uint32_t *)bytes);
|
||||
// The length is stored in network byte order.
|
||||
length = ntohl(length);
|
||||
bytes += sizeof(length);
|
||||
defaultValue_.valueData =
|
||||
[[NSData alloc] initWithBytes:bytes length:length];
|
||||
}
|
||||
} else if (type == GPBTypeMessage || type == GPBTypeGroup) {
|
||||
// The default is looked up in -defaultValue instead since extensions
|
||||
// aren't
|
||||
// common, we avoid the hit startup hit and it avoid initialization order
|
||||
// issues.
|
||||
} else {
|
||||
defaultValue_ = description->defaultValue;
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
if ((description_->type == GPBTypeData) &&
|
||||
!ExtensionIsRepeated(description_)) {
|
||||
[defaultValue_.valueData release];
|
||||
}
|
||||
[descriptor_ release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (NSString *)description {
|
||||
return [NSString stringWithFormat:@"<%@ %p> FieldNumber:%d ContainingType:%@",
|
||||
[self class], self, self.fieldNumber,
|
||||
self.containingType];
|
||||
}
|
||||
|
||||
- (id)copyWithZone:(NSZone *)__unused zone {
|
||||
return [self retain];
|
||||
}
|
||||
|
||||
#pragma mark Properties
|
||||
|
||||
- (int32_t)fieldNumber {
|
||||
return description_->fieldNumber;
|
||||
}
|
||||
|
||||
- (GPBWireFormat)wireType {
|
||||
return GPBWireFormatForType(description_->type,
|
||||
ExtensionIsPacked(description_));
|
||||
}
|
||||
|
||||
- (BOOL)isRepeated {
|
||||
return ExtensionIsRepeated(description_);
|
||||
}
|
||||
|
||||
- (id)defaultValue {
|
||||
if (ExtensionIsRepeated(description_)) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
switch (description_->type) {
|
||||
case GPBTypeBool:
|
||||
return @(defaultValue_.valueBool);
|
||||
case GPBTypeFloat:
|
||||
return @(defaultValue_.valueFloat);
|
||||
case GPBTypeDouble:
|
||||
return @(defaultValue_.valueDouble);
|
||||
case GPBTypeInt32:
|
||||
case GPBTypeSInt32:
|
||||
case GPBTypeEnum:
|
||||
case GPBTypeSFixed32:
|
||||
return @(defaultValue_.valueInt32);
|
||||
case GPBTypeInt64:
|
||||
case GPBTypeSInt64:
|
||||
case GPBTypeSFixed64:
|
||||
return @(defaultValue_.valueInt64);
|
||||
case GPBTypeUInt32:
|
||||
case GPBTypeFixed32:
|
||||
return @(defaultValue_.valueUInt32);
|
||||
case GPBTypeUInt64:
|
||||
case GPBTypeFixed64:
|
||||
return @(defaultValue_.valueUInt64);
|
||||
case GPBTypeData:
|
||||
// Like message fields, the default is zero length data.
|
||||
return (defaultValue_.valueData ? defaultValue_.valueData
|
||||
: GPBEmptyNSData());
|
||||
case GPBTypeString:
|
||||
// Like message fields, the default is zero length string.
|
||||
return (defaultValue_.valueString ? defaultValue_.valueString : @"");
|
||||
case GPBTypeGroup:
|
||||
case GPBTypeMessage:
|
||||
NSAssert(0, @"Shouldn't get here");
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark Internals
|
||||
|
||||
- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input
|
||||
extensionRegistry:(GPBExtensionRegistry *)extensionRegistry
|
||||
message:(GPBMessage *)message {
|
||||
GPBCodedInputStreamState *state = &input->state_;
|
||||
if (ExtensionIsPacked(description_)) {
|
||||
int32_t length = GPBCodedInputStreamReadInt32(state);
|
||||
size_t limit = GPBCodedInputStreamPushLimit(state, length);
|
||||
while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
|
||||
id value = [self newSingleValueFromCodedInputStream:input
|
||||
extensionRegistry:extensionRegistry
|
||||
existingValue:nil];
|
||||
[message addExtension:self value:value];
|
||||
[value release];
|
||||
}
|
||||
GPBCodedInputStreamPopLimit(state, limit);
|
||||
} else {
|
||||
id existingValue = nil;
|
||||
BOOL isRepeated = ExtensionIsRepeated(description_);
|
||||
if (!isRepeated && GPBTypeIsMessage(description_->type)) {
|
||||
existingValue = [message getExistingExtension:self];
|
||||
}
|
||||
id value = [self newSingleValueFromCodedInputStream:input
|
||||
extensionRegistry:extensionRegistry
|
||||
existingValue:existingValue];
|
||||
if (isRepeated) {
|
||||
[message addExtension:self value:value];
|
||||
} else {
|
||||
[message setExtension:self value:value];
|
||||
}
|
||||
[value release];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)writeValue:(id)value
|
||||
includingTagToCodedOutputStream:(GPBCodedOutputStream *)output {
|
||||
if (ExtensionIsRepeated(description_)) {
|
||||
WriteArrayIncludingTagsToCodedOutputStream(value, description_, output);
|
||||
} else {
|
||||
WriteObjectIncludingTagToCodedOutputStream(value, description_, output);
|
||||
}
|
||||
}
|
||||
|
||||
- (size_t)computeSerializedSizeIncludingTag:(id)value {
|
||||
if (ExtensionIsRepeated(description_)) {
|
||||
return ComputeSerializedSizeIncludingTagOfArray(description_, value);
|
||||
} else {
|
||||
return ComputeSerializedSizeIncludingTagOfObject(description_, value);
|
||||
}
|
||||
}
|
||||
|
||||
// Note that this returns a retained value intentionally.
|
||||
- (id)newSingleValueFromCodedInputStream:(GPBCodedInputStream *)input
|
||||
extensionRegistry:(GPBExtensionRegistry *)extensionRegistry
|
||||
existingValue:(GPBMessage *)existingValue {
|
||||
GPBCodedInputStreamState *state = &input->state_;
|
||||
switch (description_->type) {
|
||||
case GPBTypeBool: return [[NSNumber alloc] initWithBool:GPBCodedInputStreamReadBool(state)];
|
||||
case GPBTypeFixed32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadFixed32(state)];
|
||||
case GPBTypeSFixed32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSFixed32(state)];
|
||||
case GPBTypeFloat: return [[NSNumber alloc] initWithFloat:GPBCodedInputStreamReadFloat(state)];
|
||||
case GPBTypeFixed64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadFixed64(state)];
|
||||
case GPBTypeSFixed64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSFixed64(state)];
|
||||
case GPBTypeDouble: return [[NSNumber alloc] initWithDouble:GPBCodedInputStreamReadDouble(state)];
|
||||
case GPBTypeInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadInt32(state)];
|
||||
case GPBTypeInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadInt64(state)];
|
||||
case GPBTypeSInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSInt32(state)];
|
||||
case GPBTypeSInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSInt64(state)];
|
||||
case GPBTypeUInt32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadUInt32(state)];
|
||||
case GPBTypeUInt64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadUInt64(state)];
|
||||
case GPBTypeData: return GPBCodedInputStreamReadRetainedData(state);
|
||||
case GPBTypeString: return GPBCodedInputStreamReadRetainedString(state);
|
||||
case GPBTypeEnum: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadEnum(state)];
|
||||
case GPBTypeGroup:
|
||||
case GPBTypeMessage: {
|
||||
GPBMessage *message;
|
||||
if (existingValue) {
|
||||
message = [existingValue retain];
|
||||
} else {
|
||||
GPBDescriptor *decriptor = [descriptor_.msgClass descriptor];
|
||||
message = [[decriptor.messageClass alloc] init];
|
||||
}
|
||||
|
||||
if (description_->type == GPBTypeGroup) {
|
||||
[input readGroup:description_->fieldNumber
|
||||
message:message
|
||||
extensionRegistry:extensionRegistry];
|
||||
} else {
|
||||
// description_->type == GPBTypeMessage
|
||||
if (ExtensionIsWireFormat(description_)) {
|
||||
// For MessageSet fields the message length will have already been
|
||||
// read.
|
||||
[message mergeFromCodedInputStream:input
|
||||
extensionRegistry:extensionRegistry];
|
||||
} else {
|
||||
[input readMessage:message extensionRegistry:extensionRegistry];
|
||||
}
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSComparisonResult)compareByFieldNumber:(GPBExtensionField *)other {
|
||||
int32_t selfNumber = description_->fieldNumber;
|
||||
int32_t otherNumber = other->description_->fieldNumber;
|
||||
if (selfNumber < otherNumber) {
|
||||
return NSOrderedAscending;
|
||||
} else if (selfNumber == otherNumber) {
|
||||
return NSOrderedSame;
|
||||
} else {
|
||||
return NSOrderedDescending;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
@ -1,51 +0,0 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBExtensionField.h"
|
||||
|
||||
struct GPBExtensionDescription;
|
||||
|
||||
@interface GPBExtensionField ()
|
||||
|
||||
- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input
|
||||
extensionRegistry:(GPBExtensionRegistry *)extensionRegistry
|
||||
message:(GPBMessage *)message;
|
||||
|
||||
- (instancetype)initWithDescription:(struct GPBExtensionDescription *)description;
|
||||
|
||||
- (size_t)computeSerializedSizeIncludingTag:(id)value;
|
||||
- (void)writeValue:(id)value
|
||||
includingTagToCodedOutputStream:(GPBCodedOutputStream *)output;
|
||||
|
||||
- (NSComparisonResult)compareByFieldNumber:(GPBExtensionField *)other;
|
||||
|
||||
@end
|
@ -30,22 +30,21 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBWireFormat.h"
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBDescriptor.h"
|
||||
|
||||
@class GPBCodedInputStream;
|
||||
@class GPBCodedOutputStream;
|
||||
@class GPBExtensionRegistry;
|
||||
@class GPBDescriptor;
|
||||
@class GPBExtensionDescriptor;
|
||||
|
||||
@interface GPBExtensionField : NSObject<NSCopying>
|
||||
void GPBExtensionMergeFromInputStream(GPBExtensionDescriptor *extension,
|
||||
BOOL isPackedOnStream,
|
||||
GPBCodedInputStream *input,
|
||||
GPBExtensionRegistry *extensionRegistry,
|
||||
GPBMessage *message);
|
||||
|
||||
@property(nonatomic, readonly) int32_t fieldNumber;
|
||||
@property(nonatomic, readonly) GPBWireFormat wireType;
|
||||
@property(nonatomic, readonly) BOOL isRepeated;
|
||||
@property(nonatomic, readonly) GPBDescriptor *containingType;
|
||||
@property(nonatomic, readonly) id defaultValue;
|
||||
@property(nonatomic, readonly) GPBExtensionDescriptor *descriptor;
|
||||
size_t GPBComputeExtensionSerializedSizeIncludingTag(
|
||||
GPBExtensionDescriptor *extension, id value);
|
||||
|
||||
@end
|
||||
void GPBWriteExtensionValueToOutputStream(GPBExtensionDescriptor *extension,
|
||||
id value,
|
||||
GPBCodedOutputStream *output);
|
380
objectivec/GPBExtensionInternals.m
Normal file
380
objectivec/GPBExtensionInternals.m
Normal file
@ -0,0 +1,380 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#import "GPBExtensionInternals.h"
|
||||
|
||||
#import <objc/runtime.h>
|
||||
|
||||
#import "GPBCodedInputStream_PackagePrivate.h"
|
||||
#import "GPBCodedOutputStream.h"
|
||||
#import "GPBDescriptor_PackagePrivate.h"
|
||||
#import "GPBMessage_PackagePrivate.h"
|
||||
#import "GPBUtilities_PackagePrivate.h"
|
||||
|
||||
static id NewSingleValueFromInputStream(GPBExtensionDescriptor *extension,
|
||||
GPBCodedInputStream *input,
|
||||
GPBExtensionRegistry *extensionRegistry,
|
||||
GPBMessage *existingValue)
|
||||
__attribute__((ns_returns_retained));
|
||||
|
||||
GPB_INLINE size_t DataTypeSize(GPBDataType dataType) {
|
||||
switch (dataType) {
|
||||
case GPBDataTypeBool:
|
||||
return 1;
|
||||
case GPBDataTypeFixed32:
|
||||
case GPBDataTypeSFixed32:
|
||||
case GPBDataTypeFloat:
|
||||
return 4;
|
||||
case GPBDataTypeFixed64:
|
||||
case GPBDataTypeSFixed64:
|
||||
case GPBDataTypeDouble:
|
||||
return 8;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static size_t ComputePBSerializedSizeNoTagOfObject(GPBDataType dataType, id object) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBDataType##TYPE: \
|
||||
return GPBCompute##TYPE##SizeNoTag([(NSNumber *)object ACCESSOR]);
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBDataType##TYPE: \
|
||||
return GPBCompute##TYPE##SizeNoTag(object);
|
||||
switch (dataType) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Bytes)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Message)
|
||||
FIELD_CASE2(Group)
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static size_t ComputeSerializedSizeIncludingTagOfObject(
|
||||
GPBExtensionDescription *description, id object) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBDataType##TYPE: \
|
||||
return GPBCompute##TYPE##Size(description->fieldNumber, \
|
||||
[(NSNumber *)object ACCESSOR]);
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBDataType##TYPE: \
|
||||
return GPBCompute##TYPE##Size(description->fieldNumber, object);
|
||||
switch (description->dataType) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Bytes)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Group)
|
||||
case GPBDataTypeMessage:
|
||||
if (GPBExtensionIsWireFormat(description)) {
|
||||
return GPBComputeMessageSetExtensionSize(description->fieldNumber,
|
||||
object);
|
||||
} else {
|
||||
return GPBComputeMessageSize(description->fieldNumber, object);
|
||||
}
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static size_t ComputeSerializedSizeIncludingTagOfArray(
|
||||
GPBExtensionDescription *description, NSArray *values) {
|
||||
if (GPBExtensionIsPacked(description)) {
|
||||
size_t size = 0;
|
||||
size_t typeSize = DataTypeSize(description->dataType);
|
||||
if (typeSize != 0) {
|
||||
size = values.count * typeSize;
|
||||
} else {
|
||||
for (id value in values) {
|
||||
size +=
|
||||
ComputePBSerializedSizeNoTagOfObject(description->dataType, value);
|
||||
}
|
||||
}
|
||||
return size + GPBComputeTagSize(description->fieldNumber) +
|
||||
GPBComputeRawVarint32SizeForInteger(size);
|
||||
} else {
|
||||
size_t size = 0;
|
||||
for (id value in values) {
|
||||
size += ComputeSerializedSizeIncludingTagOfObject(description, value);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
}
|
||||
|
||||
static void WriteObjectIncludingTagToCodedOutputStream(
|
||||
id object, GPBExtensionDescription *description,
|
||||
GPBCodedOutputStream *output) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBDataType##TYPE: \
|
||||
[output write##TYPE:description->fieldNumber \
|
||||
value:[(NSNumber *)object ACCESSOR]]; \
|
||||
return;
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBDataType##TYPE: \
|
||||
[output write##TYPE:description->fieldNumber value:object]; \
|
||||
return;
|
||||
switch (description->dataType) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Bytes)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Group)
|
||||
case GPBDataTypeMessage:
|
||||
if (GPBExtensionIsWireFormat(description)) {
|
||||
[output writeMessageSetExtension:description->fieldNumber value:object];
|
||||
} else {
|
||||
[output writeMessage:description->fieldNumber value:object];
|
||||
}
|
||||
return;
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static void WriteObjectNoTagToCodedOutputStream(
|
||||
id object, GPBExtensionDescription *description,
|
||||
GPBCodedOutputStream *output) {
|
||||
#define FIELD_CASE(TYPE, ACCESSOR) \
|
||||
case GPBDataType##TYPE: \
|
||||
[output write##TYPE##NoTag:[(NSNumber *)object ACCESSOR]]; \
|
||||
return;
|
||||
#define FIELD_CASE2(TYPE) \
|
||||
case GPBDataType##TYPE: \
|
||||
[output write##TYPE##NoTag:object]; \
|
||||
return;
|
||||
switch (description->dataType) {
|
||||
FIELD_CASE(Bool, boolValue)
|
||||
FIELD_CASE(Float, floatValue)
|
||||
FIELD_CASE(Double, doubleValue)
|
||||
FIELD_CASE(Int32, intValue)
|
||||
FIELD_CASE(SFixed32, intValue)
|
||||
FIELD_CASE(SInt32, intValue)
|
||||
FIELD_CASE(Enum, intValue)
|
||||
FIELD_CASE(Int64, longLongValue)
|
||||
FIELD_CASE(SInt64, longLongValue)
|
||||
FIELD_CASE(SFixed64, longLongValue)
|
||||
FIELD_CASE(UInt32, unsignedIntValue)
|
||||
FIELD_CASE(Fixed32, unsignedIntValue)
|
||||
FIELD_CASE(UInt64, unsignedLongLongValue)
|
||||
FIELD_CASE(Fixed64, unsignedLongLongValue)
|
||||
FIELD_CASE2(Bytes)
|
||||
FIELD_CASE2(String)
|
||||
FIELD_CASE2(Message)
|
||||
case GPBDataTypeGroup:
|
||||
[output writeGroupNoTag:description->fieldNumber value:object];
|
||||
return;
|
||||
}
|
||||
#undef FIELD_CASE
|
||||
#undef FIELD_CASE2
|
||||
}
|
||||
|
||||
static void WriteArrayIncludingTagsToCodedOutputStream(
|
||||
NSArray *values, GPBExtensionDescription *description,
|
||||
GPBCodedOutputStream *output) {
|
||||
if (GPBExtensionIsPacked(description)) {
|
||||
[output writeTag:description->fieldNumber
|
||||
format:GPBWireFormatLengthDelimited];
|
||||
size_t dataSize = 0;
|
||||
size_t typeSize = DataTypeSize(description->dataType);
|
||||
if (typeSize != 0) {
|
||||
dataSize = values.count * typeSize;
|
||||
} else {
|
||||
for (id value in values) {
|
||||
dataSize +=
|
||||
ComputePBSerializedSizeNoTagOfObject(description->dataType, value);
|
||||
}
|
||||
}
|
||||
[output writeRawVarintSizeTAs32:dataSize];
|
||||
for (id value in values) {
|
||||
WriteObjectNoTagToCodedOutputStream(value, description, output);
|
||||
}
|
||||
} else {
|
||||
for (id value in values) {
|
||||
WriteObjectIncludingTagToCodedOutputStream(value, description, output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GPBExtensionMergeFromInputStream(GPBExtensionDescriptor *extension,
|
||||
BOOL isPackedOnStream,
|
||||
GPBCodedInputStream *input,
|
||||
GPBExtensionRegistry *extensionRegistry,
|
||||
GPBMessage *message) {
|
||||
GPBExtensionDescription *description = extension->description_;
|
||||
GPBCodedInputStreamState *state = &input->state_;
|
||||
if (isPackedOnStream) {
|
||||
NSCAssert(GPBExtensionIsRepeated(description),
|
||||
@"How was it packed if it isn't repeated?");
|
||||
int32_t length = GPBCodedInputStreamReadInt32(state);
|
||||
size_t limit = GPBCodedInputStreamPushLimit(state, length);
|
||||
while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
|
||||
id value = NewSingleValueFromInputStream(extension,
|
||||
input,
|
||||
extensionRegistry,
|
||||
nil);
|
||||
[message addExtension:extension value:value];
|
||||
[value release];
|
||||
}
|
||||
GPBCodedInputStreamPopLimit(state, limit);
|
||||
} else {
|
||||
id existingValue = nil;
|
||||
BOOL isRepeated = GPBExtensionIsRepeated(description);
|
||||
if (!isRepeated && GPBDataTypeIsMessage(description->dataType)) {
|
||||
existingValue = [message getExistingExtension:extension];
|
||||
}
|
||||
id value = NewSingleValueFromInputStream(extension,
|
||||
input,
|
||||
extensionRegistry,
|
||||
existingValue);
|
||||
if (isRepeated) {
|
||||
[message addExtension:extension value:value];
|
||||
} else {
|
||||
[message setExtension:extension value:value];
|
||||
}
|
||||
[value release];
|
||||
}
|
||||
}
|
||||
|
||||
void GPBWriteExtensionValueToOutputStream(GPBExtensionDescriptor *extension,
|
||||
id value,
|
||||
GPBCodedOutputStream *output) {
|
||||
GPBExtensionDescription *description = extension->description_;
|
||||
if (GPBExtensionIsRepeated(description)) {
|
||||
WriteArrayIncludingTagsToCodedOutputStream(value, description, output);
|
||||
} else {
|
||||
WriteObjectIncludingTagToCodedOutputStream(value, description, output);
|
||||
}
|
||||
}
|
||||
|
||||
size_t GPBComputeExtensionSerializedSizeIncludingTag(
|
||||
GPBExtensionDescriptor *extension, id value) {
|
||||
GPBExtensionDescription *description = extension->description_;
|
||||
if (GPBExtensionIsRepeated(description)) {
|
||||
return ComputeSerializedSizeIncludingTagOfArray(description, value);
|
||||
} else {
|
||||
return ComputeSerializedSizeIncludingTagOfObject(description, value);
|
||||
}
|
||||
}
|
||||
|
||||
// Note that this returns a retained value intentionally.
|
||||
static id NewSingleValueFromInputStream(GPBExtensionDescriptor *extension,
|
||||
GPBCodedInputStream *input,
|
||||
GPBExtensionRegistry *extensionRegistry,
|
||||
GPBMessage *existingValue) {
|
||||
GPBExtensionDescription *description = extension->description_;
|
||||
GPBCodedInputStreamState *state = &input->state_;
|
||||
switch (description->dataType) {
|
||||
case GPBDataTypeBool: return [[NSNumber alloc] initWithBool:GPBCodedInputStreamReadBool(state)];
|
||||
case GPBDataTypeFixed32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadFixed32(state)];
|
||||
case GPBDataTypeSFixed32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSFixed32(state)];
|
||||
case GPBDataTypeFloat: return [[NSNumber alloc] initWithFloat:GPBCodedInputStreamReadFloat(state)];
|
||||
case GPBDataTypeFixed64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadFixed64(state)];
|
||||
case GPBDataTypeSFixed64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSFixed64(state)];
|
||||
case GPBDataTypeDouble: return [[NSNumber alloc] initWithDouble:GPBCodedInputStreamReadDouble(state)];
|
||||
case GPBDataTypeInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadInt32(state)];
|
||||
case GPBDataTypeInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadInt64(state)];
|
||||
case GPBDataTypeSInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSInt32(state)];
|
||||
case GPBDataTypeSInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSInt64(state)];
|
||||
case GPBDataTypeUInt32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadUInt32(state)];
|
||||
case GPBDataTypeUInt64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadUInt64(state)];
|
||||
case GPBDataTypeBytes: return GPBCodedInputStreamReadRetainedBytes(state);
|
||||
case GPBDataTypeString: return GPBCodedInputStreamReadRetainedString(state);
|
||||
case GPBDataTypeEnum: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadEnum(state)];
|
||||
case GPBDataTypeGroup:
|
||||
case GPBDataTypeMessage: {
|
||||
GPBMessage *message;
|
||||
if (existingValue) {
|
||||
message = [existingValue retain];
|
||||
} else {
|
||||
GPBDescriptor *decriptor = [extension.msgClass descriptor];
|
||||
message = [[decriptor.messageClass alloc] init];
|
||||
}
|
||||
|
||||
if (description->dataType == GPBDataTypeGroup) {
|
||||
[input readGroup:description->fieldNumber
|
||||
message:message
|
||||
extensionRegistry:extensionRegistry];
|
||||
} else {
|
||||
// description->dataType == GPBDataTypeMessage
|
||||
if (GPBExtensionIsWireFormat(description)) {
|
||||
// For MessageSet fields the message length will have already been
|
||||
// read.
|
||||
[message mergeFromCodedInputStream:input
|
||||
extensionRegistry:extensionRegistry];
|
||||
} else {
|
||||
[input readMessage:message extensionRegistry:extensionRegistry];
|
||||
}
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
@ -31,7 +31,7 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class GPBDescriptor;
|
||||
@class GPBExtensionField;
|
||||
@class GPBExtensionDescriptor;
|
||||
|
||||
// A table of known extensions, searchable by name or field number. When
|
||||
// parsing a protocol message that might have extensions, you must provide an
|
||||
@ -54,10 +54,10 @@
|
||||
//
|
||||
@interface GPBExtensionRegistry : NSObject<NSCopying>
|
||||
|
||||
- (void)addExtension:(GPBExtensionField *)extension;
|
||||
- (void)addExtension:(GPBExtensionDescriptor *)extension;
|
||||
- (void)addExtensions:(GPBExtensionRegistry *)registry;
|
||||
|
||||
- (GPBExtensionField *)getExtension:(GPBDescriptor *)containingType
|
||||
fieldNumber:(NSInteger)fieldNumber;
|
||||
- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor
|
||||
fieldNumber:(NSInteger)fieldNumber;
|
||||
|
||||
@end
|
||||
|
@ -32,7 +32,6 @@
|
||||
|
||||
#import "GPBBootstrap.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBExtensionField.h"
|
||||
|
||||
@implementation GPBExtensionRegistry {
|
||||
// TODO(dmaclach): Reimplement with CFDictionaries that don't use
|
||||
@ -60,31 +59,34 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSMutableDictionary *)extensionMapForContainingType:
|
||||
(GPBDescriptor *)containingType {
|
||||
- (NSMutableDictionary *)extensionMapForContainingMessageClass:
|
||||
(Class)containingMessageClass {
|
||||
NSMutableDictionary *extensionMap =
|
||||
[mutableClassMap_ objectForKey:containingType];
|
||||
[mutableClassMap_ objectForKey:containingMessageClass];
|
||||
if (extensionMap == nil) {
|
||||
extensionMap = [NSMutableDictionary dictionary];
|
||||
[mutableClassMap_ setObject:extensionMap forKey:containingType];
|
||||
[mutableClassMap_ setObject:extensionMap
|
||||
forKey:(id<NSCopying>)containingMessageClass];
|
||||
}
|
||||
return extensionMap;
|
||||
}
|
||||
|
||||
- (void)addExtension:(GPBExtensionField *)extension {
|
||||
- (void)addExtension:(GPBExtensionDescriptor *)extension {
|
||||
if (extension == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
GPBDescriptor *containingType = [extension containingType];
|
||||
Class containingMessageClass = extension.containingMessageClass;
|
||||
NSMutableDictionary *extensionMap =
|
||||
[self extensionMapForContainingType:containingType];
|
||||
[extensionMap setObject:extension forKey:@([extension fieldNumber])];
|
||||
[self extensionMapForContainingMessageClass:containingMessageClass];
|
||||
[extensionMap setObject:extension forKey:@(extension.fieldNumber)];
|
||||
}
|
||||
|
||||
- (GPBExtensionField *)getExtension:(GPBDescriptor *)containingType
|
||||
fieldNumber:(NSInteger)fieldNumber {
|
||||
NSDictionary *extensionMap = [mutableClassMap_ objectForKey:containingType];
|
||||
- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor
|
||||
fieldNumber:(NSInteger)fieldNumber {
|
||||
Class messageClass = descriptor.messageClass;
|
||||
NSDictionary *extensionMap =
|
||||
[mutableClassMap_ objectForKey:messageClass];
|
||||
return [extensionMap objectForKey:@(fieldNumber)];
|
||||
}
|
||||
|
||||
@ -94,11 +96,11 @@
|
||||
return;
|
||||
}
|
||||
NSMutableDictionary *otherClassMap = registry->mutableClassMap_;
|
||||
for (GPBDescriptor *containingType in otherClassMap) {
|
||||
for (Class containingMessageClass in otherClassMap) {
|
||||
NSMutableDictionary *extensionMap =
|
||||
[self extensionMapForContainingType:containingType];
|
||||
[self extensionMapForContainingMessageClass:containingMessageClass];
|
||||
NSMutableDictionary *otherExtensionMap =
|
||||
[registry extensionMapForContainingType:containingType];
|
||||
[registry extensionMapForContainingMessageClass:containingMessageClass];
|
||||
[extensionMap addEntriesFromDictionary:otherExtensionMap];
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@
|
||||
@class GPBDescriptor;
|
||||
@class GPBCodedInputStream;
|
||||
@class GPBCodedOutputStream;
|
||||
@class GPBExtensionField;
|
||||
@class GPBExtensionDescriptor;
|
||||
@class GPBExtensionRegistry;
|
||||
@class GPBFieldDescriptor;
|
||||
@class GPBUnknownFieldSet;
|
||||
@ -148,14 +148,14 @@ CF_EXTERN_C_END
|
||||
// Extensions use boxed values (NSNumbers) for PODs, NSMutableArrays for
|
||||
// repeated. If the extension is a Message one will be auto created for you
|
||||
// and returned similar to fields.
|
||||
- (BOOL)hasExtension:(GPBExtensionField *)extension;
|
||||
- (id)getExtension:(GPBExtensionField *)extension;
|
||||
- (void)setExtension:(GPBExtensionField *)extension value:(id)value;
|
||||
- (void)addExtension:(GPBExtensionField *)extension value:(id)value;
|
||||
- (void)setExtension:(GPBExtensionField *)extension
|
||||
- (BOOL)hasExtension:(GPBExtensionDescriptor *)extension;
|
||||
- (id)getExtension:(GPBExtensionDescriptor *)extension;
|
||||
- (void)setExtension:(GPBExtensionDescriptor *)extension value:(id)value;
|
||||
- (void)addExtension:(GPBExtensionDescriptor *)extension value:(id)value;
|
||||
- (void)setExtension:(GPBExtensionDescriptor *)extension
|
||||
index:(NSUInteger)index
|
||||
value:(id)value;
|
||||
- (void)clearExtension:(GPBExtensionField *)extension;
|
||||
- (void)clearExtension:(GPBExtensionDescriptor *)extension;
|
||||
|
||||
- (void)setUnknownFields:(GPBUnknownFieldSet *)unknownFields;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -67,9 +67,9 @@ typedef struct GPBMessage_Storage *GPBMessage_StoragePtr;
|
||||
|
||||
// Gets an extension value without autocreating the result if not found. (i.e.
|
||||
// returns nil if the extension is not set)
|
||||
- (id)getExistingExtension:(GPBExtensionField *)extension;
|
||||
- (id)getExistingExtension:(GPBExtensionDescriptor *)extension;
|
||||
|
||||
// Returns an array of GPBExtensionField* for all the extensions currently
|
||||
// Returns an array of GPBExtensionDescriptor* for all the extensions currently
|
||||
// in use on the message. They are sorted by field number.
|
||||
- (NSArray *)sortedExtensionsInUse;
|
||||
|
||||
|
@ -35,11 +35,10 @@
|
||||
#import "GPBCodedOutputStream.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBDictionary.h"
|
||||
#import "GPBExtensionField.h"
|
||||
#import "GPBExtensionRegistry.h"
|
||||
#import "GPBField.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#import "GPBUnknownField.h"
|
||||
#import "GPBUnknownFieldSet.h"
|
||||
#import "GPBUtilities.h"
|
||||
#import "GPBWireFormat.h"
|
||||
|
@ -36,14 +36,27 @@
|
||||
#import "GPBCodedOutputStream.m"
|
||||
#import "GPBDescriptor.m"
|
||||
#import "GPBDictionary.m"
|
||||
#import "GPBExtensionField.m"
|
||||
#import "GPBExtensionInternals.m"
|
||||
#import "GPBExtensionRegistry.m"
|
||||
#import "GPBField.m"
|
||||
#import "GPBMessage.m"
|
||||
#import "GPBRootObject.m"
|
||||
#import "GPBUnknownField.m"
|
||||
#import "GPBUnknownFieldSet.m"
|
||||
#import "GPBUtilities.m"
|
||||
#import "GPBWellKnownTypes.m"
|
||||
#import "GPBWireFormat.m"
|
||||
|
||||
#import "google/protobuf/Descriptor.pbobjc.m"
|
||||
|
||||
// Duration and Timestamp are #imported into GPBWellKnownTypes.m to the
|
||||
// Objective C categories added will always be linked in with the classes.
|
||||
#import "google/protobuf/Any.pbobjc.m"
|
||||
#import "google/protobuf/Api.pbobjc.m"
|
||||
// #import "google/protobuf/Duration.pbobjc.m"
|
||||
#import "google/protobuf/Empty.pbobjc.m"
|
||||
#import "google/protobuf/FieldMask.pbobjc.m"
|
||||
#import "google/protobuf/SourceContext.pbobjc.m"
|
||||
#import "google/protobuf/Struct.pbobjc.m"
|
||||
// #import "google/protobuf/Timestamp.pbobjc.m"
|
||||
#import "google/protobuf/Type.pbobjc.m"
|
||||
#import "google/protobuf/Wrappers.pbobjc.m"
|
||||
|
@ -34,8 +34,7 @@
|
||||
#import "GPBProtocolBuffers.h"
|
||||
|
||||
#import "GPBDescriptor_PackagePrivate.h"
|
||||
#import "GPBExtensionField_PackagePrivate.h"
|
||||
#import "GPBExtensionRegistry.h"
|
||||
#import "GPBExtensionInternals.h"
|
||||
#import "GPBMessage_PackagePrivate.h"
|
||||
#import "GPBRootObject_PackagePrivate.h"
|
||||
#import "GPBUtilities_PackagePrivate.h"
|
||||
|
@ -36,7 +36,6 @@
|
||||
#import <CoreFoundation/CoreFoundation.h>
|
||||
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBExtensionField.h"
|
||||
#import "GPBUtilities_PackagePrivate.h"
|
||||
|
||||
@interface GPBExtensionDescriptor (GPBRootObject)
|
||||
@ -130,14 +129,14 @@ static CFMutableDictionaryRef gExtensionSingletonDictionary = NULL;
|
||||
return nil;
|
||||
}
|
||||
|
||||
+ (void)globallyRegisterExtension:(GPBExtensionField *)field {
|
||||
const char *key = [field.descriptor singletonNameC];
|
||||
+ (void)globallyRegisterExtension:(GPBExtensionDescriptor *)field {
|
||||
const char *key = [field singletonNameC];
|
||||
OSSpinLockLock(&gExtensionSingletonDictionaryLock_);
|
||||
CFDictionarySetValue(gExtensionSingletonDictionary, key, field);
|
||||
OSSpinLockUnlock(&gExtensionSingletonDictionaryLock_);
|
||||
}
|
||||
|
||||
GPB_INLINE id ExtensionForName(id self, SEL _cmd) {
|
||||
static id ExtensionForName(id self, SEL _cmd) {
|
||||
// Really fast way of doing "classname_selName".
|
||||
// This came up as a hotspot (creation of NSString *) when accessing a
|
||||
// lot of extensions.
|
||||
|
@ -32,12 +32,12 @@
|
||||
|
||||
#import "GPBRootObject.h"
|
||||
|
||||
@class GPBExtensionField;
|
||||
@class GPBExtensionDescriptor;
|
||||
|
||||
@interface GPBRootObject ()
|
||||
|
||||
// Globally register.
|
||||
+ (void)globallyRegisterExtension:(GPBExtensionField *)field;
|
||||
+ (void)globallyRegisterExtension:(GPBExtensionDescriptor *)field;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -63,36 +63,36 @@ typedef union {
|
||||
GPB_UNSAFE_UNRETAINED NSString *valueString;
|
||||
GPB_UNSAFE_UNRETAINED GPBMessage *valueMessage;
|
||||
int32_t valueEnum;
|
||||
} GPBValue;
|
||||
} GPBGenericValue;
|
||||
|
||||
// Do not change the order of this enum (or add things to it) without thinking
|
||||
// about it very carefully. There are several things that depend on the order.
|
||||
typedef enum {
|
||||
GPBTypeBool = 0,
|
||||
GPBTypeFixed32,
|
||||
GPBTypeSFixed32,
|
||||
GPBTypeFloat,
|
||||
GPBTypeFixed64,
|
||||
GPBTypeSFixed64,
|
||||
GPBTypeDouble,
|
||||
GPBTypeInt32,
|
||||
GPBTypeInt64,
|
||||
GPBTypeSInt32,
|
||||
GPBTypeSInt64,
|
||||
GPBTypeUInt32,
|
||||
GPBTypeUInt64,
|
||||
GPBTypeData, // Maps to Bytes Protobuf type
|
||||
GPBTypeString,
|
||||
GPBTypeMessage,
|
||||
GPBTypeGroup,
|
||||
GPBTypeEnum,
|
||||
} GPBType;
|
||||
GPBDataTypeBool = 0,
|
||||
GPBDataTypeFixed32,
|
||||
GPBDataTypeSFixed32,
|
||||
GPBDataTypeFloat,
|
||||
GPBDataTypeFixed64,
|
||||
GPBDataTypeSFixed64,
|
||||
GPBDataTypeDouble,
|
||||
GPBDataTypeInt32,
|
||||
GPBDataTypeInt64,
|
||||
GPBDataTypeSInt32,
|
||||
GPBDataTypeSInt64,
|
||||
GPBDataTypeUInt32,
|
||||
GPBDataTypeUInt64,
|
||||
GPBDataTypeBytes,
|
||||
GPBDataTypeString,
|
||||
GPBDataTypeMessage,
|
||||
GPBDataTypeGroup,
|
||||
GPBDataTypeEnum,
|
||||
} GPBDataType;
|
||||
|
||||
enum {
|
||||
// A count of the number of types in GPBType. Separated out from the GPBType
|
||||
// enum to avoid warnings regarding not handling GPBTypeCount in switch
|
||||
// statements.
|
||||
GPBTypeCount = GPBTypeEnum + 1
|
||||
// A count of the number of types in GPBDataType. Separated out from the
|
||||
// GPBDataType enum to avoid warnings regarding not handling
|
||||
// GPBDataType_Count in switch statements.
|
||||
GPBDataType_Count = GPBDataTypeEnum + 1
|
||||
};
|
||||
|
||||
// An extension range.
|
@ -35,7 +35,7 @@
|
||||
@class GPBUInt64Array;
|
||||
@class GPBUnknownFieldSet;
|
||||
|
||||
@interface GPBField : NSObject<NSCopying>
|
||||
@interface GPBUnknownField : NSObject<NSCopying>
|
||||
|
||||
@property(nonatomic, readonly, assign) int32_t number;
|
||||
|
||||
@ -43,8 +43,8 @@
|
||||
@property(nonatomic, readonly, strong) GPBUInt64Array *varintList;
|
||||
@property(nonatomic, readonly, strong) GPBUInt32Array *fixed32List;
|
||||
@property(nonatomic, readonly, strong) GPBUInt64Array *fixed64List;
|
||||
@property(nonatomic, readonly, strong) NSArray *lengthDelimitedList;
|
||||
@property(nonatomic, readonly, strong) NSArray *groupList;
|
||||
@property(nonatomic, readonly, strong) NSArray *lengthDelimitedList; // NSData
|
||||
@property(nonatomic, readonly, strong) NSArray *groupList; // GPBUnknownFieldSet
|
||||
|
||||
// Only one of these should be used per Field.
|
||||
- (void)addVarint:(uint64_t)value;
|
@ -28,12 +28,12 @@
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#import "GPBField_PackagePrivate.h"
|
||||
#import "GPBUnknownField_PackagePrivate.h"
|
||||
|
||||
#import "GPBArray.h"
|
||||
#import "GPBCodedOutputStream.h"
|
||||
|
||||
@interface GPBField () {
|
||||
@implementation GPBUnknownField {
|
||||
@protected
|
||||
int32_t number_;
|
||||
GPBUInt64Array *mutableVarintList_;
|
||||
@ -42,9 +42,6 @@
|
||||
NSMutableArray *mutableLengthDelimitedList_;
|
||||
NSMutableArray *mutableGroupList_;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation GPBField
|
||||
|
||||
@synthesize number = number_;
|
||||
@synthesize varintList = mutableVarintList_;
|
||||
@ -71,7 +68,8 @@
|
||||
}
|
||||
|
||||
- (id)copyWithZone:(NSZone *)zone {
|
||||
GPBField *result = [[GPBField allocWithZone:zone] initWithNumber:number_];
|
||||
GPBUnknownField *result =
|
||||
[[GPBUnknownField allocWithZone:zone] initWithNumber:number_];
|
||||
result->mutableFixed32List_ = [mutableFixed32List_ copyWithZone:zone];
|
||||
result->mutableFixed64List_ = [mutableFixed64List_ copyWithZone:zone];
|
||||
result->mutableLengthDelimitedList_ =
|
||||
@ -91,8 +89,8 @@
|
||||
|
||||
- (BOOL)isEqual:(id)object {
|
||||
if (self == object) return YES;
|
||||
if (![object isKindOfClass:[GPBField class]]) return NO;
|
||||
GPBField *field = (GPBField *)object;
|
||||
if (![object isKindOfClass:[GPBUnknownField class]]) return NO;
|
||||
GPBUnknownField *field = (GPBUnknownField *)object;
|
||||
BOOL equalVarint =
|
||||
(mutableVarintList_.count == 0 && field->mutableVarintList_.count == 0) ||
|
||||
[mutableVarintList_ isEqual:field->mutableVarintList_];
|
||||
@ -131,23 +129,23 @@
|
||||
- (void)writeToOutput:(GPBCodedOutputStream *)output {
|
||||
NSUInteger count = mutableVarintList_.count;
|
||||
if (count > 0) {
|
||||
[output writeUInt64s:number_ values:mutableVarintList_ tag:0];
|
||||
[output writeUInt64Array:number_ values:mutableVarintList_ tag:0];
|
||||
}
|
||||
count = mutableFixed32List_.count;
|
||||
if (count > 0) {
|
||||
[output writeFixed32s:number_ values:mutableFixed32List_ tag:0];
|
||||
[output writeFixed32Array:number_ values:mutableFixed32List_ tag:0];
|
||||
}
|
||||
count = mutableFixed64List_.count;
|
||||
if (count > 0) {
|
||||
[output writeFixed64s:number_ values:mutableFixed64List_ tag:0];
|
||||
[output writeFixed64Array:number_ values:mutableFixed64List_ tag:0];
|
||||
}
|
||||
count = mutableLengthDelimitedList_.count;
|
||||
if (count > 0) {
|
||||
[output writeDatas:number_ values:mutableLengthDelimitedList_];
|
||||
[output writeBytesArray:number_ values:mutableLengthDelimitedList_];
|
||||
}
|
||||
count = mutableGroupList_.count;
|
||||
if (count > 0) {
|
||||
[output writeUnknownGroups:number_ values:mutableGroupList_];
|
||||
[output writeUnknownGroupArray:number_ values:mutableGroupList_];
|
||||
}
|
||||
}
|
||||
|
||||
@ -173,7 +171,7 @@
|
||||
}];
|
||||
|
||||
for (NSData *data in mutableLengthDelimitedList_) {
|
||||
result += GPBComputeDataSize(number, data);
|
||||
result += GPBComputeBytesSize(number, data);
|
||||
}
|
||||
|
||||
for (GPBUnknownFieldSet *set in mutableGroupList_) {
|
||||
@ -229,7 +227,7 @@
|
||||
return description;
|
||||
}
|
||||
|
||||
- (void)mergeFromField:(GPBField *)other {
|
||||
- (void)mergeFromField:(GPBUnknownField *)other {
|
||||
GPBUInt64Array *otherVarintList = other.varintList;
|
||||
if (otherVarintList.count > 0) {
|
||||
if (mutableVarintList_ == nil) {
|
@ -30,15 +30,15 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class GPBField;
|
||||
@class GPBUnknownField;
|
||||
|
||||
@interface GPBUnknownFieldSet : NSObject<NSCopying>
|
||||
|
||||
- (BOOL)hasField:(int32_t)number;
|
||||
- (GPBField *)getField:(int32_t)number;
|
||||
- (GPBUnknownField *)getField:(int32_t)number;
|
||||
- (NSUInteger)countOfFields;
|
||||
|
||||
- (void)addField:(GPBField *)field;
|
||||
- (void)addField:(GPBUnknownField *)field;
|
||||
|
||||
// Returns an NSArray of the GPBFields sorted by the field numbers.
|
||||
- (NSArray *)sortedFields;
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
#import "GPBCodedInputStream_PackagePrivate.h"
|
||||
#import "GPBCodedOutputStream.h"
|
||||
#import "GPBField_PackagePrivate.h"
|
||||
#import "GPBUnknownField_PackagePrivate.h"
|
||||
#import "GPBUtilities.h"
|
||||
#import "GPBWireFormat.h"
|
||||
|
||||
@ -85,10 +85,10 @@ static void checkNumber(int32_t number) {
|
||||
|
||||
static void CopyWorker(const void *key, const void *value, void *context) {
|
||||
#pragma unused(key)
|
||||
GPBField *field = value;
|
||||
GPBUnknownField *field = value;
|
||||
GPBUnknownFieldSet *result = context;
|
||||
|
||||
GPBField *copied = [field copy];
|
||||
GPBUnknownField *copied = [field copy];
|
||||
[result addField:copied];
|
||||
[copied release];
|
||||
}
|
||||
@ -136,9 +136,10 @@ static void CopyWorker(const void *key, const void *value, void *context) {
|
||||
return fields_ ? (CFDictionaryGetValue(fields_, (void *)key) != nil) : NO;
|
||||
}
|
||||
|
||||
- (GPBField *)getField:(int32_t)number {
|
||||
- (GPBUnknownField *)getField:(int32_t)number {
|
||||
ssize_t key = number;
|
||||
GPBField *result = fields_ ? CFDictionaryGetValue(fields_, (void *)key) : nil;
|
||||
GPBUnknownField *result =
|
||||
fields_ ? CFDictionaryGetValue(fields_, (void *)key) : nil;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -150,12 +151,12 @@ static void CopyWorker(const void *key, const void *value, void *context) {
|
||||
if (!fields_) return nil;
|
||||
size_t count = CFDictionaryGetCount(fields_);
|
||||
ssize_t keys[count];
|
||||
GPBField *values[count];
|
||||
GPBUnknownField *values[count];
|
||||
CFDictionaryGetKeysAndValues(fields_, (const void **)keys,
|
||||
(const void **)values);
|
||||
struct GPBFieldPair {
|
||||
ssize_t key;
|
||||
GPBField *value;
|
||||
GPBUnknownField *value;
|
||||
} pairs[count];
|
||||
for (size_t i = 0; i < count; ++i) {
|
||||
pairs[i].key = keys[i];
|
||||
@ -179,13 +180,13 @@ static void CopyWorker(const void *key, const void *value, void *context) {
|
||||
if (!fields_) return;
|
||||
size_t count = CFDictionaryGetCount(fields_);
|
||||
ssize_t keys[count];
|
||||
GPBField *values[count];
|
||||
GPBUnknownField *values[count];
|
||||
CFDictionaryGetKeysAndValues(fields_, (const void **)keys,
|
||||
(const void **)values);
|
||||
if (count > 1) {
|
||||
struct GPBFieldPair {
|
||||
ssize_t key;
|
||||
GPBField *value;
|
||||
GPBUnknownField *value;
|
||||
} pairs[count];
|
||||
|
||||
for (size_t i = 0; i < count; ++i) {
|
||||
@ -199,7 +200,7 @@ static void CopyWorker(const void *key, const void *value, void *context) {
|
||||
return (a->key > b->key) ? 1 : ((a->key == b->key) ? 0 : -1);
|
||||
});
|
||||
for (size_t i = 0; i < count; ++i) {
|
||||
GPBField *value = pairs[i].value;
|
||||
GPBUnknownField *value = pairs[i].value;
|
||||
[value writeToOutput:output];
|
||||
}
|
||||
} else {
|
||||
@ -219,7 +220,7 @@ static void CopyWorker(const void *key, const void *value, void *context) {
|
||||
static void GPBUnknownFieldSetSerializedSize(const void *key, const void *value,
|
||||
void *context) {
|
||||
#pragma unused(key)
|
||||
GPBField *field = value;
|
||||
GPBUnknownField *field = value;
|
||||
size_t *result = context;
|
||||
*result += [field serializedSize];
|
||||
}
|
||||
@ -237,7 +238,7 @@ static void GPBUnknownFieldSetWriteAsMessageSetTo(const void *key,
|
||||
const void *value,
|
||||
void *context) {
|
||||
#pragma unused(key)
|
||||
GPBField *field = value;
|
||||
GPBUnknownField *field = value;
|
||||
GPBCodedOutputStream *output = context;
|
||||
[field writeAsMessageSetExtensionToOutput:output];
|
||||
}
|
||||
@ -253,7 +254,7 @@ static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key,
|
||||
const void *value,
|
||||
void *context) {
|
||||
#pragma unused(key)
|
||||
GPBField *field = value;
|
||||
GPBUnknownField *field = value;
|
||||
size_t *result = context;
|
||||
*result += [field serializedSizeAsMessageSetExtension];
|
||||
}
|
||||
@ -280,7 +281,7 @@ static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key,
|
||||
return GPBWireFormatGetTagWireType(tag) != GPBWireFormatEndGroup;
|
||||
}
|
||||
|
||||
- (void)addField:(GPBField *)field {
|
||||
- (void)addField:(GPBUnknownField *)field {
|
||||
int32_t number = [field number];
|
||||
checkNumber(number);
|
||||
if (!fields_) {
|
||||
@ -297,12 +298,12 @@ static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key,
|
||||
CFDictionarySetValue(fields_, (const void *)key, field);
|
||||
}
|
||||
|
||||
- (GPBField *)mutableFieldForNumber:(int32_t)number create:(BOOL)create {
|
||||
- (GPBUnknownField *)mutableFieldForNumber:(int32_t)number create:(BOOL)create {
|
||||
ssize_t key = number;
|
||||
GPBField *existing =
|
||||
GPBUnknownField *existing =
|
||||
fields_ ? CFDictionaryGetValue(fields_, (const void *)key) : nil;
|
||||
if (!existing && create) {
|
||||
existing = [[GPBField alloc] initWithNumber:number];
|
||||
existing = [[GPBUnknownField alloc] initWithNumber:number];
|
||||
// This retains existing.
|
||||
[self addField:existing];
|
||||
[existing release];
|
||||
@ -314,19 +315,19 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
|
||||
const void *value,
|
||||
void *context) {
|
||||
#pragma unused(key)
|
||||
GPBField *field = value;
|
||||
GPBUnknownField *field = value;
|
||||
GPBUnknownFieldSet *self = context;
|
||||
|
||||
int32_t number = [field number];
|
||||
checkNumber(number);
|
||||
GPBField *oldField = [self mutableFieldForNumber:number create:NO];
|
||||
GPBUnknownField *oldField = [self mutableFieldForNumber:number create:NO];
|
||||
if (oldField) {
|
||||
[oldField mergeFromField:field];
|
||||
} else {
|
||||
// Merge only comes from GPBMessage's mergeFrom:, so it means we are on
|
||||
// mutable message and are an mutable instance, so make sure we need
|
||||
// mutable fields.
|
||||
GPBField *fieldCopy = [field copy];
|
||||
GPBUnknownField *fieldCopy = [field copy];
|
||||
[self addField:fieldCopy];
|
||||
[fieldCopy release];
|
||||
}
|
||||
@ -356,18 +357,18 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
|
||||
GPBCodedInputStreamState *state = &input->state_;
|
||||
switch (GPBWireFormatGetTagWireType(tag)) {
|
||||
case GPBWireFormatVarint: {
|
||||
GPBField *field = [self mutableFieldForNumber:number create:YES];
|
||||
GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
|
||||
[field addVarint:GPBCodedInputStreamReadInt64(state)];
|
||||
return YES;
|
||||
}
|
||||
case GPBWireFormatFixed64: {
|
||||
GPBField *field = [self mutableFieldForNumber:number create:YES];
|
||||
GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
|
||||
[field addFixed64:GPBCodedInputStreamReadFixed64(state)];
|
||||
return YES;
|
||||
}
|
||||
case GPBWireFormatLengthDelimited: {
|
||||
NSData *data = GPBCodedInputStreamReadRetainedData(state);
|
||||
GPBField *field = [self mutableFieldForNumber:number create:YES];
|
||||
NSData *data = GPBCodedInputStreamReadRetainedBytes(state);
|
||||
GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
|
||||
[field addLengthDelimited:data];
|
||||
[data release];
|
||||
return YES;
|
||||
@ -375,7 +376,7 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
|
||||
case GPBWireFormatStartGroup: {
|
||||
GPBUnknownFieldSet *unknownFieldSet = [[GPBUnknownFieldSet alloc] init];
|
||||
[input readUnknownGroup:number message:unknownFieldSet];
|
||||
GPBField *field = [self mutableFieldForNumber:number create:YES];
|
||||
GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
|
||||
[field addGroup:unknownFieldSet];
|
||||
[unknownFieldSet release];
|
||||
return YES;
|
||||
@ -383,7 +384,7 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
|
||||
case GPBWireFormatEndGroup:
|
||||
return NO;
|
||||
case GPBWireFormatFixed32: {
|
||||
GPBField *field = [self mutableFieldForNumber:number create:YES];
|
||||
GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
|
||||
[field addFixed32:GPBCodedInputStreamReadFixed32(state)];
|
||||
return YES;
|
||||
}
|
||||
@ -396,7 +397,7 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
|
||||
}
|
||||
|
||||
- (void)addUnknownMapEntry:(int32_t)fieldNum value:(NSData *)data {
|
||||
GPBField *field = [self mutableFieldForNumber:fieldNum create:YES];
|
||||
GPBUnknownField *field = [self mutableFieldForNumber:fieldNum create:YES];
|
||||
[field addLengthDelimited:data];
|
||||
}
|
||||
|
||||
|
@ -30,11 +30,11 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBField.h"
|
||||
#import "GPBUnknownField.h"
|
||||
|
||||
@class GPBCodedOutputStream;
|
||||
|
||||
@interface GPBField ()
|
||||
@interface GPBUnknownField ()
|
||||
|
||||
- (instancetype)initWithNumber:(int32_t)number;
|
||||
|
||||
@ -44,6 +44,6 @@
|
||||
- (void)writeAsMessageSetExtensionToOutput:(GPBCodedOutputStream *)output;
|
||||
- (size_t)serializedSizeAsMessageSetExtension;
|
||||
|
||||
- (void)mergeFromField:(GPBField *)other;
|
||||
- (void)mergeFromField:(GPBUnknownField *)other;
|
||||
|
||||
@end
|
@ -30,119 +30,13 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "GPBArray.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBRuntimeTypes.h"
|
||||
|
||||
CF_EXTERN_C_BEGIN
|
||||
|
||||
BOOL GPBMessageHasFieldNumberSet(GPBMessage *self, uint32_t fieldNumber);
|
||||
BOOL GPBMessageHasFieldSet(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
|
||||
void GPBClearMessageField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
|
||||
// Returns an empty NSData to assign to byte fields when you wish
|
||||
// to assign them to empty. Prevents allocating a lot of little [NSData data]
|
||||
// objects.
|
||||
NSData *GPBEmptyNSData(void) __attribute__((pure));
|
||||
|
||||
//%PDDM-EXPAND GPB_IVAR_ACCESSORS()
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
// Getters and Setters for ivars named |name| from instance self.
|
||||
|
||||
NSData* GPBGetDataIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetDataIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
NSData* value);
|
||||
NSString* GPBGetStringIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetStringIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
NSString* value);
|
||||
GPBMessage* GPBGetMessageIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetMessageIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
GPBMessage* value);
|
||||
GPBMessage* GPBGetGroupIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetGroupIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
GPBMessage* value);
|
||||
BOOL GPBGetBoolIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetBoolIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
BOOL value);
|
||||
int32_t GPBGetInt32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetInt32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int32_t value);
|
||||
int32_t GPBGetSFixed32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetSFixed32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int32_t value);
|
||||
int32_t GPBGetSInt32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetSInt32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int32_t value);
|
||||
int32_t GPBGetEnumIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetEnumIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int32_t value);
|
||||
uint32_t GPBGetUInt32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetUInt32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
uint32_t value);
|
||||
uint32_t GPBGetFixed32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetFixed32IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
uint32_t value);
|
||||
int64_t GPBGetInt64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetInt64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int64_t value);
|
||||
int64_t GPBGetSInt64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetSInt64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int64_t value);
|
||||
int64_t GPBGetSFixed64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetSFixed64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
int64_t value);
|
||||
uint64_t GPBGetUInt64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetUInt64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
uint64_t value);
|
||||
uint64_t GPBGetFixed64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetFixed64IvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
uint64_t value);
|
||||
float GPBGetFloatIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetFloatIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
float value);
|
||||
double GPBGetDoubleIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
void GPBSetDoubleIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field,
|
||||
double value);
|
||||
//%PDDM-EXPAND-END GPB_IVAR_ACCESSORS()
|
||||
|
||||
// Generates a sting that should be a valid "Text Format" for the C++ version
|
||||
// Generates a string that should be a valid "Text Format" for the C++ version
|
||||
// of Protocol Buffers. lineIndent can be nil if no additional line indent is
|
||||
// needed. The comments provide the names according to the ObjC library, they
|
||||
// most likely won't exactly match the original .proto file.
|
||||
@ -150,32 +44,139 @@ NSString *GPBTextFormatForMessage(GPBMessage *message, NSString *lineIndent);
|
||||
NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet *unknownSet,
|
||||
NSString *lineIndent);
|
||||
|
||||
//
|
||||
// Test if the given field is set on a message.
|
||||
//
|
||||
BOOL GPBMessageHasFieldNumberSet(GPBMessage *self, uint32_t fieldNumber);
|
||||
BOOL GPBMessageHasFieldSet(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
|
||||
//
|
||||
// Clear the given field of a message.
|
||||
//
|
||||
void GPBClearMessageField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
|
||||
//%PDDM-EXPAND GPB_ACCESSORS()
|
||||
// This block of code is generated, do not edit it directly.
|
||||
|
||||
|
||||
//
|
||||
// Get/Set the given field of a message.
|
||||
//
|
||||
|
||||
// Single Fields
|
||||
|
||||
NSData *GPBGetMessageBytesField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageBytesField(GPBMessage *self, GPBFieldDescriptor *field, NSData *value);
|
||||
|
||||
NSString *GPBGetMessageStringField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageStringField(GPBMessage *self, GPBFieldDescriptor *field, NSString *value);
|
||||
|
||||
GPBMessage *GPBGetMessageMessageField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageMessageField(GPBMessage *self, GPBFieldDescriptor *field, GPBMessage *value);
|
||||
|
||||
GPBMessage *GPBGetMessageGroupField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageGroupField(GPBMessage *self, GPBFieldDescriptor *field, GPBMessage *value);
|
||||
|
||||
BOOL GPBGetMessageBoolField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageBoolField(GPBMessage *self, GPBFieldDescriptor *field, BOOL value);
|
||||
|
||||
int32_t GPBGetMessageInt32Field(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageInt32Field(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
|
||||
|
||||
uint32_t GPBGetMessageUInt32Field(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageUInt32Field(GPBMessage *self, GPBFieldDescriptor *field, uint32_t value);
|
||||
|
||||
int64_t GPBGetMessageInt64Field(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageInt64Field(GPBMessage *self, GPBFieldDescriptor *field, int64_t value);
|
||||
|
||||
uint64_t GPBGetMessageUInt64Field(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageUInt64Field(GPBMessage *self, GPBFieldDescriptor *field, uint64_t value);
|
||||
|
||||
float GPBGetMessageFloatField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageFloatField(GPBMessage *self, GPBFieldDescriptor *field, float value);
|
||||
|
||||
double GPBGetMessageDoubleField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageDoubleField(GPBMessage *self, GPBFieldDescriptor *field, double value);
|
||||
|
||||
// Get/Set the given enum field of a message. You can only Set values that are
|
||||
// members of the enum. For proto3, when doing a Get, if the value isn't a
|
||||
// memeber of the enum, kGPBUnrecognizedEnumeratorValue will be returned. The
|
||||
// the functions with "Raw" in the will bypass all checks.
|
||||
int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
|
||||
int32_t GPBGetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
|
||||
|
||||
// Repeated Fields
|
||||
|
||||
// The object will/should be GPB*Array or NSMutableArray based on the field's
|
||||
// type.
|
||||
id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id array);
|
||||
|
||||
// Map Fields
|
||||
|
||||
// The object will/should be GPB*Dictionary or NSMutableDictionary based on the
|
||||
// field's type.
|
||||
id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
void GPBSetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field, id dictionary);
|
||||
|
||||
//%PDDM-EXPAND-END GPB_ACCESSORS()
|
||||
|
||||
// Returns an empty NSData to assign to byte fields when you wish
|
||||
// to assign them to empty. Prevents allocating a lot of little [NSData data]
|
||||
// objects.
|
||||
NSData *GPBEmptyNSData(void) __attribute__((pure));
|
||||
|
||||
CF_EXTERN_C_END
|
||||
|
||||
//%PDDM-DEFINE GPB_IVAR_ACCESSORS()
|
||||
//%// Getters and Setters for ivars named |name| from instance self.
|
||||
|
||||
//%PDDM-DEFINE GPB_ACCESSORS()
|
||||
//%
|
||||
//%//
|
||||
//%// Get/Set the given field of a message.
|
||||
//%//
|
||||
//%
|
||||
//%// Single Fields
|
||||
//%
|
||||
//%GPB_ACCESSOR_SINGLE_FULL(Bytes, NSData, *)
|
||||
//%GPB_ACCESSOR_SINGLE_FULL(String, NSString, *)
|
||||
//%GPB_ACCESSOR_SINGLE_FULL(Message, GPBMessage, *)
|
||||
//%GPB_ACCESSOR_SINGLE_FULL(Group, GPBMessage, *)
|
||||
//%GPB_ACCESSOR_SINGLE(Bool, BOOL)
|
||||
//%GPB_ACCESSOR_SINGLE(Int32, int32_t)
|
||||
//%GPB_ACCESSOR_SINGLE(UInt32, uint32_t)
|
||||
//%GPB_ACCESSOR_SINGLE(Int64, int64_t)
|
||||
//%GPB_ACCESSOR_SINGLE(UInt64, uint64_t)
|
||||
//%GPB_ACCESSOR_SINGLE(Float, float)
|
||||
//%GPB_ACCESSOR_SINGLE(Double, double)
|
||||
//%// Get/Set the given enum field of a message. You can only Set values that are
|
||||
//%// members of the enum. For proto3, when doing a Get, if the value isn't a
|
||||
//%// memeber of the enum, kGPBUnrecognizedEnumeratorValue will be returned. The
|
||||
//%// the functions with "Raw" in the will bypass all checks.
|
||||
//%int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
//%void GPBSetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
|
||||
//%int32_t GPBGetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
//%void GPBSetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
|
||||
//%
|
||||
//%// Repeated Fields
|
||||
//%
|
||||
//%// The object will/should be GPB*Array or NSMutableArray based on the field's
|
||||
//%// type.
|
||||
//%id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
//%void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id array);
|
||||
//%
|
||||
//%// Map Fields
|
||||
//%
|
||||
//%// The object will/should be GPB*Dictionary or NSMutableDictionary based on the
|
||||
//%// field's type.
|
||||
//%id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
//%void GPBSetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field, id dictionary);
|
||||
//%
|
||||
|
||||
//%PDDM-DEFINE GPB_ACCESSOR_SINGLE(NAME, TYPE)
|
||||
//%GPB_ACCESSOR_SINGLE_FULL(NAME, TYPE, )
|
||||
//%PDDM-DEFINE GPB_ACCESSOR_SINGLE_FULL(NAME, TYPE, TisP)
|
||||
//%TYPE TisP##GPBGetMessage##NAME##Field(GPBMessage *self, GPBFieldDescriptor *field);
|
||||
//%void GPBSetMessage##NAME##Field(GPBMessage *self, GPBFieldDescriptor *field, TYPE TisP##value);
|
||||
//%
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Data, NSData*)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(String, NSString*)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Message, GPBMessage*)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Group, GPBMessage*)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Bool, BOOL)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Int32, int32_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(SFixed32, int32_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(SInt32, int32_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Enum, int32_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(UInt32, uint32_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Fixed32, uint32_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Int64, int64_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(SInt64, int64_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(SFixed64, int64_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(UInt64, uint64_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Fixed64, uint64_t)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Float, float)
|
||||
//%GPB_IVAR_ACCESSORS_DECL(Double, double)
|
||||
//%PDDM-DEFINE GPB_IVAR_ACCESSORS_DECL(NAME, TYPE)
|
||||
//%TYPE GPBGet##NAME##IvarWithField(GPBMessage *self,
|
||||
//% TYPE$S NAME$S GPBFieldDescriptor *field);
|
||||
//%void GPBSet##NAME##IvarWithField(GPBMessage *self,
|
||||
//% NAME$S GPBFieldDescriptor *field,
|
||||
//% NAME$S TYPE value);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -48,6 +48,15 @@
|
||||
|
||||
CF_EXTERN_C_BEGIN
|
||||
|
||||
// These two are used to inject a runtime check for version mismatch into the
|
||||
// generated sources to make sure they are linked with a supporting runtime.
|
||||
void GPBCheckRuntimeVersionInternal(int32_t version);
|
||||
GPB_INLINE void GPBDebugCheckRuntimeVersion() {
|
||||
#if DEBUG
|
||||
GPBCheckRuntimeVersionInternal(GOOGLE_PROTOBUF_OBJC_GEN_VERSION);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Conversion functions for de/serializing floating point types.
|
||||
|
||||
GPB_INLINE int64_t GPBConvertDoubleToInt64(double v) {
|
||||
@ -116,40 +125,38 @@ GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n) {
|
||||
return (n << 1) ^ (n >> 63);
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBTypeIsObject(GPBType type) {
|
||||
GPB_INLINE BOOL GPBDataTypeIsObject(GPBDataType type) {
|
||||
switch (type) {
|
||||
case GPBTypeData:
|
||||
case GPBTypeString:
|
||||
case GPBTypeMessage:
|
||||
case GPBTypeGroup:
|
||||
case GPBDataTypeBytes:
|
||||
case GPBDataTypeString:
|
||||
case GPBDataTypeMessage:
|
||||
case GPBDataTypeGroup:
|
||||
return YES;
|
||||
default:
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBTypeIsMessage(GPBType type) {
|
||||
GPB_INLINE BOOL GPBDataTypeIsMessage(GPBDataType type) {
|
||||
switch (type) {
|
||||
case GPBTypeMessage:
|
||||
case GPBTypeGroup:
|
||||
case GPBDataTypeMessage:
|
||||
case GPBDataTypeGroup:
|
||||
return YES;
|
||||
default:
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBTypeIsEnum(GPBType type) { return type == GPBTypeEnum; }
|
||||
|
||||
GPB_INLINE BOOL GPBFieldTypeIsMessage(GPBFieldDescriptor *field) {
|
||||
return GPBTypeIsMessage(field->description_->type);
|
||||
GPB_INLINE BOOL GPBFieldDataTypeIsMessage(GPBFieldDescriptor *field) {
|
||||
return GPBDataTypeIsMessage(field->description_->dataType);
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBFieldTypeIsObject(GPBFieldDescriptor *field) {
|
||||
return GPBTypeIsObject(field->description_->type);
|
||||
GPB_INLINE BOOL GPBFieldDataTypeIsObject(GPBFieldDescriptor *field) {
|
||||
return GPBDataTypeIsObject(field->description_->dataType);
|
||||
}
|
||||
|
||||
GPB_INLINE BOOL GPBExtensionIsMessage(GPBExtensionDescriptor *ext) {
|
||||
return GPBTypeIsMessage(ext->description_->type);
|
||||
return GPBDataTypeIsMessage(ext->description_->dataType);
|
||||
}
|
||||
|
||||
// The field is an array/map or it has an object value.
|
||||
@ -158,7 +165,7 @@ GPB_INLINE BOOL GPBFieldStoresObject(GPBFieldDescriptor *field) {
|
||||
if ((desc->flags & (GPBFieldRepeated | GPBFieldMapKeyMask)) != 0) {
|
||||
return YES;
|
||||
}
|
||||
return GPBTypeIsObject(desc->type);
|
||||
return GPBDataTypeIsObject(desc->dataType);
|
||||
}
|
||||
|
||||
BOOL GPBGetHasIvar(GPBMessage *self, int32_t index, uint32_t fieldNumber);
|
||||
@ -272,109 +279,6 @@ void GPBSetAutocreatedRetainedObjectIvarWithField(
|
||||
void GPBClearAutocreatedMessageIvarWithField(GPBMessage *self,
|
||||
GPBFieldDescriptor *field);
|
||||
|
||||
// Utilities for applying various functions based on Objective C types.
|
||||
|
||||
// A basic functor that is passed a field and a context. Returns YES
|
||||
// if the calling function should continue processing, and NO if the calling
|
||||
// function should stop processing.
|
||||
typedef BOOL (*GPBApplyFunction)(GPBFieldDescriptor *field, void *context);
|
||||
|
||||
// Functions called for various types. See ApplyFunctionsToMessageFields.
|
||||
typedef enum {
|
||||
GPBApplyFunctionObject,
|
||||
GPBApplyFunctionBool,
|
||||
GPBApplyFunctionInt32,
|
||||
GPBApplyFunctionUInt32,
|
||||
GPBApplyFunctionInt64,
|
||||
GPBApplyFunctionUInt64,
|
||||
GPBApplyFunctionFloat,
|
||||
GPBApplyFunctionDouble,
|
||||
} GPBApplyFunctionOrder;
|
||||
|
||||
enum {
|
||||
// A count of the number of types in GPBApplyFunctionOrder. Separated out
|
||||
// from the GPBApplyFunctionOrder enum to avoid warnings regarding not
|
||||
// handling GPBApplyFunctionCount in switch statements.
|
||||
GPBApplyFunctionCount = GPBApplyFunctionDouble + 1
|
||||
};
|
||||
|
||||
typedef GPBApplyFunction GPBApplyFunctions[GPBApplyFunctionCount];
|
||||
|
||||
// Functions called for various types.
|
||||
// See ApplyStrictFunctionsToMessageFields.
|
||||
// They are in the same order as the GPBTypes enum.
|
||||
typedef GPBApplyFunction GPBApplyStrictFunctions[GPBTypeCount];
|
||||
|
||||
// A macro for easily initializing a GPBApplyFunctions struct
|
||||
// GPBApplyFunctions foo = GPBAPPLY_FUNCTIONS_INIT(Foo);
|
||||
#define GPBAPPLY_FUNCTIONS_INIT(PREFIX) \
|
||||
{ \
|
||||
PREFIX##Object, \
|
||||
PREFIX##Bool, \
|
||||
PREFIX##Int32, \
|
||||
PREFIX##UInt32, \
|
||||
PREFIX##Int64, \
|
||||
PREFIX##UInt64, \
|
||||
PREFIX##Float, \
|
||||
PREFIX##Double, \
|
||||
}
|
||||
|
||||
// A macro for easily initializing a GPBApplyStrictFunctions struct
|
||||
// GPBApplyStrictFunctions foo = GPBAPPLY_STRICT_FUNCTIONS_INIT(Foo);
|
||||
// These need to stay in the same order as
|
||||
// the GPBType enum.
|
||||
#define GPBAPPLY_STRICT_FUNCTIONS_INIT(PREFIX) \
|
||||
{ \
|
||||
PREFIX##Bool, \
|
||||
PREFIX##Fixed32, \
|
||||
PREFIX##SFixed32, \
|
||||
PREFIX##Float, \
|
||||
PREFIX##Fixed64, \
|
||||
PREFIX##SFixed64, \
|
||||
PREFIX##Double, \
|
||||
PREFIX##Int32, \
|
||||
PREFIX##Int64, \
|
||||
PREFIX##SInt32, \
|
||||
PREFIX##SInt64, \
|
||||
PREFIX##UInt32, \
|
||||
PREFIX##UInt64, \
|
||||
PREFIX##Data, \
|
||||
PREFIX##String, \
|
||||
PREFIX##Message, \
|
||||
PREFIX##Group, \
|
||||
PREFIX##Enum, \
|
||||
}
|
||||
|
||||
// Iterates over the fields of a proto |msg| and applies the functions in
|
||||
// |functions| to them with |context|. If one of the functions in |functions|
|
||||
// returns NO, it will return immediately and not process the rest of the
|
||||
// ivars. The types in the fields are mapped so:
|
||||
// Int32, Enum, SInt32 and SFixed32 will be mapped to the int32Function,
|
||||
// UInt32 and Fixed32 will be mapped to the uint32Function,
|
||||
// Bytes, String, Message and Group will be mapped to the objectFunction,
|
||||
// etc..
|
||||
// If you require more specific mappings look at
|
||||
// GPBApplyStrictFunctionsToMessageFields.
|
||||
void GPBApplyFunctionsToMessageFields(GPBApplyFunctions *functions,
|
||||
GPBMessage *msg, void *context);
|
||||
|
||||
// Iterates over the fields of a proto |msg| and applies the functions in
|
||||
// |functions| to them with |context|. If one of the functions in |functions|
|
||||
// returns NO, it will return immediately and not process the rest of the
|
||||
// ivars. The types in the fields are mapped directly:
|
||||
// Int32 -> functions[GPBTypeInt32],
|
||||
// SFixed32 -> functions[GPBTypeSFixed32],
|
||||
// etc...
|
||||
// If you can use looser mappings look at GPBApplyFunctionsToMessageFields.
|
||||
void GPBApplyStrictFunctionsToMessageFields(GPBApplyStrictFunctions *functions,
|
||||
GPBMessage *msg, void *context);
|
||||
|
||||
// Applies the appropriate function in |functions| based on |field|.
|
||||
// Returns the value from function(name, context).
|
||||
// Throws an exception if the type is unrecognized.
|
||||
BOOL GPBApplyFunctionsBasedOnField(GPBFieldDescriptor *field,
|
||||
GPBApplyFunctions *functions, void *context);
|
||||
|
||||
// Returns an Objective C encoding for |selector|. |instanceSel| should be
|
||||
// YES if it's an instance selector (as opposed to a class selector).
|
||||
// |selector| must be a selector from MessageSignatureProtocol.
|
||||
@ -410,7 +314,7 @@ GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, SInt32)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, SInt64)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(uint32_t, UInt32)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(uint64_t, UInt64)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(NSData *, Data)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(NSData *, Bytes)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(NSString *, String)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(GPBMessage *, Message)
|
||||
GPB_MESSAGE_SIGNATURE_ENTRY(GPBMessage *, Group)
|
||||
@ -419,6 +323,7 @@ GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, Enum)
|
||||
#undef GPB_MESSAGE_SIGNATURE_ENTRY
|
||||
|
||||
- (id)getArray;
|
||||
- (NSUInteger)getArrayCount;
|
||||
- (void)setArray:(NSArray *)array;
|
||||
+ (id)getClassValue;
|
||||
@end
|
||||
|
@ -28,7 +28,7 @@
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#import "GPBTypes.h"
|
||||
#import "GPBRuntimeTypes.h"
|
||||
|
||||
CF_EXTERN_C_BEGIN
|
||||
|
||||
@ -52,7 +52,7 @@ uint32_t GPBWireFormatMakeTag(uint32_t fieldNumber, GPBWireFormat wireType)
|
||||
GPBWireFormat GPBWireFormatGetTagWireType(uint32_t tag) __attribute__((const));
|
||||
uint32_t GPBWireFormatGetTagFieldNumber(uint32_t tag) __attribute__((const));
|
||||
|
||||
GPBWireFormat GPBWireFormatForType(GPBType type, BOOL isPacked)
|
||||
GPBWireFormat GPBWireFormatForType(GPBDataType dataType, BOOL isPacked)
|
||||
__attribute__((const));
|
||||
|
||||
#define GPBWireFormatMessageSetItemTag \
|
||||
|
@ -49,30 +49,30 @@ uint32_t GPBWireFormatGetTagFieldNumber(uint32_t tag) {
|
||||
return GPBLogicalRightShift32(tag, GPBWireFormatTagTypeBits);
|
||||
}
|
||||
|
||||
GPBWireFormat GPBWireFormatForType(GPBType type, BOOL isPacked) {
|
||||
GPBWireFormat GPBWireFormatForType(GPBDataType type, BOOL isPacked) {
|
||||
if (isPacked) {
|
||||
return GPBWireFormatLengthDelimited;
|
||||
}
|
||||
|
||||
static const GPBWireFormat format[GPBTypeCount] = {
|
||||
GPBWireFormatVarint, // GPBTypeBool
|
||||
GPBWireFormatFixed32, // GPBTypeFixed32
|
||||
GPBWireFormatFixed32, // GPBTypeSFixed32
|
||||
GPBWireFormatFixed32, // GPBTypeFloat
|
||||
GPBWireFormatFixed64, // GPBTypeFixed64
|
||||
GPBWireFormatFixed64, // GPBTypeSFixed64
|
||||
GPBWireFormatFixed64, // GPBTypeDouble
|
||||
GPBWireFormatVarint, // GPBTypeInt32
|
||||
GPBWireFormatVarint, // GPBTypeInt64
|
||||
GPBWireFormatVarint, // GPBTypeSInt32
|
||||
GPBWireFormatVarint, // GPBTypeSInt64
|
||||
GPBWireFormatVarint, // GPBTypeUInt32
|
||||
GPBWireFormatVarint, // GPBTypeUInt64
|
||||
GPBWireFormatLengthDelimited, // GPBTypeBytes
|
||||
GPBWireFormatLengthDelimited, // GPBTypeString
|
||||
GPBWireFormatLengthDelimited, // GPBTypeMessage
|
||||
GPBWireFormatStartGroup, // GPBTypeGroup
|
||||
GPBWireFormatVarint // GPBTypeEnum
|
||||
static const GPBWireFormat format[GPBDataType_Count] = {
|
||||
GPBWireFormatVarint, // GPBDataTypeBool
|
||||
GPBWireFormatFixed32, // GPBDataTypeFixed32
|
||||
GPBWireFormatFixed32, // GPBDataTypeSFixed32
|
||||
GPBWireFormatFixed32, // GPBDataTypeFloat
|
||||
GPBWireFormatFixed64, // GPBDataTypeFixed64
|
||||
GPBWireFormatFixed64, // GPBDataTypeSFixed64
|
||||
GPBWireFormatFixed64, // GPBDataTypeDouble
|
||||
GPBWireFormatVarint, // GPBDataTypeInt32
|
||||
GPBWireFormatVarint, // GPBDataTypeInt64
|
||||
GPBWireFormatVarint, // GPBDataTypeSInt32
|
||||
GPBWireFormatVarint, // GPBDataTypeSInt64
|
||||
GPBWireFormatVarint, // GPBDataTypeUInt32
|
||||
GPBWireFormatVarint, // GPBDataTypeUInt64
|
||||
GPBWireFormatLengthDelimited, // GPBDataTypeBytes
|
||||
GPBWireFormatLengthDelimited, // GPBDataTypeString
|
||||
GPBWireFormatLengthDelimited, // GPBDataTypeMessage
|
||||
GPBWireFormatStartGroup, // GPBDataTypeGroup
|
||||
GPBWireFormatVarint // GPBDataTypeEnum
|
||||
};
|
||||
return format[type];
|
||||
}
|
||||
|
@ -6,20 +6,6 @@
|
||||
objectVersion = 47;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXAggregateTarget section */
|
||||
8BD3981414BE4AE70081D629 /* Compile_Protos */ = {
|
||||
isa = PBXAggregateTarget;
|
||||
buildConfigurationList = 8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */;
|
||||
buildPhases = (
|
||||
8BD3981814BE4AF30081D629 /* ShellScript */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Compile_Protos;
|
||||
productName = Compile_Protos;
|
||||
};
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */; };
|
||||
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5102DABB1891A052002037B6 /* GPBConcurrencyTests.m */; };
|
||||
@ -27,7 +13,7 @@
|
||||
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B48F0F94F99000A0C422 /* GPBCodedInputStream.m */; };
|
||||
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */; };
|
||||
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */; };
|
||||
7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBField.m */; };
|
||||
7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */; };
|
||||
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4BF0F94F99000A0C422 /* GPBMessage.m */; };
|
||||
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */; };
|
||||
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E60F94F99000A0C422 /* GPBUtilities.m */; };
|
||||
@ -51,7 +37,6 @@
|
||||
8BBEA4B7147C727D00C4ADB7 /* GPBUtilitiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */; };
|
||||
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */; };
|
||||
8BBEA4BB147C729200C4ADB7 /* libProtocolBuffers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7461B52E0F94FAF800A0C422 /* libProtocolBuffers.a */; };
|
||||
8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */; };
|
||||
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */; };
|
||||
8BF8193514A0DDA600A2C982 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
|
||||
F401DC2D1A8D444600FCC765 /* GPBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = F401DC2B1A8D444600FCC765 /* GPBArray.m */; };
|
||||
@ -71,8 +56,24 @@
|
||||
F4487C751AADF7F500531423 /* GPBMessageTests+Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C741AADF7F500531423 /* GPBMessageTests+Runtime.m */; };
|
||||
F4487C7F1AAF62CD00531423 /* GPBMessageTests+Serialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C7E1AAF62CD00531423 /* GPBMessageTests+Serialization.m */; };
|
||||
F4487C831AAF6AB300531423 /* GPBMessageTests+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C821AAF6AB300531423 /* GPBMessageTests+Merge.m */; };
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionField.m */; };
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */; };
|
||||
F45E57C71AE6DC6A000B7D99 /* text_format_map_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F45E57C61AE6DC6A000B7D99 /* text_format_map_unittest_data.txt */; };
|
||||
F4E675971B21D0000054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675871B21D0000054530B /* Any.pbobjc.m */; };
|
||||
F4E675991B21D0000054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675891B21D0000054530B /* Api.pbobjc.m */; };
|
||||
F4E6759B1B21D0000054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758B1B21D0000054530B /* Empty.pbobjc.m */; };
|
||||
F4E6759D1B21D0000054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */; };
|
||||
F4E6759F1B21D0000054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */; };
|
||||
F4E675A11B21D0000054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675911B21D0000054530B /* Struct.pbobjc.m */; };
|
||||
F4E675A31B21D0000054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675931B21D0000054530B /* Type.pbobjc.m */; };
|
||||
F4E675A51B21D0000054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675951B21D0000054530B /* Wrappers.pbobjc.m */; };
|
||||
F4E675AE1B21D0A70054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675871B21D0000054530B /* Any.pbobjc.m */; };
|
||||
F4E675AF1B21D0A70054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675891B21D0000054530B /* Api.pbobjc.m */; };
|
||||
F4E675B01B21D0A70054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758B1B21D0000054530B /* Empty.pbobjc.m */; };
|
||||
F4E675B11B21D0A70054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */; };
|
||||
F4E675B21B21D0A70054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */; };
|
||||
F4E675B31B21D0A70054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675911B21D0000054530B /* Struct.pbobjc.m */; };
|
||||
F4E675B41B21D0A70054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675931B21D0000054530B /* Type.pbobjc.m */; };
|
||||
F4E675B51B21D0A70054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675951B21D0000054530B /* Wrappers.pbobjc.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@ -83,12 +84,12 @@
|
||||
remoteGlobalIDString = 7461B52D0F94FAF800A0C422;
|
||||
remoteInfo = ProtocolBuffers;
|
||||
};
|
||||
8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */ = {
|
||||
F45BBC181B0CE3D7002D064D /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 8BD3981414BE4AE70081D629;
|
||||
remoteInfo = Compile_Protos;
|
||||
remoteGlobalIDString = F45BBC141B0CE3C6002D064D;
|
||||
remoteInfo = "Compile Unittest Protos";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
@ -106,8 +107,8 @@
|
||||
7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBCodedOutputStream.m; sourceTree = "<group>"; };
|
||||
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionRegistry.h; sourceTree = "<group>"; };
|
||||
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionRegistry.m; sourceTree = "<group>"; };
|
||||
7461B4AE0F94F99000A0C422 /* GPBField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBField.h; sourceTree = "<group>"; };
|
||||
7461B4AF0F94F99000A0C422 /* GPBField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBField.m; sourceTree = "<group>"; };
|
||||
7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField.h; sourceTree = "<group>"; };
|
||||
7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownField.m; sourceTree = "<group>"; };
|
||||
7461B4BE0F94F99000A0C422 /* GPBMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBMessage.h; sourceTree = "<group>"; };
|
||||
7461B4BF0F94F99000A0C422 /* GPBMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBMessage.m; sourceTree = "<group>"; };
|
||||
7461B4CD0F94F99000A0C422 /* GPBProtocolBuffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers.h; sourceTree = "<group>"; };
|
||||
@ -126,10 +127,7 @@
|
||||
7461B6B80F94FDF900A0C422 /* GPBUnknownFieldSetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownFieldSetTest.m; sourceTree = "<group>"; };
|
||||
7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUtilitiesTests.m; sourceTree = "<group>"; };
|
||||
7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBWireFormatTests.m; sourceTree = "<group>"; };
|
||||
748F0CAF0FD70602000858A9 /* GPBExtensionField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField.h; sourceTree = "<group>"; };
|
||||
8B09AAF614B663A7007B4184 /* unittest_objc.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc.proto; sourceTree = "<group>"; };
|
||||
8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter1.txt; sourceTree = "<group>"; };
|
||||
8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_filter.proto; sourceTree = "<group>"; };
|
||||
8B210CCD159383D60032D72D /* golden_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_message; sourceTree = "<group>"; };
|
||||
8B210CCF159386920032D72D /* golden_packed_fields_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_packed_fields_message; sourceTree = "<group>"; };
|
||||
8B4248B81A8C254000BC1EC6 /* protobuf */ = {isa = PBXFileReference; lastKnownFileType = text; name = protobuf; path = ../../Intermediates/ProtocolBuffers_OSX.build/DerivedSources/protos/google/protobuf; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
@ -162,12 +160,11 @@
|
||||
8BA9364418DA5F4B0056FA2A /* GPBStringTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBStringTests.m; sourceTree = "<group>"; };
|
||||
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_lite.proto; path = ../../src/google/protobuf/unittest_lite.proto; sourceTree = "<group>"; };
|
||||
8BBEA4A6147C727100C4ADB7 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBFilteredMessageTests.m; sourceTree = "<group>"; };
|
||||
8BCF338814ED799900BC5317 /* GPBProtocolBuffers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GPBProtocolBuffers.m; sourceTree = "<group>"; };
|
||||
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_enormous_descriptor.proto; path = ../../src/google/protobuf/unittest_enormous_descriptor.proto; sourceTree = "<group>"; };
|
||||
8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnittestProtos.m; sourceTree = "<group>"; };
|
||||
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Descriptor.pbobjc.m; path = google/protobuf/Descriptor.pbobjc.m; sourceTree = SOURCE_ROOT; };
|
||||
8BEB5AE01498033E0078BF9D /* GPBTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBTypes.h; sourceTree = "<group>"; };
|
||||
8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRuntimeTypes.h; sourceTree = "<group>"; };
|
||||
F401DC2A1A8D444600FCC765 /* GPBArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBArray.h; sourceTree = "<group>"; };
|
||||
F401DC2B1A8D444600FCC765 /* GPBArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBArray.m; sourceTree = "<group>"; };
|
||||
F401DC321A8E5C0200FCC765 /* GPBArrayTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBArrayTests.m; sourceTree = "<group>"; };
|
||||
@ -192,16 +189,39 @@
|
||||
F4487C7C1AAE06AC00531423 /* GPBUtilities_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUtilities_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4487C7E1AAF62CD00531423 /* GPBMessageTests+Serialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Serialization.m"; sourceTree = "<group>"; };
|
||||
F4487C821AAF6AB300531423 /* GPBMessageTests+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Merge.m"; sourceTree = "<group>"; };
|
||||
F44B25D81A729803005CCF68 /* Filter2.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter2.txt; sourceTree = "<group>"; };
|
||||
F451D3F51A8AAE8700B8A22C /* GPBProtocolBuffers_RuntimeSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers_RuntimeSupport.h; sourceTree = "<group>"; };
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionField.m; sourceTree = "<group>"; };
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionInternals.m; sourceTree = "<group>"; };
|
||||
F45E57C61AE6DC6A000B7D99 /* text_format_map_unittest_data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = text_format_map_unittest_data.txt; sourceTree = "<group>"; };
|
||||
F4AC9E1D1A8BEB3500BD6E83 /* unittest_cycle.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_cycle.proto; sourceTree = "<group>"; };
|
||||
F4B6B8AF1A9CC98000892426 /* GPBField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBField_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8AF1A9CC98000892426 /* GPBUnknownField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B21A9CCBDA00892426 /* GPBUnknownFieldSet_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownFieldSet_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B61A9CD1DE00892426 /* GPBExtensionField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B61A9CD1DE00892426 /* GPBExtensionInternals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionInternals.h; sourceTree = "<group>"; };
|
||||
F4B6B8B81A9CD1DE00892426 /* GPBRootObject_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRootObject_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B91A9D338B00892426 /* unittest_name_mangling.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_name_mangling.proto; sourceTree = "<group>"; };
|
||||
F4CF31701B162ED800BD9B06 /* unittest_objc_startup.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc_startup.proto; sourceTree = "<group>"; };
|
||||
F4E675861B21D0000054530B /* Any.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = google/protobuf/Any.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675871B21D0000054530B /* Any.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Any.pbobjc.m; path = google/protobuf/Any.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675881B21D0000054530B /* Api.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Api.pbobjc.h; path = google/protobuf/Api.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675891B21D0000054530B /* Api.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Api.pbobjc.m; path = google/protobuf/Api.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E6758A1B21D0000054530B /* Empty.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Empty.pbobjc.h; path = google/protobuf/Empty.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E6758B1B21D0000054530B /* Empty.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Empty.pbobjc.m; path = google/protobuf/Empty.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E6758C1B21D0000054530B /* FieldMask.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FieldMask.pbobjc.h; path = google/protobuf/FieldMask.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FieldMask.pbobjc.m; path = google/protobuf/FieldMask.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E6758E1B21D0000054530B /* SourceContext.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SourceContext.pbobjc.h; path = google/protobuf/SourceContext.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SourceContext.pbobjc.m; path = google/protobuf/SourceContext.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675901B21D0000054530B /* Struct.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Struct.pbobjc.h; path = google/protobuf/Struct.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675911B21D0000054530B /* Struct.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Struct.pbobjc.m; path = google/protobuf/Struct.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675921B21D0000054530B /* Type.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Type.pbobjc.h; path = google/protobuf/Type.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675931B21D0000054530B /* Type.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Type.pbobjc.m; path = google/protobuf/Type.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675941B21D0000054530B /* Wrappers.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Wrappers.pbobjc.h; path = google/protobuf/Wrappers.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675951B21D0000054530B /* Wrappers.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Wrappers.pbobjc.m; path = google/protobuf/Wrappers.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675A61B21D05C0054530B /* any.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = any.proto; path = ../src/google/protobuf/any.proto; sourceTree = "<group>"; };
|
||||
F4E675A71B21D05C0054530B /* api.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = api.proto; path = ../src/google/protobuf/api.proto; sourceTree = "<group>"; };
|
||||
F4E675A81B21D05C0054530B /* empty.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = empty.proto; path = ../src/google/protobuf/empty.proto; sourceTree = "<group>"; };
|
||||
F4E675A91B21D05C0054530B /* field_mask.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = field_mask.proto; path = ../src/google/protobuf/field_mask.proto; sourceTree = "<group>"; };
|
||||
F4E675AA1B21D05C0054530B /* source_context.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = source_context.proto; path = ../src/google/protobuf/source_context.proto; sourceTree = "<group>"; };
|
||||
F4E675AB1B21D05C0054530B /* struct.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = struct.proto; path = ../src/google/protobuf/struct.proto; sourceTree = "<group>"; };
|
||||
F4E675AC1B21D05C0054530B /* type.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.proto; path = ../src/google/protobuf/type.proto; sourceTree = "<group>"; };
|
||||
F4E675AD1B21D05C0054530B /* wrappers.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = wrappers.proto; path = ../src/google/protobuf/wrappers.proto; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -273,15 +293,39 @@
|
||||
29B97315FDCFA39411CA2CEA /* Generated */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B42494B1A92A16600BC1EC6 /* descriptor.proto */,
|
||||
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */,
|
||||
F4E675861B21D0000054530B /* Any.pbobjc.h */,
|
||||
F4E675871B21D0000054530B /* Any.pbobjc.m */,
|
||||
F4E675A61B21D05C0054530B /* any.proto */,
|
||||
F4E675881B21D0000054530B /* Api.pbobjc.h */,
|
||||
F4E675891B21D0000054530B /* Api.pbobjc.m */,
|
||||
F4E675A71B21D05C0054530B /* api.proto */,
|
||||
8B54585814DCC34E003D7338 /* Descriptor.pbobjc.h */,
|
||||
8B42494C1A92A16600BC1EC6 /* duration.proto */,
|
||||
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */,
|
||||
8B42494B1A92A16600BC1EC6 /* descriptor.proto */,
|
||||
8B4248D31A92826400BC1EC6 /* Duration.pbobjc.h */,
|
||||
8B4248D41A92826400BC1EC6 /* Duration.pbobjc.m */,
|
||||
8B42494D1A92A16600BC1EC6 /* timestamp.proto */,
|
||||
8B42494C1A92A16600BC1EC6 /* duration.proto */,
|
||||
F4E6758A1B21D0000054530B /* Empty.pbobjc.h */,
|
||||
F4E6758B1B21D0000054530B /* Empty.pbobjc.m */,
|
||||
F4E675A81B21D05C0054530B /* empty.proto */,
|
||||
F4E675A91B21D05C0054530B /* field_mask.proto */,
|
||||
F4E6758C1B21D0000054530B /* FieldMask.pbobjc.h */,
|
||||
F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */,
|
||||
F4E675AA1B21D05C0054530B /* source_context.proto */,
|
||||
F4E6758E1B21D0000054530B /* SourceContext.pbobjc.h */,
|
||||
F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */,
|
||||
F4E675901B21D0000054530B /* Struct.pbobjc.h */,
|
||||
F4E675911B21D0000054530B /* Struct.pbobjc.m */,
|
||||
F4E675AB1B21D05C0054530B /* struct.proto */,
|
||||
8B4248D51A92826400BC1EC6 /* Timestamp.pbobjc.h */,
|
||||
8B4248D61A92826400BC1EC6 /* Timestamp.pbobjc.m */,
|
||||
8B42494D1A92A16600BC1EC6 /* timestamp.proto */,
|
||||
F4E675921B21D0000054530B /* Type.pbobjc.h */,
|
||||
F4E675931B21D0000054530B /* Type.pbobjc.m */,
|
||||
F4E675AC1B21D05C0054530B /* type.proto */,
|
||||
F4E675941B21D0000054530B /* Wrappers.pbobjc.h */,
|
||||
F4E675951B21D0000054530B /* Wrappers.pbobjc.m */,
|
||||
F4E675AD1B21D05C0054530B /* wrappers.proto */,
|
||||
);
|
||||
name = Generated;
|
||||
sourceTree = "<group>";
|
||||
@ -297,9 +341,8 @@
|
||||
7461B3C50F94F84100A0C422 /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F4B6B8B61A9CD1DE00892426 /* GPBExtensionField_PackagePrivate.h */,
|
||||
748F0CAF0FD70602000858A9 /* GPBExtensionField.h */,
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionField.m */,
|
||||
F4B6B8B61A9CD1DE00892426 /* GPBExtensionInternals.h */,
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */,
|
||||
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */,
|
||||
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */,
|
||||
F4B6B8B81A9CD1DE00892426 /* GPBRootObject_PackagePrivate.h */,
|
||||
@ -312,9 +355,9 @@
|
||||
7461B4850F94F96600A0C422 /* Fields */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F4B6B8AF1A9CC98000892426 /* GPBField_PackagePrivate.h */,
|
||||
7461B4AE0F94F99000A0C422 /* GPBField.h */,
|
||||
7461B4AF0F94F99000A0C422 /* GPBField.m */,
|
||||
F4B6B8AF1A9CC98000892426 /* GPBUnknownField_PackagePrivate.h */,
|
||||
7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */,
|
||||
7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */,
|
||||
F4B6B8B21A9CCBDA00892426 /* GPBUnknownFieldSet_PackagePrivate.h */,
|
||||
7461B4E10F94F99000A0C422 /* GPBUnknownFieldSet.h */,
|
||||
7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */,
|
||||
@ -353,8 +396,6 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B4248B81A8C254000BC1EC6 /* protobuf */,
|
||||
8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */,
|
||||
F44B25D81A729803005CCF68 /* Filter2.txt */,
|
||||
8B210CCD159383D60032D72D /* golden_message */,
|
||||
8B210CCF159386920032D72D /* golden_packed_fields_message */,
|
||||
8B8B615C17DF7056002EE618 /* GPBARCUnittestProtos.m */,
|
||||
@ -370,7 +411,6 @@
|
||||
F4353D301AC06F10005A6198 /* GPBDictionaryTests+String.m */,
|
||||
F4353D311AC06F10005A6198 /* GPBDictionaryTests+UInt32.m */,
|
||||
F4353D321AC06F10005A6198 /* GPBDictionaryTests+UInt64.m */,
|
||||
8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */,
|
||||
7461B6A30F94FDF800A0C422 /* GPBMessageTests.m */,
|
||||
F4487C821AAF6AB300531423 /* GPBMessageTests+Merge.m */,
|
||||
F4487C741AADF7F500531423 /* GPBMessageTests+Runtime.m */,
|
||||
@ -392,13 +432,12 @@
|
||||
8B7E6A7514893DBA00F8884A /* unittest_embed_optimize_for.proto */,
|
||||
8B7E6A7614893DBA00F8884A /* unittest_empty.proto */,
|
||||
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */,
|
||||
8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */,
|
||||
8B7E6A7814893DBB00F8884A /* unittest_import.proto */,
|
||||
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */,
|
||||
8B7E6A7B14893DBC00F8884A /* unittest_mset.proto */,
|
||||
F4B6B8B91A9D338B00892426 /* unittest_name_mangling.proto */,
|
||||
8B7E6A7C14893DBC00F8884A /* unittest_no_generic_services.proto */,
|
||||
8B09AAF614B663A7007B4184 /* unittest_objc.proto */,
|
||||
F4CF31701B162ED800BD9B06 /* unittest_objc_startup.proto */,
|
||||
8B7E6A7D14893DBC00F8884A /* unittest_optimize_for.proto */,
|
||||
F4487C781AADFB3100531423 /* unittest_runtime_proto2.proto */,
|
||||
F4487C791AADFB3200531423 /* unittest_runtime_proto3.proto */,
|
||||
@ -419,7 +458,7 @@
|
||||
F43725911AC9832D004DCAFB /* GPBDictionary_PackagePrivate.h */,
|
||||
F4353D201ABB1537005A6198 /* GPBDictionary.h */,
|
||||
F4353D211ABB1537005A6198 /* GPBDictionary.m */,
|
||||
8BEB5AE01498033E0078BF9D /* GPBTypes.h */,
|
||||
8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */,
|
||||
F4487C7C1AAE06AC00531423 /* GPBUtilities_PackagePrivate.h */,
|
||||
7461B4E50F94F99000A0C422 /* GPBUtilities.h */,
|
||||
7461B4E60F94F99000A0C422 /* GPBUtilities.m */,
|
||||
@ -448,6 +487,22 @@
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXLegacyTarget section */
|
||||
F45BBC141B0CE3C6002D064D /* Compile Unittest Protos */ = {
|
||||
isa = PBXLegacyTarget;
|
||||
buildArgumentsString = "$(ACTION)";
|
||||
buildConfigurationList = F45BBC171B0CE3C6002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */;
|
||||
buildPhases = (
|
||||
);
|
||||
buildToolPath = DevTools/compile_testing_protos.sh;
|
||||
dependencies = (
|
||||
);
|
||||
name = "Compile Unittest Protos";
|
||||
passBuildSettingsInEnvironment = 1;
|
||||
productName = "Compile Unittest Protos";
|
||||
};
|
||||
/* End PBXLegacyTarget section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */ = {
|
||||
isa = PBXNativeTarget;
|
||||
@ -479,7 +534,7 @@
|
||||
);
|
||||
dependencies = (
|
||||
8BBEA4BD147C729A00C4ADB7 /* PBXTargetDependency */,
|
||||
8BD3982114BE59EB0081D629 /* PBXTargetDependency */,
|
||||
F45BBC191B0CE3D7002D064D /* PBXTargetDependency */,
|
||||
);
|
||||
name = UnitTests;
|
||||
productName = UnitTests;
|
||||
@ -510,11 +565,14 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastTestingUpgradeCheck = 0600;
|
||||
LastUpgradeCheck = 0620;
|
||||
LastUpgradeCheck = 0630;
|
||||
TargetAttributes = {
|
||||
8BBEA4A5147C727100C4ADB7 = {
|
||||
TestTargetID = 8B9A5EA41831993600A9D33B;
|
||||
};
|
||||
F45BBC141B0CE3C6002D064D = {
|
||||
CreatedOnToolsVersion = 6.3.2;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_OSX" */;
|
||||
@ -530,8 +588,8 @@
|
||||
targets = (
|
||||
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */,
|
||||
8BBEA4A5147C727100C4ADB7 /* UnitTests */,
|
||||
8BD3981414BE4AE70081D629 /* Compile_Protos */,
|
||||
F4487C381A9F8E0200531423 /* TestSingleSourceBuild */,
|
||||
F45BBC141B0CE3C6002D064D /* Compile Unittest Protos */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@ -551,51 +609,6 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
8BD3981814BE4AF30081D629 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_custom_options.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_embed_optimize_for.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_empty.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_enormous_descriptor.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import_lite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_lite_imports_nonlite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_lite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_mset.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_no_generic_services.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest.proto",
|
||||
"$(SRCROOT)/Tests/unittest_objc.proto",
|
||||
"$(SRCROOT)/../src/.libs/libprotoc.10.dylib",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import_public_lite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import_public.proto",
|
||||
"$(SRCROOT)/Tests/unittest_filter.proto",
|
||||
"$(SRCROOT)/../src/.libs/libprotobuf.10.dylib",
|
||||
"$(SRCROOT)/../src/.libs/protoc",
|
||||
"$(SRCROOT)/Tests/Filter1.txt",
|
||||
"$(SRCROOT)/Tests/Filter2.txt",
|
||||
"$(SRCROOT)/Tests/unittest_cycle.proto",
|
||||
"$(SRCROOT)/Tests/unittest_name_mangling.proto",
|
||||
"$(SRCROOT)/Tests/unittest_runtime_proto2.proto",
|
||||
"$(SRCROOT)/Tests/unittest_runtime_proto3.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_drop_unknown_fields.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_preserve_unknown_enum.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/map_lite_unittest.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/map_proto2_unittest.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/map_unittest.proto",
|
||||
);
|
||||
outputPaths = (
|
||||
"$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.h",
|
||||
"$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.m",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/bash;
|
||||
shellScript = "set -eu\nmkdir -p \"${PROJECT_DERIVED_FILE_DIR}/protos\"\nexport PATH=\"${PATH}:.\"\ncd \"${SRCROOT}\"/../src\n\nPROTOC=./protoc\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_custom_options.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_enormous_descriptor.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_embed_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_empty.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_mset.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_no_generic_services.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_drop_unknown_fields.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_preserve_unknown_enum.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_lite_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_proto2_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_unittest.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_objc.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_cycle.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_name_mangling.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto2.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto3.proto\n\n# Use the filter\nexport GPB_OBJC_CLASS_WHITELIST_PATHS=\"${SRCROOT}/Tests/Filter1.txt;${SRCROOT}/Tests/Filter2.txt\"\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_filter.proto\n\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
F4B62A781AF91F6000AFCEDC /* Script: Check Runtime Stamps */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -620,19 +633,27 @@
|
||||
files = (
|
||||
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */,
|
||||
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */,
|
||||
F4E6759B1B21D0000054530B /* Empty.pbobjc.m in Sources */,
|
||||
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */,
|
||||
F401DC2D1A8D444600FCC765 /* GPBArray.m in Sources */,
|
||||
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */,
|
||||
7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */,
|
||||
F4E6759D1B21D0000054530B /* FieldMask.pbobjc.m in Sources */,
|
||||
7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */,
|
||||
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */,
|
||||
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */,
|
||||
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */,
|
||||
7461B5640F94FB4E00A0C422 /* GPBWireFormat.m in Sources */,
|
||||
F4E675991B21D0000054530B /* Api.pbobjc.m in Sources */,
|
||||
F4E6759F1B21D0000054530B /* SourceContext.pbobjc.m in Sources */,
|
||||
F4353D231ABB1537005A6198 /* GPBDictionary.m in Sources */,
|
||||
8B79657B14992E3F002FFBFC /* GPBRootObject.m in Sources */,
|
||||
8B96157414C8C38C00A2AC0B /* GPBDescriptor.m in Sources */,
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */,
|
||||
F4E675971B21D0000054530B /* Any.pbobjc.m in Sources */,
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */,
|
||||
8B4248D21A927E1500BC1EC6 /* GPBWellKnownTypes.m in Sources */,
|
||||
F4E675A31B21D0000054530B /* Type.pbobjc.m in Sources */,
|
||||
F4E675A11B21D0000054530B /* Struct.pbobjc.m in Sources */,
|
||||
F4E675A51B21D0000054530B /* Wrappers.pbobjc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -645,12 +666,18 @@
|
||||
F4353D361AC06F10005A6198 /* GPBDictionaryTests+Int64.m in Sources */,
|
||||
F4353D391AC06F10005A6198 /* GPBDictionaryTests+UInt64.m in Sources */,
|
||||
8BBEA4AA147C727D00C4ADB7 /* GPBCodedOuputStreamTests.m in Sources */,
|
||||
F4E675B21B21D0A70054530B /* SourceContext.pbobjc.m in Sources */,
|
||||
8BBEA4AC147C727D00C4ADB7 /* GPBMessageTests.m in Sources */,
|
||||
F4487C7F1AAF62CD00531423 /* GPBMessageTests+Serialization.m in Sources */,
|
||||
8B4248DC1A92933A00BC1EC6 /* GPBWellKnownTypesTest.m in Sources */,
|
||||
F4E675B01B21D0A70054530B /* Empty.pbobjc.m in Sources */,
|
||||
F4E675B41B21D0A70054530B /* Type.pbobjc.m in Sources */,
|
||||
F4353D1D1AB8822D005A6198 /* GPBDescriptorTests.m in Sources */,
|
||||
F4E675B51B21D0A70054530B /* Wrappers.pbobjc.m in Sources */,
|
||||
F4E675AE1B21D0A70054530B /* Any.pbobjc.m in Sources */,
|
||||
8B4248BB1A8C256A00BC1EC6 /* GPBSwiftTests.swift in Sources */,
|
||||
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */,
|
||||
F4E675B31B21D0A70054530B /* Struct.pbobjc.m in Sources */,
|
||||
F4487C751AADF7F500531423 /* GPBMessageTests+Runtime.m in Sources */,
|
||||
F4353D351AC06F10005A6198 /* GPBDictionaryTests+Int32.m in Sources */,
|
||||
8BBEA4B0147C727D00C4ADB7 /* GPBTestUtilities.m in Sources */,
|
||||
@ -665,9 +692,10 @@
|
||||
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */,
|
||||
8B79657D14992E3F002FFBFC /* GPBRootObject.m in Sources */,
|
||||
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */,
|
||||
F4E675B11B21D0A70054530B /* FieldMask.pbobjc.m in Sources */,
|
||||
8B96157514CA019D00A2AC0B /* Descriptor.pbobjc.m in Sources */,
|
||||
8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */,
|
||||
8B8B615D17DF7056002EE618 /* GPBARCUnittestProtos.m in Sources */,
|
||||
F4E675AF1B21D0A70054530B /* Api.pbobjc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -687,10 +715,10 @@
|
||||
target = 7461B52D0F94FAF800A0C422 /* ProtocolBuffers */;
|
||||
targetProxy = 8BBEA4BC147C729A00C4ADB7 /* PBXContainerItemProxy */;
|
||||
};
|
||||
8BD3982114BE59EB0081D629 /* PBXTargetDependency */ = {
|
||||
F45BBC191B0CE3D7002D064D /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 8BD3981414BE4AE70081D629 /* Compile_Protos */;
|
||||
targetProxy = 8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */;
|
||||
target = F45BBC141B0CE3C6002D064D /* Compile Unittest Protos */;
|
||||
targetProxy = F45BBC181B0CE3D7002D064D /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
@ -746,20 +774,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
8BD3981514BE4AE70081D629 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
8BD3981614BE4AE70081D629 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
C01FCF4F08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
@ -864,6 +878,18 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
F45BBC151B0CE3C6002D064D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
F45BBC161B0CE3C6002D064D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@ -885,15 +911,6 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
8BD3981514BE4AE70081D629 /* Debug */,
|
||||
8BD3981614BE4AE70081D629 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_OSX" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
@ -912,6 +929,15 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
F45BBC171B0CE3C6002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
F45BBC151B0CE3C6002D064D /* Debug */,
|
||||
F45BBC161B0CE3C6002D064D /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0620"
|
||||
LastUpgradeVersion = "0630"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@ -38,9 +38,6 @@
|
||||
ReferencedContainer = "container:ProtocolBuffers_OSX.xcodeproj">
|
||||
</BuildableReference>
|
||||
<SkippedTests>
|
||||
<Test
|
||||
Identifier = "ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "CodedInputStreamTests">
|
||||
</Test>
|
||||
@ -51,16 +48,223 @@
|
||||
Identifier = "ConcurrencyTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "FilteredMessageTests">
|
||||
Identifier = "DescriptorTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolBoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolDoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolFloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolUInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolUInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBridgeTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBDoubleArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBEnumArrayCustomTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBEnumArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBFloatArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringBoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringDoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringEnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringEnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringFloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringUInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringUInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBTestCase">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GeneratedMessageTests">
|
||||
Identifier = "GPBUInt32ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageMergeTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageRuntimeTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageSerializationTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageTests">
|
||||
@ -71,6 +275,9 @@
|
||||
<Test
|
||||
Identifier = "UtilitiesTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "WellKnownTypesTest">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "WireFormatTests">
|
||||
</Test>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0620"
|
||||
LastUpgradeVersion = "0630"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -6,20 +6,6 @@
|
||||
objectVersion = 47;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXAggregateTarget section */
|
||||
8BD3981414BE4AE70081D629 /* Compile_Protos */ = {
|
||||
isa = PBXAggregateTarget;
|
||||
buildConfigurationList = 8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */;
|
||||
buildPhases = (
|
||||
8BD3981814BE4AF30081D629 /* ShellScript */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Compile_Protos;
|
||||
productName = Compile_Protos;
|
||||
};
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */; };
|
||||
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5102DABB1891A052002037B6 /* GPBConcurrencyTests.m */; };
|
||||
@ -27,7 +13,7 @@
|
||||
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B48F0F94F99000A0C422 /* GPBCodedInputStream.m */; };
|
||||
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */; };
|
||||
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */; };
|
||||
7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBField.m */; };
|
||||
7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */; };
|
||||
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4BF0F94F99000A0C422 /* GPBMessage.m */; };
|
||||
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */; };
|
||||
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E60F94F99000A0C422 /* GPBUtilities.m */; };
|
||||
@ -59,7 +45,6 @@
|
||||
8BBEA4B7147C727D00C4ADB7 /* GPBUtilitiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */; };
|
||||
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */; };
|
||||
8BBEA4BB147C729200C4ADB7 /* libProtocolBuffers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7461B52E0F94FAF800A0C422 /* libProtocolBuffers.a */; };
|
||||
8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */; };
|
||||
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */; };
|
||||
8BF8193514A0DDA600A2C982 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
|
||||
F401DC351A8E5C6F00FCC765 /* GPBArrayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F401DC341A8E5C6F00FCC765 /* GPBArrayTests.m */; };
|
||||
@ -73,15 +58,30 @@
|
||||
F4353D461AC06F31005A6198 /* GPBDictionaryTests+UInt32.m in Sources */ = {isa = PBXBuildFile; fileRef = F4353D3F1AC06F31005A6198 /* GPBDictionaryTests+UInt32.m */; };
|
||||
F4353D471AC06F31005A6198 /* GPBDictionaryTests+UInt64.m in Sources */ = {isa = PBXBuildFile; fileRef = F4353D401AC06F31005A6198 /* GPBDictionaryTests+UInt64.m */; };
|
||||
F43C88D0191D77FC009E917D /* text_format_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F43C88CF191D77FC009E917D /* text_format_unittest_data.txt */; };
|
||||
F4487C5B1A9F8F8100531423 /* Descriptor.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */; };
|
||||
F4487C6A1A9F8F8100531423 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
|
||||
F4487C6F1A9F8FFF00531423 /* GPBProtocolBuffers.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCF338814ED799900BC5317 /* GPBProtocolBuffers.m */; };
|
||||
F4487C731A9F906200531423 /* GPBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C711A9F906200531423 /* GPBArray.m */; };
|
||||
F4487C771AADF84900531423 /* GPBMessageTests+Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C761AADF84900531423 /* GPBMessageTests+Runtime.m */; };
|
||||
F4487C811AAF62FC00531423 /* GPBMessageTests+Serialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C801AAF62FC00531423 /* GPBMessageTests+Serialization.m */; };
|
||||
F4487C851AAF6AC500531423 /* GPBMessageTests+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */; };
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionField.m */; };
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */; };
|
||||
F45E57C91AE6DC98000B7D99 /* text_format_map_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F45E57C81AE6DC98000B7D99 /* text_format_map_unittest_data.txt */; };
|
||||
F4E675C81B21D1610054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B71B21D1440054530B /* Any.pbobjc.m */; };
|
||||
F4E675C91B21D1610054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B91B21D1440054530B /* Api.pbobjc.m */; };
|
||||
F4E675CA1B21D1610054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BC1B21D1440054530B /* Empty.pbobjc.m */; };
|
||||
F4E675CB1B21D1610054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */; };
|
||||
F4E675CC1B21D1610054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */; };
|
||||
F4E675CD1B21D1610054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C21B21D1440054530B /* Struct.pbobjc.m */; };
|
||||
F4E675CE1B21D1610054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C51B21D1440054530B /* Type.pbobjc.m */; };
|
||||
F4E675CF1B21D1610054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */; };
|
||||
F4E675D01B21D1620054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B71B21D1440054530B /* Any.pbobjc.m */; };
|
||||
F4E675D11B21D1620054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B91B21D1440054530B /* Api.pbobjc.m */; };
|
||||
F4E675D21B21D1620054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BC1B21D1440054530B /* Empty.pbobjc.m */; };
|
||||
F4E675D31B21D1620054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */; };
|
||||
F4E675D41B21D1620054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */; };
|
||||
F4E675D51B21D1620054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C21B21D1440054530B /* Struct.pbobjc.m */; };
|
||||
F4E675D61B21D1620054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C51B21D1440054530B /* Type.pbobjc.m */; };
|
||||
F4E675D71B21D1620054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@ -99,12 +99,12 @@
|
||||
remoteGlobalIDString = 7461B52D0F94FAF800A0C422;
|
||||
remoteInfo = ProtocolBuffers;
|
||||
};
|
||||
8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */ = {
|
||||
F45BBC121B0CDBBA002D064D /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 8BD3981414BE4AE70081D629;
|
||||
remoteInfo = Compile_Protos;
|
||||
remoteGlobalIDString = F45BBC0E1B0CDB50002D064D;
|
||||
remoteInfo = "Compile Unittest Protos";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
@ -122,8 +122,8 @@
|
||||
7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBCodedOutputStream.m; sourceTree = "<group>"; };
|
||||
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionRegistry.h; sourceTree = "<group>"; };
|
||||
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionRegistry.m; sourceTree = "<group>"; };
|
||||
7461B4AE0F94F99000A0C422 /* GPBField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBField.h; sourceTree = "<group>"; };
|
||||
7461B4AF0F94F99000A0C422 /* GPBField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBField.m; sourceTree = "<group>"; };
|
||||
7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField.h; sourceTree = "<group>"; };
|
||||
7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownField.m; sourceTree = "<group>"; };
|
||||
7461B4BE0F94F99000A0C422 /* GPBMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBMessage.h; sourceTree = "<group>"; };
|
||||
7461B4BF0F94F99000A0C422 /* GPBMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBMessage.m; sourceTree = "<group>"; };
|
||||
7461B4CD0F94F99000A0C422 /* GPBProtocolBuffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers.h; sourceTree = "<group>"; };
|
||||
@ -142,10 +142,7 @@
|
||||
7461B6B80F94FDF900A0C422 /* GPBUnknownFieldSetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownFieldSetTest.m; sourceTree = "<group>"; };
|
||||
7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUtilitiesTests.m; sourceTree = "<group>"; };
|
||||
7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBWireFormatTests.m; sourceTree = "<group>"; };
|
||||
748F0CAF0FD70602000858A9 /* GPBExtensionField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField.h; sourceTree = "<group>"; };
|
||||
8B09AAF614B663A7007B4184 /* unittest_objc.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc.proto; sourceTree = "<group>"; };
|
||||
8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter1.txt; sourceTree = "<group>"; };
|
||||
8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_filter.proto; sourceTree = "<group>"; };
|
||||
8B210CCD159383D60032D72D /* golden_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_message; sourceTree = "<group>"; };
|
||||
8B210CCF159386920032D72D /* golden_packed_fields_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_packed_fields_message; sourceTree = "<group>"; };
|
||||
8B4248B21A8BD96D00BC1EC6 /* UnitTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UnitTests-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
@ -153,7 +150,6 @@
|
||||
8B4248B71A8BDD9600BC1EC6 /* protobuf */ = {isa = PBXFileReference; lastKnownFileType = text; name = protobuf; path = ../../Intermediates/ProtocolBuffers_iOS.build/DerivedSources/protos/google/protobuf; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8B4248DD1A929C7D00BC1EC6 /* Duration.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Duration.pbobjc.h; path = google/protobuf/Duration.pbobjc.h; sourceTree = "<group>"; };
|
||||
8B4248DE1A929C7D00BC1EC6 /* Duration.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Duration.pbobjc.m; path = google/protobuf/Duration.pbobjc.m; sourceTree = "<group>"; };
|
||||
8B4248DF1A929C7D00BC1EC6 /* Timestamp.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Timestamp.pbobjc.h; path = /google/protobuf/Timestamp.pbobjc.h; sourceTree = "<group>"; };
|
||||
8B4248E01A929C7D00BC1EC6 /* Timestamp.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Timestamp.pbobjc.m; path = google/protobuf/Timestamp.pbobjc.m; sourceTree = "<group>"; };
|
||||
8B4248E11A929C8900BC1EC6 /* GPBWellKnownTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBWellKnownTypes.h; sourceTree = "<group>"; };
|
||||
8B4248E21A929C8900BC1EC6 /* GPBWellKnownTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBWellKnownTypes.m; sourceTree = "<group>"; };
|
||||
@ -161,7 +157,6 @@
|
||||
8B4249481A92A02300BC1EC6 /* timestamp.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = timestamp.proto; path = ../src/google/protobuf/timestamp.proto; sourceTree = "<group>"; };
|
||||
8B4249491A92A0BA00BC1EC6 /* descriptor.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = descriptor.proto; path = ../src/google/protobuf/descriptor.proto; sourceTree = "<group>"; };
|
||||
8B42494A1A92A0BA00BC1EC6 /* duration.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = duration.proto; path = ../src/google/protobuf/duration.proto; sourceTree = "<group>"; };
|
||||
8B54585814DCC34E003D7338 /* Descriptor.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Descriptor.pbobjc.h; path = /google/protobuf/Descriptor.pbobjc.h; sourceTree = SOURCE_ROOT; };
|
||||
8B79657814992E3E002FFBFC /* GPBRootObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBRootObject.h; sourceTree = "<group>"; };
|
||||
8B79657914992E3E002FFBFC /* GPBRootObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBRootObject.m; sourceTree = "<group>"; };
|
||||
8B7E6A7414893DBA00F8884A /* unittest_custom_options.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_custom_options.proto; path = ../../src/google/protobuf/unittest_custom_options.proto; sourceTree = "<group>"; };
|
||||
@ -186,12 +181,11 @@
|
||||
8BA9364418DA5F4B0056FA2A /* GPBStringTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBStringTests.m; sourceTree = "<group>"; };
|
||||
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_lite.proto; path = ../../src/google/protobuf/unittest_lite.proto; sourceTree = "<group>"; };
|
||||
8BBEA4A6147C727100C4ADB7 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBFilteredMessageTests.m; sourceTree = "<group>"; };
|
||||
8BCF338814ED799900BC5317 /* GPBProtocolBuffers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GPBProtocolBuffers.m; sourceTree = "<group>"; };
|
||||
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_enormous_descriptor.proto; path = ../../src/google/protobuf/unittest_enormous_descriptor.proto; sourceTree = "<group>"; };
|
||||
8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnittestProtos.m; sourceTree = "<group>"; };
|
||||
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Descriptor.pbobjc.m; path = google/protobuf/Descriptor.pbobjc.m; sourceTree = SOURCE_ROOT; };
|
||||
8BEB5AE01498033E0078BF9D /* GPBTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBTypes.h; sourceTree = "<group>"; };
|
||||
8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRuntimeTypes.h; sourceTree = "<group>"; };
|
||||
F401DC341A8E5C6F00FCC765 /* GPBArrayTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBArrayTests.m; sourceTree = "<group>"; };
|
||||
F41C175C1833D3310064ED4D /* GPBPerfTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBPerfTests.m; sourceTree = "<group>"; };
|
||||
F4353D1E1AB88243005A6198 /* GPBDescriptorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBDescriptorTests.m; sourceTree = "<group>"; };
|
||||
@ -216,16 +210,41 @@
|
||||
F4487C7D1AAE06C500531423 /* GPBUtilities_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUtilities_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4487C801AAF62FC00531423 /* GPBMessageTests+Serialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Serialization.m"; sourceTree = "<group>"; };
|
||||
F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Merge.m"; sourceTree = "<group>"; };
|
||||
F44B25D81A729803005CCF68 /* Filter2.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter2.txt; sourceTree = "<group>"; };
|
||||
F451D3F61A8AAEA600B8A22C /* GPBProtocolBuffers_RuntimeSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers_RuntimeSupport.h; sourceTree = "<group>"; };
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionField.m; sourceTree = "<group>"; };
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionInternals.m; sourceTree = "<group>"; };
|
||||
F45E57C81AE6DC98000B7D99 /* text_format_map_unittest_data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = text_format_map_unittest_data.txt; sourceTree = "<group>"; };
|
||||
F4AC9E1C1A8BEB1000BD6E83 /* unittest_cycle.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_cycle.proto; sourceTree = "<group>"; };
|
||||
F4B6B8B01A9CC99500892426 /* GPBField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBField_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B01A9CC99500892426 /* GPBUnknownField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B11A9CCBBB00892426 /* GPBUnknownFieldSet_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownFieldSet_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B31A9CD1C600892426 /* GPBExtensionField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8B31A9CD1C600892426 /* GPBExtensionInternals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionInternals.h; sourceTree = "<group>"; };
|
||||
F4B6B8B51A9CD1C600892426 /* GPBRootObject_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRootObject_PackagePrivate.h; sourceTree = "<group>"; };
|
||||
F4B6B8BA1A9D343B00892426 /* unittest_name_mangling.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_name_mangling.proto; sourceTree = "<group>"; };
|
||||
F4CF31711B162EF500BD9B06 /* unittest_objc_startup.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc_startup.proto; sourceTree = "<group>"; };
|
||||
F4E675B61B21D1440054530B /* Any.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = google/protobuf/Any.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675B71B21D1440054530B /* Any.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Any.pbobjc.m; path = google/protobuf/Any.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675B81B21D1440054530B /* Api.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Api.pbobjc.h; path = google/protobuf/Api.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675B91B21D1440054530B /* Api.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Api.pbobjc.m; path = google/protobuf/Api.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675BA1B21D1440054530B /* Descriptor.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Descriptor.pbobjc.h; path = google/protobuf/Descriptor.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675BB1B21D1440054530B /* Empty.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Empty.pbobjc.h; path = google/protobuf/Empty.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675BC1B21D1440054530B /* Empty.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Empty.pbobjc.m; path = google/protobuf/Empty.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675BD1B21D1440054530B /* FieldMask.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FieldMask.pbobjc.h; path = google/protobuf/FieldMask.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FieldMask.pbobjc.m; path = google/protobuf/FieldMask.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675BF1B21D1440054530B /* SourceContext.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SourceContext.pbobjc.h; path = google/protobuf/SourceContext.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SourceContext.pbobjc.m; path = google/protobuf/SourceContext.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675C11B21D1440054530B /* Struct.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Struct.pbobjc.h; path = google/protobuf/Struct.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675C21B21D1440054530B /* Struct.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Struct.pbobjc.m; path = google/protobuf/Struct.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675C31B21D1440054530B /* Timestamp.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Timestamp.pbobjc.h; path = google/protobuf/Timestamp.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675C41B21D1440054530B /* Type.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Type.pbobjc.h; path = google/protobuf/Type.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675C51B21D1440054530B /* Type.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Type.pbobjc.m; path = google/protobuf/Type.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675C61B21D1440054530B /* Wrappers.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Wrappers.pbobjc.h; path = google/protobuf/Wrappers.pbobjc.h; sourceTree = "<group>"; };
|
||||
F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Wrappers.pbobjc.m; path = google/protobuf/Wrappers.pbobjc.m; sourceTree = "<group>"; };
|
||||
F4E675D81B21D1DE0054530B /* any.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = any.proto; path = ../src/google/protobuf/any.proto; sourceTree = "<group>"; };
|
||||
F4E675D91B21D1DE0054530B /* api.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = api.proto; path = ../src/google/protobuf/api.proto; sourceTree = "<group>"; };
|
||||
F4E675DA1B21D1DE0054530B /* empty.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = empty.proto; path = ../src/google/protobuf/empty.proto; sourceTree = "<group>"; };
|
||||
F4E675DB1B21D1DE0054530B /* field_mask.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = field_mask.proto; path = ../src/google/protobuf/field_mask.proto; sourceTree = "<group>"; };
|
||||
F4E675DC1B21D1DE0054530B /* source_context.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = source_context.proto; path = ../src/google/protobuf/source_context.proto; sourceTree = "<group>"; };
|
||||
F4E675DD1B21D1DE0054530B /* struct.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = struct.proto; path = ../src/google/protobuf/struct.proto; sourceTree = "<group>"; };
|
||||
F4E675DE1B21D1DE0054530B /* type.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.proto; path = ../src/google/protobuf/type.proto; sourceTree = "<group>"; };
|
||||
F4E675DF1B21D1DE0054530B /* wrappers.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = wrappers.proto; path = ../src/google/protobuf/wrappers.proto; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -309,15 +328,39 @@
|
||||
29B97315FDCFA39411CA2CEA /* Generated */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B4249491A92A0BA00BC1EC6 /* descriptor.proto */,
|
||||
F4E675B61B21D1440054530B /* Any.pbobjc.h */,
|
||||
F4E675B71B21D1440054530B /* Any.pbobjc.m */,
|
||||
F4E675D81B21D1DE0054530B /* any.proto */,
|
||||
F4E675B81B21D1440054530B /* Api.pbobjc.h */,
|
||||
F4E675B91B21D1440054530B /* Api.pbobjc.m */,
|
||||
F4E675D91B21D1DE0054530B /* api.proto */,
|
||||
F4E675BA1B21D1440054530B /* Descriptor.pbobjc.h */,
|
||||
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */,
|
||||
8B54585814DCC34E003D7338 /* Descriptor.pbobjc.h */,
|
||||
8B42494A1A92A0BA00BC1EC6 /* duration.proto */,
|
||||
8B4249491A92A0BA00BC1EC6 /* descriptor.proto */,
|
||||
8B4248DD1A929C7D00BC1EC6 /* Duration.pbobjc.h */,
|
||||
8B4248DE1A929C7D00BC1EC6 /* Duration.pbobjc.m */,
|
||||
8B4249481A92A02300BC1EC6 /* timestamp.proto */,
|
||||
8B4248DF1A929C7D00BC1EC6 /* Timestamp.pbobjc.h */,
|
||||
8B42494A1A92A0BA00BC1EC6 /* duration.proto */,
|
||||
F4E675BB1B21D1440054530B /* Empty.pbobjc.h */,
|
||||
F4E675BC1B21D1440054530B /* Empty.pbobjc.m */,
|
||||
F4E675DA1B21D1DE0054530B /* empty.proto */,
|
||||
F4E675DB1B21D1DE0054530B /* field_mask.proto */,
|
||||
F4E675BD1B21D1440054530B /* FieldMask.pbobjc.h */,
|
||||
F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */,
|
||||
F4E675DC1B21D1DE0054530B /* source_context.proto */,
|
||||
F4E675BF1B21D1440054530B /* SourceContext.pbobjc.h */,
|
||||
F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */,
|
||||
F4E675C11B21D1440054530B /* Struct.pbobjc.h */,
|
||||
F4E675C21B21D1440054530B /* Struct.pbobjc.m */,
|
||||
F4E675DD1B21D1DE0054530B /* struct.proto */,
|
||||
F4E675C31B21D1440054530B /* Timestamp.pbobjc.h */,
|
||||
8B4248E01A929C7D00BC1EC6 /* Timestamp.pbobjc.m */,
|
||||
8B4249481A92A02300BC1EC6 /* timestamp.proto */,
|
||||
F4E675C41B21D1440054530B /* Type.pbobjc.h */,
|
||||
F4E675C51B21D1440054530B /* Type.pbobjc.m */,
|
||||
F4E675DE1B21D1DE0054530B /* type.proto */,
|
||||
F4E675C61B21D1440054530B /* Wrappers.pbobjc.h */,
|
||||
F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */,
|
||||
F4E675DF1B21D1DE0054530B /* wrappers.proto */,
|
||||
);
|
||||
name = Generated;
|
||||
sourceTree = "<group>";
|
||||
@ -335,9 +378,8 @@
|
||||
7461B3C50F94F84100A0C422 /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F4B6B8B31A9CD1C600892426 /* GPBExtensionField_PackagePrivate.h */,
|
||||
748F0CAF0FD70602000858A9 /* GPBExtensionField.h */,
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionField.m */,
|
||||
F4B6B8B31A9CD1C600892426 /* GPBExtensionInternals.h */,
|
||||
F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */,
|
||||
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */,
|
||||
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */,
|
||||
F4B6B8B51A9CD1C600892426 /* GPBRootObject_PackagePrivate.h */,
|
||||
@ -350,9 +392,9 @@
|
||||
7461B4850F94F96600A0C422 /* Fields */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F4B6B8B01A9CC99500892426 /* GPBField_PackagePrivate.h */,
|
||||
7461B4AE0F94F99000A0C422 /* GPBField.h */,
|
||||
7461B4AF0F94F99000A0C422 /* GPBField.m */,
|
||||
F4B6B8B01A9CC99500892426 /* GPBUnknownField_PackagePrivate.h */,
|
||||
7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */,
|
||||
7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */,
|
||||
F4B6B8B11A9CCBBB00892426 /* GPBUnknownFieldSet_PackagePrivate.h */,
|
||||
7461B4E10F94F99000A0C422 /* GPBUnknownFieldSet.h */,
|
||||
7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */,
|
||||
@ -392,8 +434,6 @@
|
||||
children = (
|
||||
8B9A5EA91831993600A9D33B /* iOSTestHarness */,
|
||||
8B4248B71A8BDD9600BC1EC6 /* protobuf */,
|
||||
8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */,
|
||||
F44B25D81A729803005CCF68 /* Filter2.txt */,
|
||||
8B210CCD159383D60032D72D /* golden_message */,
|
||||
8B210CCF159386920032D72D /* golden_packed_fields_message */,
|
||||
8B8B615C17DF7056002EE618 /* GPBARCUnittestProtos.m */,
|
||||
@ -409,7 +449,6 @@
|
||||
F4353D3E1AC06F31005A6198 /* GPBDictionaryTests+String.m */,
|
||||
F4353D3F1AC06F31005A6198 /* GPBDictionaryTests+UInt32.m */,
|
||||
F4353D401AC06F31005A6198 /* GPBDictionaryTests+UInt64.m */,
|
||||
8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */,
|
||||
7461B6A30F94FDF800A0C422 /* GPBMessageTests.m */,
|
||||
F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */,
|
||||
F4487C761AADF84900531423 /* GPBMessageTests+Runtime.m */,
|
||||
@ -431,13 +470,12 @@
|
||||
8B7E6A7514893DBA00F8884A /* unittest_embed_optimize_for.proto */,
|
||||
8B7E6A7614893DBA00F8884A /* unittest_empty.proto */,
|
||||
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */,
|
||||
8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */,
|
||||
8B7E6A7814893DBB00F8884A /* unittest_import.proto */,
|
||||
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */,
|
||||
8B7E6A7B14893DBC00F8884A /* unittest_mset.proto */,
|
||||
F4B6B8BA1A9D343B00892426 /* unittest_name_mangling.proto */,
|
||||
8B7E6A7C14893DBC00F8884A /* unittest_no_generic_services.proto */,
|
||||
8B09AAF614B663A7007B4184 /* unittest_objc.proto */,
|
||||
F4CF31711B162EF500BD9B06 /* unittest_objc_startup.proto */,
|
||||
8B7E6A7D14893DBC00F8884A /* unittest_optimize_for.proto */,
|
||||
F4487C7A1AADFB5500531423 /* unittest_runtime_proto2.proto */,
|
||||
F4487C7B1AADFB5500531423 /* unittest_runtime_proto3.proto */,
|
||||
@ -478,7 +516,7 @@
|
||||
F43725921AC9835D004DCAFB /* GPBDictionary_PackagePrivate.h */,
|
||||
F4353D241ABB156F005A6198 /* GPBDictionary.h */,
|
||||
F4353D251ABB156F005A6198 /* GPBDictionary.m */,
|
||||
8BEB5AE01498033E0078BF9D /* GPBTypes.h */,
|
||||
8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */,
|
||||
F4487C7D1AAE06C500531423 /* GPBUtilities_PackagePrivate.h */,
|
||||
7461B4E50F94F99000A0C422 /* GPBUtilities.h */,
|
||||
7461B4E60F94F99000A0C422 /* GPBUtilities.m */,
|
||||
@ -507,6 +545,23 @@
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXLegacyTarget section */
|
||||
F45BBC0E1B0CDB50002D064D /* Compile Unittest Protos */ = {
|
||||
isa = PBXLegacyTarget;
|
||||
buildArgumentsString = "$(ACTION)";
|
||||
buildConfigurationList = F45BBC111B0CDB50002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */;
|
||||
buildPhases = (
|
||||
);
|
||||
buildToolPath = DevTools/compile_testing_protos.sh;
|
||||
buildWorkingDirectory = "";
|
||||
dependencies = (
|
||||
);
|
||||
name = "Compile Unittest Protos";
|
||||
passBuildSettingsInEnvironment = 1;
|
||||
productName = "Compile Unittest Protos";
|
||||
};
|
||||
/* End PBXLegacyTarget section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */ = {
|
||||
isa = PBXNativeTarget;
|
||||
@ -555,7 +610,7 @@
|
||||
);
|
||||
dependencies = (
|
||||
8BBEA4BD147C729A00C4ADB7 /* PBXTargetDependency */,
|
||||
8BD3982114BE59EB0081D629 /* PBXTargetDependency */,
|
||||
F45BBC131B0CDBBA002D064D /* PBXTargetDependency */,
|
||||
8B9A5ED11831994600A9D33B /* PBXTargetDependency */,
|
||||
);
|
||||
name = UnitTests;
|
||||
@ -587,11 +642,14 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastTestingUpgradeCheck = 0600;
|
||||
LastUpgradeCheck = 0610;
|
||||
LastUpgradeCheck = 0630;
|
||||
TargetAttributes = {
|
||||
8BBEA4A5147C727100C4ADB7 = {
|
||||
TestTargetID = 8B9A5EA41831993600A9D33B;
|
||||
};
|
||||
F45BBC0E1B0CDB50002D064D = {
|
||||
CreatedOnToolsVersion = 6.3.2;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_iOS" */;
|
||||
@ -607,9 +665,9 @@
|
||||
targets = (
|
||||
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */,
|
||||
8BBEA4A5147C727100C4ADB7 /* UnitTests */,
|
||||
8BD3981414BE4AE70081D629 /* Compile_Protos */,
|
||||
8B9A5EA41831993600A9D33B /* iOSTestHarness */,
|
||||
F4487C551A9F8F8100531423 /* TestSingleSourceBuild */,
|
||||
F45BBC0E1B0CDB50002D064D /* Compile Unittest Protos */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@ -639,51 +697,6 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
8BD3981814BE4AF30081D629 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_custom_options.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_embed_optimize_for.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_empty.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_enormous_descriptor.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import_lite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_lite_imports_nonlite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_lite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_mset.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_no_generic_services.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest.proto",
|
||||
"$(SRCROOT)/Tests/unittest_objc.proto",
|
||||
"$(SRCROOT)/../src/.libs/libprotoc.10.dylib",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import_public_lite.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_import_public.proto",
|
||||
"$(SRCROOT)/Tests/unittest_filter.proto",
|
||||
"$(SRCROOT)/../src/.libs/libprotobuf.10.dylib",
|
||||
"$(SRCROOT)/../src/.libs/protoc",
|
||||
"$(SRCROOT)/Tests/Filter1.txt",
|
||||
"$(SRCROOT)/Tests/Filter2.txt",
|
||||
"$(SRCROOT)/Tests/unittest_cycle.proto",
|
||||
"$(SRCROOT)/Tests/unittest_name_mangling.proto",
|
||||
"$(SRCROOT)/Tests/unittest_runtime_proto2.proto",
|
||||
"$(SRCROOT)/Tests/unittest_runtime_proto3.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_drop_unknown_fields.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/unittest_preserve_unknown_enum.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/map_lite_unittest.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/map_proto2_unittest.proto",
|
||||
"$(SRCROOT)/../src/google/protobuf/map_unittest.proto",
|
||||
);
|
||||
outputPaths = (
|
||||
"$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.h",
|
||||
"$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.m",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/bash;
|
||||
shellScript = "set -eu\nmkdir -p \"${PROJECT_DERIVED_FILE_DIR}/protos\"\nexport PATH=\"${PATH}:.\"\ncd \"${SRCROOT}\"/../src\n\nPROTOC=./protoc\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_custom_options.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_enormous_descriptor.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_embed_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_empty.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_mset.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_no_generic_services.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_drop_unknown_fields.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_preserve_unknown_enum.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_lite_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_proto2_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_unittest.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_objc.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_cycle.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_name_mangling.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto2.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto3.proto\n\n# Use the filter\nexport GPB_OBJC_CLASS_WHITELIST_PATHS=\"${SRCROOT}/Tests/Filter1.txt;${SRCROOT}/Tests/Filter2.txt\"\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_filter.proto\n\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
F4B62A791AF91F7500AFCEDC /* Script: Check Runtime Stamps */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -708,19 +721,27 @@
|
||||
files = (
|
||||
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */,
|
||||
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */,
|
||||
F4E675D21B21D1620054530B /* Empty.pbobjc.m in Sources */,
|
||||
F4487C731A9F906200531423 /* GPBArray.m in Sources */,
|
||||
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */,
|
||||
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */,
|
||||
7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */,
|
||||
F4E675D31B21D1620054530B /* FieldMask.pbobjc.m in Sources */,
|
||||
7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */,
|
||||
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */,
|
||||
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */,
|
||||
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */,
|
||||
7461B5640F94FB4E00A0C422 /* GPBWireFormat.m in Sources */,
|
||||
F4E675D11B21D1620054530B /* Api.pbobjc.m in Sources */,
|
||||
F4E675D41B21D1620054530B /* SourceContext.pbobjc.m in Sources */,
|
||||
F4353D271ABB156F005A6198 /* GPBDictionary.m in Sources */,
|
||||
8B79657B14992E3F002FFBFC /* GPBRootObject.m in Sources */,
|
||||
8B96157414C8C38C00A2AC0B /* GPBDescriptor.m in Sources */,
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */,
|
||||
F4E675D01B21D1620054530B /* Any.pbobjc.m in Sources */,
|
||||
F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */,
|
||||
8B4248E41A929C8900BC1EC6 /* GPBWellKnownTypes.m in Sources */,
|
||||
F4E675D61B21D1620054530B /* Type.pbobjc.m in Sources */,
|
||||
F4E675D51B21D1620054530B /* Struct.pbobjc.m in Sources */,
|
||||
F4E675D71B21D1620054530B /* Wrappers.pbobjc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -741,12 +762,18 @@
|
||||
F4353D441AC06F31005A6198 /* GPBDictionaryTests+Int64.m in Sources */,
|
||||
F4353D471AC06F31005A6198 /* GPBDictionaryTests+UInt64.m in Sources */,
|
||||
8BBEA4AA147C727D00C4ADB7 /* GPBCodedOuputStreamTests.m in Sources */,
|
||||
F4E675CC1B21D1610054530B /* SourceContext.pbobjc.m in Sources */,
|
||||
8BBEA4AC147C727D00C4ADB7 /* GPBMessageTests.m in Sources */,
|
||||
F4487C811AAF62FC00531423 /* GPBMessageTests+Serialization.m in Sources */,
|
||||
8B4248E61A929C9900BC1EC6 /* GPBWellKnownTypesTest.m in Sources */,
|
||||
F4E675CA1B21D1610054530B /* Empty.pbobjc.m in Sources */,
|
||||
F4E675CE1B21D1610054530B /* Type.pbobjc.m in Sources */,
|
||||
F4353D1F1AB88243005A6198 /* GPBDescriptorTests.m in Sources */,
|
||||
F4E675CF1B21D1610054530B /* Wrappers.pbobjc.m in Sources */,
|
||||
F4E675C81B21D1610054530B /* Any.pbobjc.m in Sources */,
|
||||
8B4248B41A8BD96E00BC1EC6 /* GPBSwiftTests.swift in Sources */,
|
||||
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */,
|
||||
F4E675CD1B21D1610054530B /* Struct.pbobjc.m in Sources */,
|
||||
F4487C771AADF84900531423 /* GPBMessageTests+Runtime.m in Sources */,
|
||||
F4353D431AC06F31005A6198 /* GPBDictionaryTests+Int32.m in Sources */,
|
||||
8BBEA4B0147C727D00C4ADB7 /* GPBTestUtilities.m in Sources */,
|
||||
@ -761,9 +788,10 @@
|
||||
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */,
|
||||
8B79657D14992E3F002FFBFC /* GPBRootObject.m in Sources */,
|
||||
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */,
|
||||
F4E675CB1B21D1610054530B /* FieldMask.pbobjc.m in Sources */,
|
||||
8B96157514CA019D00A2AC0B /* Descriptor.pbobjc.m in Sources */,
|
||||
8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */,
|
||||
8B8B615D17DF7056002EE618 /* GPBARCUnittestProtos.m in Sources */,
|
||||
F4E675C91B21D1610054530B /* Api.pbobjc.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -771,7 +799,6 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
F4487C5B1A9F8F8100531423 /* Descriptor.pbobjc.m in Sources */,
|
||||
F4487C6F1A9F8FFF00531423 /* GPBProtocolBuffers.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -789,10 +816,10 @@
|
||||
target = 7461B52D0F94FAF800A0C422 /* ProtocolBuffers */;
|
||||
targetProxy = 8BBEA4BC147C729A00C4ADB7 /* PBXContainerItemProxy */;
|
||||
};
|
||||
8BD3982114BE59EB0081D629 /* PBXTargetDependency */ = {
|
||||
F45BBC131B0CDBBA002D064D /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 8BD3981414BE4AE70081D629 /* Compile_Protos */;
|
||||
targetProxy = 8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */;
|
||||
target = F45BBC0E1B0CDB50002D064D /* Compile Unittest Protos */;
|
||||
targetProxy = F45BBC121B0CDBBA002D064D /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
@ -909,20 +936,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
8BD3981514BE4AE70081D629 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
8BD3981614BE4AE70081D629 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
C01FCF4F08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
@ -1029,6 +1042,18 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
F45BBC0F1B0CDB50002D064D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
F45BBC101B0CDB50002D064D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@ -1059,15 +1084,6 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
8BD3981514BE4AE70081D629 /* Debug */,
|
||||
8BD3981614BE4AE70081D629 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_iOS" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
@ -1086,6 +1102,15 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
F45BBC111B0CDB50002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
F45BBC0F1B0CDB50002D064D /* Debug */,
|
||||
F45BBC101B0CDB50002D064D /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0610"
|
||||
LastUpgradeVersion = "0630"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@ -38,9 +38,6 @@
|
||||
ReferencedContainer = "container:ProtocolBuffers_iOS.xcodeproj">
|
||||
</BuildableReference>
|
||||
<SkippedTests>
|
||||
<Test
|
||||
Identifier = "ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "CodedInputStreamTests">
|
||||
</Test>
|
||||
@ -51,16 +48,223 @@
|
||||
Identifier = "ConcurrencyTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "FilteredMessageTests">
|
||||
Identifier = "DescriptorTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolBoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolDoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolFloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolUInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBoolUInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBBridgeTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBDoubleArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBEnumArrayCustomTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBEnumArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBFloatArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt32UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBInt64UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringBoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringDoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringEnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringEnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringFloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringUInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBStringUInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBTestCase">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GeneratedMessageTests">
|
||||
Identifier = "GPBUInt32ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt32UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64ArrayTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64BoolDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64DoubleDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64EnumDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64EnumDictionaryUnknownEnumTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64FloatDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64Int32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64Int64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64ObjectDictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64UInt32DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "GPBUInt64UInt64DictionaryTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageMergeTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageRuntimeTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageSerializationTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "MessageTests">
|
||||
@ -71,6 +275,9 @@
|
||||
<Test
|
||||
Identifier = "UtilitiesTests">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "WellKnownTypesTest">
|
||||
</Test>
|
||||
<Test
|
||||
Identifier = "WireFormatTests">
|
||||
</Test>
|
||||
@ -96,7 +303,8 @@
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8B9A5EA41831993600A9D33B"
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0610"
|
||||
LastUpgradeVersion = "0630"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -21,15 +21,15 @@ Installation
|
||||
------------
|
||||
|
||||
The full distribution pulled from github includes the sources for both the
|
||||
compiler (protoc) and the runtime (this directory). To build the compiler
|
||||
compiler (protoc) and the runtime (this directory). To build the compiler
|
||||
and run the runtime tests, you can use:
|
||||
|
||||
$ objectivec/DevTools/full_mac_build.sh
|
||||
|
||||
This will generate the `src/protoc` binary.
|
||||
|
||||
Usage
|
||||
-----
|
||||
Building
|
||||
--------
|
||||
|
||||
There are two ways to include the Runtime sources in your project:
|
||||
|
||||
@ -47,6 +47,80 @@ If the target is using ARC, remember to turn off ARC (`-fno-objc-arc`) for the
|
||||
The files generated by `protoc` for the `*.proto` files (`\*.pbobjc.h' and
|
||||
`\*.pbobjc.m`) are then also added to the target.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The objects generated for messages should work like any other Objective C
|
||||
object. They are mutable objects, but if you don't change them, they are safe
|
||||
to share between threads (similar to passing an NSMutableDictionary between
|
||||
threads/queues; as long as no one mutates it, things are fine).
|
||||
|
||||
There are a few behaviors worth calling out:
|
||||
|
||||
A property that is type NSString\* will never return nil. If the value is
|
||||
unset, it will return an empty string (@""). This is inpart to align things
|
||||
with the Protocol Buffers spec which says the default for strings is an empty
|
||||
string, but also so you can always safely pass them to isEqual:/compare:, etc.
|
||||
and have deterministic results.
|
||||
|
||||
A property that is type NSData\* also won't return nil, it will return an empty
|
||||
data ([NSData data]). The reasoning is the same as for NSString not returning
|
||||
nil.
|
||||
|
||||
A property that is another GPBMessage class also will not return nil. If the
|
||||
field wasn't already set, you will get a instance of the correct class. This
|
||||
instance will be a temporary instance unless you mutate it, at which point it
|
||||
will be attached to its parent object. We call this pattern *autocreators*.
|
||||
Similar to NSString and NSData properties it makes things a little safer when
|
||||
using them with isEqual:/etc.; but more importantly, this allows you to write
|
||||
code that uses Objective C's property dot notation to walk into nested objects
|
||||
and access and/or assign things without having to check that they are not nil
|
||||
and create them each step along the way. You can write this:
|
||||
|
||||
```
|
||||
- (void)updateRecord:(MyMessage *)msg {
|
||||
...
|
||||
// Note: You don't have to check subMessage and otherMessage for nil and
|
||||
// alloc/init/assign them back along the way.
|
||||
msg.subMessage.otherMessage.lastName = @"Smith";
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
If you want to check if a GPBMessage property is present, there is always as
|
||||
`has\[NAME\]` property to go with the main property to check if it is set.
|
||||
|
||||
A property that is of an Array or Dictionary type also provides *autocreator*
|
||||
behavior and will never return nil. This provides all the same benefits you
|
||||
see for the message properties. Again, you can write:
|
||||
|
||||
```
|
||||
- (void)updateRecord:(MyMessage *)msg {
|
||||
...
|
||||
// Note: Just like above, you don't have to check subMessage and otherMessage
|
||||
// for nil and alloc/init/assign them back along the way. You also don't have
|
||||
// to create the siblingsArray, you can safely just append to it.
|
||||
[msg.subMessage.otherMessage.siblingsArray addObject:@"Pat"];
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
If you are inspecting a message you got from some other place (server, disk,
|
||||
etc), you may want to check if the Array or Dictionary has entries without
|
||||
causing it to be created for you. For this, there is always a `\[NAME\]_Count`
|
||||
property also provided that can return zero or the real count, but won't trigger
|
||||
the creation.
|
||||
|
||||
For primitive type fields (ints, floats, bools, enum) in messages defined in a
|
||||
`.proto` file that use *proto2* syntax there are conceptual differences between
|
||||
having an *explicit* and *default* value. You can always get the value of the
|
||||
property. In the case that it hasn't been set you will get the default. In
|
||||
cases where you need to know whether it was set explicitly or you are just
|
||||
getting the default, you can use the `has\[NAME\]` property. If the value has
|
||||
been set, and you want to clear it, you can set the `has\[NAME\]` to `NO`.
|
||||
*proto3* syntax messages do away with this concept, thus the default values are
|
||||
never included when the message is encoded.
|
||||
|
||||
The Objective C classes/enums can be used from Swift code.
|
||||
|
||||
Objective C Generator Options
|
||||
@ -55,18 +129,19 @@ Objective C Generator Options
|
||||
**objc_class_prefix=\<prefix\>** (no default)
|
||||
|
||||
Since Objective C uses a global namespace for all of its classes, there can
|
||||
be collisions. This option provides a prefix that will be added to the Enums
|
||||
and Objects (for messages) generated from the proto. Convention is to base
|
||||
be collisions. This option provides a prefix that will be added to the Enums
|
||||
and Objects (for messages) generated from the proto. Convention is to base
|
||||
the prefix on the package the proto is in.
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
Please make updates to the tests along with changes. If just changing the
|
||||
runtime, the Xcode projects can be used to build and run tests. If change also
|
||||
require changes to the generated code, `objectivec/DevTools/full_mac_build.sh`
|
||||
can be used to easily rebuild and test changes. Passing `-h` to the script will
|
||||
show the addition options that could be useful.
|
||||
runtime, the Xcode projects can be used to build and run tests. If your change
|
||||
also requires changes to the generated code,
|
||||
`objectivec/DevTools/full_mac_build.sh` can be used to easily rebuild and test
|
||||
changes. Passing `-h` to the script will show the addition options that could
|
||||
be useful.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
@ -1,35 +0,0 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2014 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
// Test the filter system for the ObjC Protocol Buffer Compiler to test
|
||||
// multiple filter support.
|
||||
|
||||
Other
|
@ -41,16 +41,15 @@
|
||||
#import "google/protobuf/UnittestEmbedOptimizeFor.pbobjc.h"
|
||||
#import "google/protobuf/UnittestEmpty.pbobjc.h"
|
||||
#import "google/protobuf/UnittestEnormousDescriptor.pbobjc.h"
|
||||
#import "google/protobuf/UnittestFilter.pbobjc.h"
|
||||
#import "google/protobuf/UnittestImport.pbobjc.h"
|
||||
#import "google/protobuf/UnittestImportLite.pbobjc.h"
|
||||
#import "google/protobuf/UnittestImportPublic.pbobjc.h"
|
||||
#import "google/protobuf/UnittestImportPublicLite.pbobjc.h"
|
||||
#import "google/protobuf/UnittestLite.pbobjc.h"
|
||||
#import "google/protobuf/UnittestMset.pbobjc.h"
|
||||
#import "google/protobuf/UnittestNameMangling.pbobjc.h"
|
||||
#import "google/protobuf/UnittestNoGenericServices.pbobjc.h"
|
||||
#import "google/protobuf/UnittestObjc.pbobjc.h"
|
||||
#import "google/protobuf/UnittestObjcStartup.pbobjc.h"
|
||||
#import "google/protobuf/UnittestOptimizeFor.pbobjc.h"
|
||||
#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.h"
|
||||
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
|
||||
|
@ -260,7 +260,7 @@
|
||||
[GPBCodedInputStream streamWithData:[NSMutableData dataWithData:data]];
|
||||
XCTAssertEqual(tag, [input readTag]);
|
||||
|
||||
XCTAssertThrows([input readData]);
|
||||
XCTAssertThrows([input readBytes]);
|
||||
}
|
||||
|
||||
// Verifies fix for b/10315336.
|
||||
|
@ -196,7 +196,8 @@ static const int kNumMessages = 100;
|
||||
NSArray *threads = [self createThreadsWithSelector:sel object:messages];
|
||||
[self startThreads:threads];
|
||||
[self joinThreads:threads];
|
||||
GPBExtensionField *extension = [UnittestRoot optionalForeignMessageExtension];
|
||||
GPBExtensionDescriptor *extension =
|
||||
[UnittestRoot optionalForeignMessageExtension];
|
||||
for (TestAllExtensions *message in messages) {
|
||||
XCTAssertFalse([message hasExtension:extension]);
|
||||
}
|
||||
|
@ -1,98 +0,0 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2013 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Tests our filter system for ObjC.
|
||||
// The proto being filtered is unittest_filter.proto.
|
||||
// The filter file is Filter.txt.
|
||||
|
||||
#import "GPBTestUtilities.h"
|
||||
|
||||
#import "google/protobuf/UnittestFilter.pbobjc.h"
|
||||
|
||||
// If we get an error about this already being defined, it is most likely
|
||||
// because of an error in protoc which is supposed to be filtering
|
||||
// the Remove message.
|
||||
enum { Other_FieldNumber_B = 0 };
|
||||
|
||||
@interface FilteredMessageTests : GPBTestCase
|
||||
@end
|
||||
|
||||
@implementation FilteredMessageTests
|
||||
|
||||
- (void)testEnumFiltering {
|
||||
// If compile fails here it is because protoc did not generate KeepEnum.
|
||||
XCTAssertTrue(KeepEnum_IsValidValue(KeepEnum_KeepValue));
|
||||
XCTAssertNotNil(KeepEnum_EnumDescriptor());
|
||||
|
||||
// If compile fails here it is because protoc did not generate
|
||||
// KeepEnumInsideEnum and is probably due to nested enum handling being
|
||||
// broken.
|
||||
XCTAssertTrue(RemoveEnumMessage_KeepEnumInside_IsValidValue(
|
||||
RemoveEnumMessage_KeepEnumInside_KeepValue));
|
||||
XCTAssertNotNil(RemoveEnumMessage_KeepEnumInside_EnumDescriptor());
|
||||
}
|
||||
|
||||
- (void)testMessageFiltering {
|
||||
// Messages that should be generated.
|
||||
XCTAssertNil([UnittestFilterRoot extensionRegistry]);
|
||||
XCTAssertNotNil([[[Keep alloc] init] autorelease]);
|
||||
XCTAssertNotNil([[[Other alloc] init] autorelease]);
|
||||
XCTAssertNotNil([[[RemoveJustKidding alloc] init] autorelease]);
|
||||
XCTAssertNotNil(
|
||||
[[[RemoveEnumMessage_KeepNestedInside alloc] init] autorelease]);
|
||||
|
||||
// Messages that should not be generated
|
||||
XCTAssertNil(NSClassFromString(@"Remove"));
|
||||
XCTAssertNil(NSClassFromString(@"RemoveEnumMessage"));
|
||||
XCTAssertNil(NSClassFromString(@"RemoveEnumMessage_RemoveNestedInside"));
|
||||
|
||||
// These should all fail compile if protoc is bad.
|
||||
XCTAssertTrue([Other instancesRespondToSelector:@selector(hasA)]);
|
||||
XCTAssertTrue([Other instancesRespondToSelector:@selector(setHasA:)]);
|
||||
XCTAssertTrue([Other instancesRespondToSelector:@selector(a)]);
|
||||
XCTAssertTrue([Other instancesRespondToSelector:@selector(setA:)]);
|
||||
|
||||
// These the compiler should not generate.
|
||||
XCTAssertFalse(
|
||||
[Other instancesRespondToSelector:NSSelectorFromString(@"hasB")]);
|
||||
XCTAssertFalse(
|
||||
[Other instancesRespondToSelector:NSSelectorFromString(@"setHasB:")]);
|
||||
XCTAssertFalse([Other instancesRespondToSelector:NSSelectorFromString(@"b")]);
|
||||
XCTAssertFalse(
|
||||
[Other instancesRespondToSelector:NSSelectorFromString(@"setB:")]);
|
||||
|
||||
// This should fail if protoc filters it.
|
||||
XCTAssertEqual(Other_FieldNumber_A, 1);
|
||||
|
||||
// Make sure the definition at the top of the file is providing the value.
|
||||
XCTAssertEqual(Other_FieldNumber_B, 0);
|
||||
}
|
||||
|
||||
@end
|
@ -36,6 +36,7 @@
|
||||
|
||||
#import "google/protobuf/MapUnittest.pbobjc.h"
|
||||
#import "google/protobuf/Unittest.pbobjc.h"
|
||||
#import "google/protobuf/UnittestObjcStartup.pbobjc.h"
|
||||
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
|
||||
#import "google/protobuf/UnittestRuntimeProto3.pbobjc.h"
|
||||
|
||||
@ -47,6 +48,14 @@
|
||||
// TODO(thomasvl): Pull tests over from GPBMessageTests that are runtime
|
||||
// specific.
|
||||
|
||||
- (void)testStartupOrdering {
|
||||
// Just have to create a message. Nothing else uses the classes from
|
||||
// this file, so the first selector invoked on the class will initialize
|
||||
// it, which also initializes the root.
|
||||
TestObjCStartupMessage *message = [TestObjCStartupMessage message];
|
||||
XCTAssertNotNil(message);
|
||||
}
|
||||
|
||||
- (void)testProto2HasMethodSupport {
|
||||
NSArray *names = @[
|
||||
@"Int32",
|
||||
@ -70,8 +79,8 @@
|
||||
];
|
||||
|
||||
// Proto2 gets:
|
||||
// - has* on all non repeated fields.
|
||||
// - setHas* on all non repeated fields.
|
||||
|
||||
// Single fields - has*/setHas* is valid.
|
||||
|
||||
for (NSString *name in names) {
|
||||
// build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32:
|
||||
@ -85,21 +94,28 @@
|
||||
name);
|
||||
}
|
||||
|
||||
// Repeated - no has/setHas
|
||||
// Repeated fields
|
||||
// - no has*/setHas*
|
||||
// - *Count
|
||||
|
||||
for (NSString *name in names) {
|
||||
// build the selector, i.e. - hasRepeatedInt32/setHasRepeatedInt32:
|
||||
// build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array:
|
||||
SEL hasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"hasRepeated%@", name]);
|
||||
[NSString stringWithFormat:@"hasRepeated%@Array", name]);
|
||||
SEL setHasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"setHasRepeated%@:", name]);
|
||||
[NSString stringWithFormat:@"setHasRepeated%@Array:", name]);
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
|
||||
name);
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
|
||||
@"field: %@", name);
|
||||
// build the selector, i.e. - repeatedInt32Array_Count
|
||||
SEL countSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"repeated%@Array_Count", name]);
|
||||
XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
|
||||
name);
|
||||
}
|
||||
|
||||
// Oneofs - no has/setHas
|
||||
// OneOf fields - no has*/setHas*
|
||||
|
||||
for (NSString *name in names) {
|
||||
// build the selector, i.e. - hasOneofInt32/setHasOneofInt32:
|
||||
@ -112,6 +128,50 @@
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
|
||||
@"field: %@", name);
|
||||
}
|
||||
|
||||
// map<> fields
|
||||
// - no has*/setHas*
|
||||
// - *Count
|
||||
|
||||
NSArray *mapNames = @[
|
||||
@"Int32Int32",
|
||||
@"Int64Int64",
|
||||
@"Uint32Uint32",
|
||||
@"Uint64Uint64",
|
||||
@"Sint32Sint32",
|
||||
@"Sint64Sint64",
|
||||
@"Fixed32Fixed32",
|
||||
@"Fixed64Fixed64",
|
||||
@"Sfixed32Sfixed32",
|
||||
@"Sfixed64Sfixed64",
|
||||
@"Int32Float",
|
||||
@"Int32Double",
|
||||
@"BoolBool",
|
||||
@"StringString",
|
||||
@"StringBytes",
|
||||
@"StringMessage",
|
||||
@"Int32Bytes",
|
||||
@"Int32Enum",
|
||||
@"Int32Message",
|
||||
];
|
||||
|
||||
for (NSString *name in mapNames) {
|
||||
// build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32:
|
||||
SEL hasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"hasMap%@", name]);
|
||||
SEL setHasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"setHasMap%@:", name]);
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
|
||||
name);
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
|
||||
@"field: %@", name);
|
||||
// build the selector, i.e. - mapInt32Int32Count
|
||||
SEL countSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"map%@_Count", name]);
|
||||
XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
|
||||
name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (void)testProto3HasMethodSupport {
|
||||
@ -136,10 +196,10 @@
|
||||
];
|
||||
|
||||
// Proto3 gets:
|
||||
// - has* on non repeated message fields.
|
||||
// - setHas* on all non repeated message fields.
|
||||
|
||||
// Singlular
|
||||
// Single fields
|
||||
// - has*/setHas* invalid for primative types.
|
||||
// - has*/setHas* valid for Message.
|
||||
|
||||
for (NSString *name in names) {
|
||||
// build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32:
|
||||
@ -147,7 +207,7 @@
|
||||
[NSString stringWithFormat:@"hasOptional%@", name]);
|
||||
SEL setHasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"setHasOptional%@:", name]);
|
||||
if ([name isEqual:@"Group"] || [name isEqual:@"Message"]) {
|
||||
if ([name isEqual:@"Message"]) {
|
||||
// Sub messages/groups are the exception.
|
||||
XCTAssertTrue([Message3 instancesRespondToSelector:hasSel], @"field: %@",
|
||||
name);
|
||||
@ -161,21 +221,28 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Repeated - no has/setHas
|
||||
// Repeated fields
|
||||
// - no has*/setHas*
|
||||
// - *Count
|
||||
|
||||
for (NSString *name in names) {
|
||||
// build the selector, i.e. - hasRepeatedInt32/setHasRepeatedInt32:
|
||||
// build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array:
|
||||
SEL hasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"hasRepeated%@", name]);
|
||||
[NSString stringWithFormat:@"hasRepeated%@Array", name]);
|
||||
SEL setHasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"setHasRepeated%@:", name]);
|
||||
[NSString stringWithFormat:@"setHasRepeated%@Array:", name]);
|
||||
XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@",
|
||||
name);
|
||||
XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel],
|
||||
@"field: %@", name);
|
||||
// build the selector, i.e. - repeatedInt32Array_Count
|
||||
SEL countSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"repeated%@Array_Count", name]);
|
||||
XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
|
||||
name);
|
||||
}
|
||||
|
||||
// Oneofs - no has/setHas
|
||||
// OneOf fields - no has*/setHas*
|
||||
|
||||
for (NSString *name in names) {
|
||||
// build the selector, i.e. - hasOneofInt32/setHasOneofInt32:
|
||||
@ -188,6 +255,49 @@
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
|
||||
@"field: %@", name);
|
||||
}
|
||||
|
||||
// map<> fields
|
||||
// - no has*/setHas*
|
||||
// - *Count
|
||||
|
||||
NSArray *mapNames = @[
|
||||
@"Int32Int32",
|
||||
@"Int64Int64",
|
||||
@"Uint32Uint32",
|
||||
@"Uint64Uint64",
|
||||
@"Sint32Sint32",
|
||||
@"Sint64Sint64",
|
||||
@"Fixed32Fixed32",
|
||||
@"Fixed64Fixed64",
|
||||
@"Sfixed32Sfixed32",
|
||||
@"Sfixed64Sfixed64",
|
||||
@"Int32Float",
|
||||
@"Int32Double",
|
||||
@"BoolBool",
|
||||
@"StringString",
|
||||
@"StringBytes",
|
||||
@"StringMessage",
|
||||
@"Int32Bytes",
|
||||
@"Int32Enum",
|
||||
@"Int32Message",
|
||||
];
|
||||
|
||||
for (NSString *name in mapNames) {
|
||||
// build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32:
|
||||
SEL hasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"hasMap%@", name]);
|
||||
SEL setHasSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"setHasMap%@:", name]);
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
|
||||
name);
|
||||
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
|
||||
@"field: %@", name);
|
||||
// build the selector, i.e. - mapInt32Int32Count
|
||||
SEL countSel = NSSelectorFromString(
|
||||
[NSString stringWithFormat:@"map%@_Count", name]);
|
||||
XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
|
||||
name);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testProto2SingleFieldHasBehavior {
|
||||
|
@ -36,6 +36,7 @@
|
||||
|
||||
#import "google/protobuf/MapProto2Unittest.pbobjc.h"
|
||||
#import "google/protobuf/MapUnittest.pbobjc.h"
|
||||
#import "google/protobuf/Unittest.pbobjc.h"
|
||||
#import "google/protobuf/UnittestDropUnknownFields.pbobjc.h"
|
||||
#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.h"
|
||||
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
|
||||
@ -166,17 +167,15 @@ static NSData *DataFromCStr(const char *str) {
|
||||
[unknownFields hasField:Message2_FieldNumber_RepeatedEnumArray]);
|
||||
XCTAssertTrue([unknownFields hasField:Message2_FieldNumber_OneofEnum]);
|
||||
|
||||
GPBField *field = [unknownFields getField:Message2_FieldNumber_OptionalEnum];
|
||||
GPBUnknownField *field =
|
||||
[unknownFields getField:Message2_FieldNumber_OptionalEnum];
|
||||
XCTAssertEqual(field.varintList.count, 1U);
|
||||
XCTAssertEqual([field.varintList valueAtIndex:0],
|
||||
(uint64_t)Message3_Enum_Extra3);
|
||||
|
||||
// Repeated in proto3 default to packed, so this will be length delimited
|
||||
// unknown field, and the value (Message3_Enum_Extra3) encodes into one byte.
|
||||
field = [unknownFields getField:Message2_FieldNumber_RepeatedEnumArray];
|
||||
XCTAssertEqual(field.lengthDelimitedList.count, 1U);
|
||||
NSData *expected = DataFromCStr("\x1E");
|
||||
XCTAssertEqualObjects([field.lengthDelimitedList objectAtIndex:0], expected);
|
||||
XCTAssertEqual(field.varintList.count, 1U);
|
||||
XCTAssertEqual([field.varintList valueAtIndex:0], (uint64_t)Message3_Enum_Extra3);
|
||||
|
||||
field = [unknownFields getField:Message2_FieldNumber_OneofEnum];
|
||||
XCTAssertEqual(field.varintList.count, 1U);
|
||||
@ -678,6 +677,131 @@ static NSData *DataFromCStr(const char *str) {
|
||||
|
||||
//%PDDM-EXPAND-END (2 expansions)
|
||||
|
||||
- (void)testPackedUnpackedMessageParsing {
|
||||
// packed is optional, a repeated field should parse when packed or unpacked.
|
||||
|
||||
TestPackedTypes *packedOrig = [TestPackedTypes message];
|
||||
TestUnpackedTypes *unpackedOrig = [TestUnpackedTypes message];
|
||||
[self setPackedFields:packedOrig repeatedCount:4];
|
||||
[self setUnpackedFields:unpackedOrig repeatedCount:4];
|
||||
|
||||
NSData *packedData = [packedOrig data];
|
||||
NSData *unpackedData = [unpackedOrig data];
|
||||
XCTAssertNotNil(packedData);
|
||||
XCTAssertNotNil(unpackedData);
|
||||
XCTAssertNotEqualObjects(packedData, unpackedData,
|
||||
@"Data should differ (packed vs unpacked) use");
|
||||
|
||||
NSError *error = nil;
|
||||
TestPackedTypes *packedParse =
|
||||
[TestPackedTypes parseFromData:unpackedData error:&error];
|
||||
XCTAssertNotNil(packedParse);
|
||||
XCTAssertNil(error);
|
||||
XCTAssertEqualObjects(packedParse, packedOrig);
|
||||
|
||||
error = nil;
|
||||
TestUnpackedTypes *unpackedParsed =
|
||||
[TestUnpackedTypes parseFromData:packedData error:&error];
|
||||
XCTAssertNotNil(unpackedParsed);
|
||||
XCTAssertNil(error);
|
||||
XCTAssertEqualObjects(unpackedParsed, unpackedOrig);
|
||||
}
|
||||
|
||||
- (void)testPackedUnpackedExtensionParsing {
|
||||
// packed is optional, a repeated extension should parse when packed or
|
||||
// unpacked.
|
||||
|
||||
TestPackedExtensions *packedOrig = [TestPackedExtensions message];
|
||||
TestUnpackedExtensions *unpackedOrig = [TestUnpackedExtensions message];
|
||||
[self setPackedExtensions:packedOrig repeatedCount:kGPBDefaultRepeatCount];
|
||||
[self setUnpackedExtensions:unpackedOrig repeatedCount:kGPBDefaultRepeatCount];
|
||||
|
||||
NSData *packedData = [packedOrig data];
|
||||
NSData *unpackedData = [unpackedOrig data];
|
||||
XCTAssertNotNil(packedData);
|
||||
XCTAssertNotNil(unpackedData);
|
||||
XCTAssertNotEqualObjects(packedData, unpackedData,
|
||||
@"Data should differ (packed vs unpacked) use");
|
||||
|
||||
NSError *error = nil;
|
||||
TestPackedExtensions *packedParse =
|
||||
[TestPackedExtensions parseFromData:unpackedData
|
||||
extensionRegistry:[UnittestRoot extensionRegistry]
|
||||
error:&error];
|
||||
XCTAssertNotNil(packedParse);
|
||||
XCTAssertNil(error);
|
||||
XCTAssertEqualObjects(packedParse, packedOrig);
|
||||
|
||||
error = nil;
|
||||
TestUnpackedExtensions *unpackedParsed =
|
||||
[TestUnpackedExtensions parseFromData:packedData
|
||||
extensionRegistry:[UnittestRoot extensionRegistry]
|
||||
error:&error];
|
||||
XCTAssertNotNil(unpackedParsed);
|
||||
XCTAssertNil(error);
|
||||
XCTAssertEqualObjects(unpackedParsed, unpackedOrig);
|
||||
}
|
||||
|
||||
- (void)testPackedExtensionVsFieldParsing {
|
||||
// Extensions and fields end up on the wire the same way, so they can parse
|
||||
// each other.
|
||||
|
||||
TestPackedTypes *fieldsOrig = [TestPackedTypes message];
|
||||
TestPackedExtensions *extsOrig = [TestPackedExtensions message];
|
||||
[self setPackedFields:fieldsOrig repeatedCount:kGPBDefaultRepeatCount];
|
||||
[self setPackedExtensions:extsOrig repeatedCount:kGPBDefaultRepeatCount];
|
||||
|
||||
NSData *fieldsData = [fieldsOrig data];
|
||||
NSData *extsData = [extsOrig data];
|
||||
XCTAssertNotNil(fieldsData);
|
||||
XCTAssertNotNil(extsData);
|
||||
XCTAssertEqualObjects(fieldsData, extsData);
|
||||
|
||||
NSError *error = nil;
|
||||
TestPackedTypes *fieldsParse =
|
||||
[TestPackedTypes parseFromData:extsData error:&error];
|
||||
XCTAssertNotNil(fieldsParse);
|
||||
XCTAssertNil(error);
|
||||
XCTAssertEqualObjects(fieldsParse, fieldsOrig);
|
||||
|
||||
error = nil;
|
||||
TestPackedExtensions *extsParse =
|
||||
[TestPackedExtensions parseFromData:fieldsData
|
||||
extensionRegistry:[UnittestRoot extensionRegistry]
|
||||
error:&error];
|
||||
XCTAssertNotNil(extsParse);
|
||||
XCTAssertNil(error);
|
||||
XCTAssertEqualObjects(extsParse, extsOrig);
|
||||
}
|
||||
|
||||
- (void)testUnpackedExtensionVsFieldParsing {
|
||||
// Extensions and fields end up on the wire the same way, so they can parse
|
||||
// each other.
|
||||
|
||||
TestUnpackedTypes *fieldsOrig = [TestUnpackedTypes message];
|
||||
TestUnpackedExtensions *extsOrig = [TestUnpackedExtensions message];
|
||||
[self setUnpackedFields:fieldsOrig repeatedCount:3];
|
||||
[self setUnpackedExtensions:extsOrig repeatedCount:3];
|
||||
|
||||
NSData *fieldsData = [fieldsOrig data];
|
||||
NSData *extsData = [extsOrig data];
|
||||
XCTAssertNotNil(fieldsData);
|
||||
XCTAssertNotNil(extsData);
|
||||
XCTAssertEqualObjects(fieldsData, extsData);
|
||||
|
||||
TestUnpackedTypes *fieldsParse =
|
||||
[TestUnpackedTypes parseFromData:extsData error:NULL];
|
||||
XCTAssertNotNil(fieldsParse);
|
||||
XCTAssertEqualObjects(fieldsParse, fieldsOrig);
|
||||
|
||||
TestUnpackedExtensions *extsParse =
|
||||
[TestUnpackedExtensions parseFromData:fieldsData
|
||||
extensionRegistry:[UnittestRoot extensionRegistry]
|
||||
error:NULL];
|
||||
XCTAssertNotNil(extsParse);
|
||||
XCTAssertEqualObjects(extsParse, extsOrig);
|
||||
}
|
||||
|
||||
#pragma mark - Subset from from map_tests.cc
|
||||
|
||||
// TEST(GeneratedMapFieldTest, StandardWireFormat)
|
||||
|
@ -35,12 +35,11 @@
|
||||
#import "GPBArray_PackagePrivate.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBDictionary_PackagePrivate.h"
|
||||
#import "GPBField_PackagePrivate.h"
|
||||
#import "GPBMessage_PackagePrivate.h"
|
||||
#import "GPBUnknownField_PackagePrivate.h"
|
||||
#import "GPBUnknownFieldSet_PackagePrivate.h"
|
||||
#import "google/protobuf/Unittest.pbobjc.h"
|
||||
#import "google/protobuf/UnittestObjc.pbobjc.h"
|
||||
#import "google/protobuf/UnittestNameMangling.pbobjc.h"
|
||||
|
||||
@interface MessageTests : GPBTestCase
|
||||
@end
|
||||
@ -420,10 +419,11 @@
|
||||
|
||||
GPBUnknownFieldSet *unknownFields =
|
||||
[[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
GPBField *field = [[[GPBField alloc] initWithNumber:2] autorelease];
|
||||
GPBUnknownField *field =
|
||||
[[[GPBUnknownField alloc] initWithNumber:2] autorelease];
|
||||
[field addVarint:2];
|
||||
[unknownFields addField:field];
|
||||
field = [[[GPBField alloc] initWithNumber:3] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
|
||||
[field addVarint:4];
|
||||
[unknownFields addField:field];
|
||||
|
||||
@ -451,7 +451,7 @@
|
||||
GPBFieldDescriptor *fieldDescriptor =
|
||||
[descriptor fieldWithName:@"defaultInt32"];
|
||||
XCTAssertNotNil(fieldDescriptor);
|
||||
GPBValue defaultValue = [fieldDescriptor defaultValue];
|
||||
GPBGenericValue defaultValue = [fieldDescriptor defaultValue];
|
||||
[message setDefaultInt32:defaultValue.valueInt32];
|
||||
XCTAssertTrue(message.hasDefaultInt32);
|
||||
XCTAssertEqual(message.defaultInt32, defaultValue.valueInt32);
|
||||
@ -1554,7 +1554,7 @@
|
||||
// The other should not.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
TestAllExtensions *message2 = [TestAllExtensions message];
|
||||
GPBExtensionField *extension = [UnittestRoot optionalGroupExtension];
|
||||
GPBExtensionDescriptor *extension = [UnittestRoot optionalGroupExtension];
|
||||
[message setExtension:extension value:[message2 getExtension:extension]];
|
||||
XCTAssertEqual([message getExtension:extension],
|
||||
[message2 getExtension:extension]);
|
||||
@ -1571,9 +1571,9 @@
|
||||
- (void)testCopyWithAutocreatedExtension {
|
||||
// Mutable copy shouldn't copy autocreated extensions.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
GPBExtensionField *optionalGroupExtension =
|
||||
GPBExtensionDescriptor *optionalGroupExtension =
|
||||
[UnittestRoot optionalGroupExtension];
|
||||
GPBExtensionField *optionalNestedMessageExtesion =
|
||||
GPBExtensionDescriptor *optionalNestedMessageExtesion =
|
||||
[UnittestRoot optionalNestedMessageExtension];
|
||||
TestAllTypes_OptionalGroup *optionalGroup =
|
||||
[message getExtension:optionalGroupExtension];
|
||||
@ -1603,7 +1603,7 @@
|
||||
- (void)testClearMessageAutocreatedExtension {
|
||||
// Call clear should cause it to recreate its autocreated extensions.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
GPBExtensionField *optionalGroupExtension =
|
||||
GPBExtensionDescriptor *optionalGroupExtension =
|
||||
[UnittestRoot optionalGroupExtension];
|
||||
TestAllTypes_OptionalGroup *optionalGroup =
|
||||
[[message getExtension:optionalGroupExtension] retain];
|
||||
@ -1620,7 +1620,7 @@
|
||||
// Should be able to retain autocreated extension while the creator is
|
||||
// dealloced.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
GPBExtensionField *optionalGroupExtension =
|
||||
GPBExtensionDescriptor *optionalGroupExtension =
|
||||
[UnittestRoot optionalGroupExtension];
|
||||
|
||||
@autoreleasepool {
|
||||
@ -1638,7 +1638,7 @@
|
||||
- (void)testClearAutocreatedExtension {
|
||||
// Clearing autocreated extension should NOT cause it to lose its creator.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
GPBExtensionField *optionalGroupExtension =
|
||||
GPBExtensionDescriptor *optionalGroupExtension =
|
||||
[UnittestRoot optionalGroupExtension];
|
||||
TestAllTypes_OptionalGroup *optionalGroup =
|
||||
[[message getExtension:optionalGroupExtension] retain];
|
||||
@ -1651,7 +1651,8 @@
|
||||
|
||||
// Clearing autocreated extension should not cause its creator to become
|
||||
// visible
|
||||
GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
|
||||
GPBExtensionDescriptor *recursiveExtension =
|
||||
[UnittestObjcRoot recursiveExtension];
|
||||
TestAllExtensions *message_lvl2 = [message getExtension:recursiveExtension];
|
||||
TestAllExtensions *message_lvl3 =
|
||||
[message_lvl2 getExtension:recursiveExtension];
|
||||
@ -1663,7 +1664,8 @@
|
||||
// Setting an extension should cause the extension to appear to its creator.
|
||||
// Test this several levels deep.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
|
||||
GPBExtensionDescriptor *recursiveExtension =
|
||||
[UnittestObjcRoot recursiveExtension];
|
||||
TestAllExtensions *message_lvl2 = [message getExtension:recursiveExtension];
|
||||
TestAllExtensions *message_lvl3 =
|
||||
[message_lvl2 getExtension:recursiveExtension];
|
||||
@ -1686,7 +1688,7 @@
|
||||
- (void)testSetAutocreatedExtensionToSelf {
|
||||
// Setting extension to itself should cause it to become visible.
|
||||
TestAllExtensions *message = [TestAllExtensions message];
|
||||
GPBExtensionField *optionalGroupExtension =
|
||||
GPBExtensionDescriptor *optionalGroupExtension =
|
||||
[UnittestRoot optionalGroupExtension];
|
||||
XCTAssertNotNil([message getExtension:optionalGroupExtension]);
|
||||
XCTAssertFalse([message hasExtension:optionalGroupExtension]);
|
||||
@ -1696,7 +1698,8 @@
|
||||
}
|
||||
|
||||
- (void)testAutocreatedExtensionMemoryLeaks {
|
||||
GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
|
||||
GPBExtensionDescriptor *recursiveExtension =
|
||||
[UnittestObjcRoot recursiveExtension];
|
||||
|
||||
// Test for memory leaks with autocreated extensions.
|
||||
TestAllExtensions *message;
|
||||
@ -1729,7 +1732,8 @@
|
||||
}
|
||||
|
||||
- (void)testSetExtensionWithAutocreatedValue {
|
||||
GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
|
||||
GPBExtensionDescriptor *recursiveExtension =
|
||||
[UnittestObjcRoot recursiveExtension];
|
||||
|
||||
TestAllExtensions *message;
|
||||
@autoreleasepool {
|
||||
@ -1814,9 +1818,9 @@
|
||||
}
|
||||
|
||||
- (void)testEnumDescriptorFromExtensionDescriptor {
|
||||
GPBExtensionField *extField = [UnittestRoot optionalForeignEnumExtension];
|
||||
GPBExtensionDescriptor *extDescriptor = extField.descriptor;
|
||||
XCTAssertEqual(extDescriptor.type, GPBTypeEnum);
|
||||
GPBExtensionDescriptor *extDescriptor =
|
||||
[UnittestRoot optionalForeignEnumExtension];
|
||||
XCTAssertEqual(extDescriptor.dataType, GPBDataTypeEnum);
|
||||
GPBEnumDescriptor *enumDescriptor = extDescriptor.enumDescriptor;
|
||||
GPBEnumDescriptor *expectedDescriptor = ForeignEnum_EnumDescriptor();
|
||||
XCTAssertEqualObjects(enumDescriptor, expectedDescriptor);
|
||||
@ -1925,11 +1929,4 @@
|
||||
EnumTestMsg_MyEnum_NegTwo);
|
||||
}
|
||||
|
||||
- (void)testMutableNameManagling {
|
||||
// These basically confirm that all the expected name mangling happened by not
|
||||
// having compile errors.
|
||||
|
||||
// TODO(thomasvl): Write these, see unittest_name_mangling.proto.
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -35,6 +35,8 @@
|
||||
@class TestMap;
|
||||
@class TestPackedTypes;
|
||||
@class TestPackedExtensions;
|
||||
@class TestUnpackedTypes;
|
||||
@class TestUnpackedExtensions;
|
||||
@class GPBExtensionRegistry;
|
||||
|
||||
|
||||
@ -55,8 +57,12 @@ extern const uint32_t kGPBDefaultRepeatCount;
|
||||
repeatedCount:(uint32_t)count;
|
||||
- (void)setPackedFields:(TestPackedTypes *)message
|
||||
repeatedCount:(uint32_t)count;
|
||||
- (void)setUnpackedFields:(TestUnpackedTypes *)message
|
||||
repeatedCount:(uint32_t)count;
|
||||
- (void)setPackedExtensions:(TestPackedExtensions *)message
|
||||
repeatedCount:(uint32_t)count;
|
||||
- (void)setUnpackedExtensions:(TestUnpackedExtensions *)message
|
||||
repeatedCount:(uint32_t)count;
|
||||
- (void)setAllMapFields:(TestMap *)message numEntries:(uint32_t)count;
|
||||
|
||||
- (TestAllTypes *)allSetRepeatedCount:(uint32_t)count;
|
||||
|
@ -599,6 +599,33 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
XCTAssertEqual(count, message.repeatedStringPieceArray.count);
|
||||
XCTAssertEqual(count, message.repeatedCordArray.count);
|
||||
|
||||
XCTAssertEqual(count, message.repeatedInt32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedInt64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedUint32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedUint64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSint32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSint64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedFixed32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedFixed64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSfixed32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSfixed64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedFloatArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedDoubleArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedBoolArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedStringArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedBytesArray_Count);
|
||||
|
||||
XCTAssertEqual(count, message.repeatedGroupArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedNestedMessageArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedForeignMessageArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedImportMessageArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedNestedEnumArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedForeignEnumArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedImportEnumArray_Count);
|
||||
|
||||
XCTAssertEqual(count, message.repeatedStringPieceArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedCordArray_Count);
|
||||
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
XCTAssertEqual((int)(201 + i * 100),
|
||||
[message.repeatedInt32Array valueAtIndex:i]);
|
||||
@ -1097,6 +1124,72 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setAllTestPackedFields:(TestPackedTypes *)message {
|
||||
// Must match -setAllTestUnpackedFields:
|
||||
[message.packedInt32Array addValue:101];
|
||||
[message.packedInt64Array addValue:102];
|
||||
[message.packedUint32Array addValue:103];
|
||||
[message.packedUint64Array addValue:104];
|
||||
[message.packedSint32Array addValue:105];
|
||||
[message.packedSint64Array addValue:106];
|
||||
[message.packedFixed32Array addValue:107];
|
||||
[message.packedFixed64Array addValue:108];
|
||||
[message.packedSfixed32Array addValue:109];
|
||||
[message.packedSfixed64Array addValue:110];
|
||||
[message.packedFloatArray addValue:111.f];
|
||||
[message.packedDoubleArray addValue:112.];
|
||||
[message.packedBoolArray addValue:YES];
|
||||
[message.packedEnumArray addValue:ForeignEnum_ForeignBar];
|
||||
|
||||
[message.packedInt32Array addValue:201];
|
||||
[message.packedInt64Array addValue:302];
|
||||
[message.packedUint32Array addValue:203];
|
||||
[message.packedUint64Array addValue:204];
|
||||
[message.packedSint32Array addValue:205];
|
||||
[message.packedSint64Array addValue:206];
|
||||
[message.packedFixed32Array addValue:207];
|
||||
[message.packedFixed64Array addValue:208];
|
||||
[message.packedSfixed32Array addValue:209];
|
||||
[message.packedSfixed64Array addValue:210];
|
||||
[message.packedFloatArray addValue:211.f];
|
||||
[message.packedDoubleArray addValue:212.];
|
||||
[message.packedBoolArray addValue:NO];
|
||||
[message.packedEnumArray addValue:ForeignEnum_ForeignBaz];
|
||||
}
|
||||
|
||||
- (void)setAllTestUnpackedFields:(TestUnpackedTypes *)message {
|
||||
// Must match -setAllTestPackedFields:
|
||||
[message.unpackedInt32Array addValue:101];
|
||||
[message.unpackedInt64Array addValue:102];
|
||||
[message.unpackedUint32Array addValue:103];
|
||||
[message.unpackedUint64Array addValue:104];
|
||||
[message.unpackedSint32Array addValue:105];
|
||||
[message.unpackedSint64Array addValue:106];
|
||||
[message.unpackedFixed32Array addValue:107];
|
||||
[message.unpackedFixed64Array addValue:108];
|
||||
[message.unpackedSfixed32Array addValue:109];
|
||||
[message.unpackedSfixed64Array addValue:110];
|
||||
[message.unpackedFloatArray addValue:111.f];
|
||||
[message.unpackedDoubleArray addValue:112.];
|
||||
[message.unpackedBoolArray addValue:YES];
|
||||
[message.unpackedEnumArray addValue:ForeignEnum_ForeignBar];
|
||||
|
||||
[message.unpackedInt32Array addValue:201];
|
||||
[message.unpackedInt64Array addValue:302];
|
||||
[message.unpackedUint32Array addValue:203];
|
||||
[message.unpackedUint64Array addValue:204];
|
||||
[message.unpackedSint32Array addValue:205];
|
||||
[message.unpackedSint64Array addValue:206];
|
||||
[message.unpackedFixed32Array addValue:207];
|
||||
[message.unpackedFixed64Array addValue:208];
|
||||
[message.unpackedSfixed32Array addValue:209];
|
||||
[message.unpackedSfixed64Array addValue:210];
|
||||
[message.unpackedFloatArray addValue:211.f];
|
||||
[message.unpackedDoubleArray addValue:212.];
|
||||
[message.unpackedBoolArray addValue:NO];
|
||||
[message.unpackedEnumArray addValue:ForeignEnum_ForeignBaz];
|
||||
}
|
||||
|
||||
- (GPBExtensionRegistry *)extensionRegistry {
|
||||
return [UnittestRoot extensionRegistry];
|
||||
}
|
||||
@ -1189,6 +1282,7 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
XCTAssertEqualObjects(message.optionalCord, @"");
|
||||
|
||||
// Repeated fields are empty.
|
||||
|
||||
XCTAssertEqual(0U, message.repeatedInt32Array.count);
|
||||
XCTAssertEqual(0U, message.repeatedInt64Array.count);
|
||||
XCTAssertEqual(0U, message.repeatedUint32Array.count);
|
||||
@ -1216,6 +1310,33 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
XCTAssertEqual(0U, message.repeatedStringPieceArray.count);
|
||||
XCTAssertEqual(0U, message.repeatedCordArray.count);
|
||||
|
||||
XCTAssertEqual(0U, message.repeatedInt32Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedInt64Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedUint32Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedUint64Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedSint32Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedSint64Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedFixed32Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedFixed64Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedSfixed32Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedSfixed64Array_Count);
|
||||
XCTAssertEqual(0U, message.repeatedFloatArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedDoubleArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedBoolArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedStringArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedBytesArray_Count);
|
||||
|
||||
XCTAssertEqual(0U, message.repeatedGroupArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedNestedMessageArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedForeignMessageArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedImportMessageArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedNestedEnumArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedForeignEnumArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedImportEnumArray_Count);
|
||||
|
||||
XCTAssertEqual(0U, message.repeatedStringPieceArray_Count);
|
||||
XCTAssertEqual(0U, message.repeatedCordArray_Count);
|
||||
|
||||
// hasBlah() should also be NO for all default fields.
|
||||
XCTAssertFalse(message.hasDefaultInt32);
|
||||
XCTAssertFalse(message.hasDefaultInt64);
|
||||
@ -1474,6 +1595,7 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
// ModifyRepeatedFields only sets the second repeated element of each
|
||||
// field. In addition to verifying this, we also verify that the first
|
||||
// element and size were *not* modified.
|
||||
|
||||
XCTAssertEqual(count, message.repeatedInt32Array.count);
|
||||
XCTAssertEqual(count, message.repeatedInt64Array.count);
|
||||
XCTAssertEqual(count, message.repeatedUint32Array.count);
|
||||
@ -1501,6 +1623,33 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
XCTAssertEqual(count, message.repeatedStringPieceArray.count);
|
||||
XCTAssertEqual(count, message.repeatedCordArray.count);
|
||||
|
||||
XCTAssertEqual(count, message.repeatedInt32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedInt64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedUint32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedUint64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSint32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSint64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedFixed32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedFixed64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSfixed32Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedSfixed64Array_Count);
|
||||
XCTAssertEqual(count, message.repeatedFloatArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedDoubleArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedBoolArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedStringArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedBytesArray_Count);
|
||||
|
||||
XCTAssertEqual(count, message.repeatedGroupArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedNestedMessageArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedForeignMessageArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedImportMessageArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedNestedEnumArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedForeignEnumArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedImportEnumArray_Count);
|
||||
|
||||
XCTAssertEqual(count, message.repeatedStringPieceArray_Count);
|
||||
XCTAssertEqual(count, message.repeatedCordArray_Count);
|
||||
|
||||
XCTAssertEqual(201, [message.repeatedInt32Array valueAtIndex:0]);
|
||||
XCTAssertEqual(202LL, [message.repeatedInt64Array valueAtIndex:0]);
|
||||
XCTAssertEqual(203U, [message.repeatedUint32Array valueAtIndex:0]);
|
||||
@ -1563,105 +1712,101 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
|
||||
- (void)setPackedFields:(TestPackedTypes *)message
|
||||
repeatedCount:(uint32_t)count {
|
||||
{
|
||||
GPBInt32Array *scratch = [GPBInt32Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:601 + i * 100];
|
||||
}
|
||||
[message setPackedInt32Array:scratch];
|
||||
// Must match -setUnpackedFields:repeatedCount:
|
||||
// Must match -setPackedExtensions:repeatedCount:
|
||||
// Must match -setUnpackedExtensions:repeatedCount:
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedInt32Array addValue:601 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBInt64Array *scratch = [GPBInt64Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:602 + i * 100];
|
||||
}
|
||||
[message setPackedInt64Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedInt64Array addValue:602 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBUInt32Array *scratch = [GPBUInt32Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:603 + i * 100];
|
||||
}
|
||||
[message setPackedUint32Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedUint32Array addValue:603 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBUInt64Array *scratch = [GPBUInt64Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:604 + i * 100];
|
||||
}
|
||||
[message setPackedUint64Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedUint64Array addValue:604 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBInt32Array *scratch = [GPBInt32Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:605 + i * 100];
|
||||
}
|
||||
[message setPackedSint32Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedSint32Array addValue:605 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBInt64Array *scratch = [GPBInt64Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:606 + i * 100];
|
||||
}
|
||||
[message setPackedSint64Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedSint64Array addValue:606 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBUInt32Array *scratch = [GPBUInt32Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:607 + i * 100];
|
||||
}
|
||||
[message setPackedFixed32Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedFixed32Array addValue:607 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBUInt64Array *scratch = [GPBUInt64Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:608 + i * 100];
|
||||
}
|
||||
[message setPackedFixed64Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedFixed64Array addValue:608 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBInt32Array *scratch = [GPBInt32Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:609 + i * 100];
|
||||
}
|
||||
[message setPackedSfixed32Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedSfixed32Array addValue:609 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBInt64Array *scratch = [GPBInt64Array array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:610 + i * 100];
|
||||
}
|
||||
[message setPackedSfixed64Array:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedSfixed64Array addValue:610 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBFloatArray *scratch = [GPBFloatArray array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:611 + i * 100];
|
||||
}
|
||||
[message setPackedFloatArray:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedFloatArray addValue:611 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBDoubleArray *scratch = [GPBDoubleArray array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:612 + i * 100];
|
||||
}
|
||||
[message setPackedDoubleArray:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedDoubleArray addValue:612 + i * 100];
|
||||
}
|
||||
{
|
||||
GPBBoolArray *scratch = [GPBBoolArray array];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch addValue:(i % 2) ? YES : NO];
|
||||
}
|
||||
[message setPackedBoolArray:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedBoolArray addValue:(i % 2) ? YES : NO];
|
||||
}
|
||||
{
|
||||
GPBEnumArray *scratch =
|
||||
[GPBEnumArray arrayWithValidationFunction:ForeignEnum_IsValidValue];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[scratch
|
||||
addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz];
|
||||
}
|
||||
[message setPackedEnumArray:scratch];
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.packedEnumArray
|
||||
addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setUnpackedFields:(TestUnpackedTypes *)message
|
||||
repeatedCount:(uint32_t)count {
|
||||
// Must match -setPackedFields:repeatedCount:
|
||||
// Must match -setPackedExtensions:repeatedCount:
|
||||
// Must match -setUnpackedExtensions:repeatedCount:
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedInt32Array addValue:601 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedInt64Array addValue:602 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedUint32Array addValue:603 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedUint64Array addValue:604 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedSint32Array addValue:605 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedSint64Array addValue:606 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedFixed32Array addValue:607 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedFixed64Array addValue:608 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedSfixed32Array addValue:609 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedSfixed64Array addValue:610 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedFloatArray addValue:611 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedDoubleArray addValue:612 + i * 100];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedBoolArray addValue:(i % 2) ? YES : NO];
|
||||
}
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
[message.unpackedEnumArray
|
||||
addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz];
|
||||
}
|
||||
}
|
||||
|
||||
@ -1708,6 +1853,9 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
|
||||
- (void)setPackedExtensions:(TestPackedExtensions *)message
|
||||
repeatedCount:(uint32_t)count {
|
||||
// Must match -setPackedFields:repeatedCount:
|
||||
// Must match -setUnpackedFields:repeatedCount:
|
||||
// Must match -setUnpackedExtensions:repeatedCount:
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
[message addExtension:[UnittestRoot packedInt32Extension]
|
||||
value:@(601 + i * 100)];
|
||||
@ -1741,6 +1889,44 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setUnpackedExtensions:(TestUnpackedExtensions *)message
|
||||
repeatedCount:(uint32_t)count {
|
||||
// Must match -setPackedFields:repeatedCount:
|
||||
// Must match -setUnpackedFields:repeatedCount:
|
||||
// Must match -setPackedExtensions:repeatedCount:
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
[message addExtension:[UnittestRoot unpackedInt32Extension]
|
||||
value:@(601 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedInt64Extension]
|
||||
value:@(602 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedUint32Extension]
|
||||
value:@(603 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedUint64Extension]
|
||||
value:@(604 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedSint32Extension]
|
||||
value:@(605 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedSint64Extension]
|
||||
value:@(606 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedFixed32Extension]
|
||||
value:@(607 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedFixed64Extension]
|
||||
value:@(608 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedSfixed32Extension]
|
||||
value:@(609 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedSfixed64Extension]
|
||||
value:@(610 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedFloatExtension]
|
||||
value:@(611 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedDoubleExtension]
|
||||
value:@(612 + i * 100)];
|
||||
[message addExtension:[UnittestRoot unpackedBoolExtension]
|
||||
value:@((i % 2) ? YES : NO)];
|
||||
[message addExtension:[UnittestRoot unpackedEnumExtension]
|
||||
value:@((i % 2) ? ForeignEnum_ForeignBar
|
||||
: ForeignEnum_ForeignBaz)];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)assertPackedExtensionsSet:(TestPackedExtensions *)message
|
||||
repeatedCount:(uint32_t)count{
|
||||
XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedInt32Extension]] count]);
|
||||
@ -1884,6 +2070,34 @@ const uint32_t kGPBDefaultRepeatCount = 2;
|
||||
XCTAssertEqualObjects(message.repeatedStringPieceArray, [message valueForKey:@"repeatedStringPieceArray"]);
|
||||
XCTAssertEqualObjects(message.repeatedCordArray, [message valueForKey:@"repeatedCordArray"]);
|
||||
|
||||
XCTAssertEqualObjects(@(message.repeatedInt32Array_Count), [message valueForKey:@"repeatedInt32Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedInt64Array_Count), [message valueForKey:@"repeatedInt64Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedUint32Array_Count), [message valueForKey:@"repeatedUint32Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedUint64Array_Count), [message valueForKey:@"repeatedUint64Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedSint32Array_Count), [message valueForKey:@"repeatedSint32Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedSint64Array_Count), [message valueForKey:@"repeatedSint64Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedFixed32Array_Count), [message valueForKey:@"repeatedFixed32Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedFixed64Array_Count), [message valueForKey:@"repeatedFixed64Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedSfixed32Array_Count), [message valueForKey:@"repeatedSfixed32Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedSfixed64Array_Count), [message valueForKey:@"repeatedSfixed64Array_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedFloatArray_Count), [message valueForKey:@"repeatedFloatArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedDoubleArray_Count), [message valueForKey:@"repeatedDoubleArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedBoolArray_Count), [message valueForKey:@"repeatedBoolArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedStringArray_Count), [message valueForKey:@"repeatedStringArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedBytesArray_Count), [message valueForKey:@"repeatedBytesArray_Count"]);
|
||||
|
||||
XCTAssertEqualObjects(@(message.repeatedGroupArray_Count), [message valueForKey:@"repeatedGroupArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedNestedMessageArray_Count), [message valueForKey:@"repeatedNestedMessageArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedForeignMessageArray_Count), [message valueForKey:@"repeatedForeignMessageArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedImportMessageArray_Count), [message valueForKey:@"repeatedImportMessageArray_Count"]);
|
||||
|
||||
XCTAssertEqualObjects(@(message.repeatedNestedEnumArray_Count), [message valueForKey:@"repeatedNestedEnumArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedForeignEnumArray_Count), [message valueForKey:@"repeatedForeignEnumArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedImportEnumArray_Count), [message valueForKey:@"repeatedImportEnumArray_Count"]);
|
||||
|
||||
XCTAssertEqualObjects(@(message.repeatedStringPieceArray_Count), [message valueForKey:@"repeatedStringPieceArray_Count"]);
|
||||
XCTAssertEqualObjects(@(message.repeatedCordArray_Count), [message valueForKey:@"repeatedCordArray_Count"]);
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
XCTAssertEqualObjects([message valueForKey:@"hasDefaultInt32"], @YES);
|
||||
|
@ -40,16 +40,15 @@
|
||||
#import "google/protobuf/UnittestEmbedOptimizeFor.pbobjc.m"
|
||||
#import "google/protobuf/UnittestEmpty.pbobjc.m"
|
||||
#import "google/protobuf/UnittestEnormousDescriptor.pbobjc.m"
|
||||
#import "google/protobuf/UnittestFilter.pbobjc.m"
|
||||
#import "google/protobuf/UnittestImport.pbobjc.m"
|
||||
#import "google/protobuf/UnittestImportLite.pbobjc.m"
|
||||
#import "google/protobuf/UnittestImportPublic.pbobjc.m"
|
||||
#import "google/protobuf/UnittestImportPublicLite.pbobjc.m"
|
||||
#import "google/protobuf/UnittestLite.pbobjc.m"
|
||||
#import "google/protobuf/UnittestMset.pbobjc.m"
|
||||
#import "google/protobuf/UnittestNameMangling.pbobjc.m"
|
||||
#import "google/protobuf/UnittestNoGenericServices.pbobjc.m"
|
||||
#import "google/protobuf/UnittestObjc.pbobjc.m"
|
||||
#import "google/protobuf/UnittestObjcStartup.pbobjc.m"
|
||||
#import "google/protobuf/UnittestOptimizeFor.pbobjc.m"
|
||||
#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.m"
|
||||
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.m"
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#import "GPBTestUtilities.h"
|
||||
|
||||
#import "GPBField_PackagePrivate.h"
|
||||
#import "GPBUnknownField_PackagePrivate.h"
|
||||
#import "GPBUnknownFieldSet_PackagePrivate.h"
|
||||
#import "google/protobuf/Unittest.pbobjc.h"
|
||||
|
||||
@ -60,7 +60,7 @@
|
||||
unknownFields_ = emptyMessage_.unknownFields;
|
||||
}
|
||||
|
||||
- (GPBField*)getField:(int32_t)number {
|
||||
- (GPBUnknownField *)getField:(int32_t)number {
|
||||
return [unknownFields_ getField:number];
|
||||
}
|
||||
|
||||
@ -75,17 +75,17 @@
|
||||
[unknownFields_ getTags:tags];
|
||||
for (NSUInteger i = 0; i < count; ++i) {
|
||||
int32_t tag = tags[i];
|
||||
GPBField* field = [unknownFields_ getField:tag];
|
||||
GPBUnknownField* field = [unknownFields_ getField:tag];
|
||||
if (field.varintList.count == 0) {
|
||||
// Original field is not a varint, so use a varint.
|
||||
GPBField* varintField =
|
||||
[[[GPBField alloc] initWithNumber:tag] autorelease];
|
||||
GPBUnknownField* varintField =
|
||||
[[[GPBUnknownField alloc] initWithNumber:tag] autorelease];
|
||||
[varintField addVarint:1];
|
||||
[bizarroFields addField:varintField];
|
||||
} else {
|
||||
// Original field *is* a varint, so use something else.
|
||||
GPBField* fixed32Field =
|
||||
[[[GPBField alloc] initWithNumber:tag] autorelease];
|
||||
GPBUnknownField* fixed32Field =
|
||||
[[[GPBUnknownField alloc] initWithNumber:tag] autorelease];
|
||||
[fixed32Field addFixed32:1];
|
||||
[bizarroFields addField:fixed32Field];
|
||||
}
|
||||
@ -110,34 +110,34 @@
|
||||
|
||||
- (void)testMergeFrom {
|
||||
GPBUnknownFieldSet* set1 = [[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
GPBField* field = [[[GPBField alloc] initWithNumber:2] autorelease];
|
||||
GPBUnknownField* field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
|
||||
[field addVarint:2];
|
||||
[set1 addField:field];
|
||||
field = [[[GPBField alloc] initWithNumber:3] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
|
||||
[field addVarint:4];
|
||||
[set1 addField:field];
|
||||
|
||||
GPBUnknownFieldSet* set2 = [[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
field = [[[GPBField alloc] initWithNumber:1] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
|
||||
[field addVarint:1];
|
||||
[set2 addField:field];
|
||||
field = [[[GPBField alloc] initWithNumber:3] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
|
||||
[field addVarint:3];
|
||||
[set2 addField:field];
|
||||
|
||||
GPBUnknownFieldSet* set3 = [[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
field = [[[GPBField alloc] initWithNumber:1] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
|
||||
[field addVarint:1];
|
||||
[set3 addField:field];
|
||||
field = [[[GPBField alloc] initWithNumber:3] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
|
||||
[field addVarint:4];
|
||||
[set3 addField:field];
|
||||
|
||||
GPBUnknownFieldSet* set4 = [[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
field = [[[GPBField alloc] initWithNumber:2] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
|
||||
[field addVarint:2];
|
||||
[set4 addField:field];
|
||||
field = [[[GPBField alloc] initWithNumber:3] autorelease];
|
||||
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
|
||||
[field addVarint:3];
|
||||
[set4 addField:field];
|
||||
|
||||
@ -162,7 +162,7 @@
|
||||
}
|
||||
|
||||
- (void)testClearMessage {
|
||||
TestEmptyMessage* message = [TestEmptyMessage message];
|
||||
TestEmptyMessage *message = [TestEmptyMessage message];
|
||||
[message mergeFrom:emptyMessage_];
|
||||
[message clear];
|
||||
XCTAssertEqual(message.serializedSize, (size_t)0);
|
||||
@ -170,8 +170,9 @@
|
||||
|
||||
- (void)testParseKnownAndUnknown {
|
||||
// Test mixing known and unknown fields when parsing.
|
||||
GPBUnknownFieldSet* fields = [[unknownFields_ copy] autorelease];
|
||||
GPBField* field = [[[GPBField alloc] initWithNumber:123456] autorelease];
|
||||
GPBUnknownFieldSet *fields = [[unknownFields_ copy] autorelease];
|
||||
GPBUnknownField *field =
|
||||
[[[GPBUnknownField alloc] initWithNumber:123456] autorelease];
|
||||
[field addVarint:654321];
|
||||
[fields addField:field];
|
||||
|
||||
@ -181,7 +182,7 @@
|
||||
[self assertAllFieldsSet:destination repeatedCount:kGPBDefaultRepeatCount];
|
||||
XCTAssertEqual(destination.unknownFields.countOfFields, (NSUInteger)1);
|
||||
|
||||
GPBField* field2 = [destination.unknownFields getField:123456];
|
||||
GPBUnknownField* field2 = [destination.unknownFields getField:123456];
|
||||
XCTAssertEqual(field2.varintList.count, (NSUInteger)1);
|
||||
XCTAssertEqual(654321ULL, [field2.varintList valueAtIndex:0]);
|
||||
}
|
||||
@ -230,7 +231,7 @@
|
||||
|
||||
- (void)testLargeVarint {
|
||||
GPBUnknownFieldSet* fields = [[unknownFields_ copy] autorelease];
|
||||
GPBField* field = [[[GPBField alloc] initWithNumber:1] autorelease];
|
||||
GPBUnknownField* field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
|
||||
[field addVarint:0x7FFFFFFFFFFFFFFFL];
|
||||
[fields addField:field];
|
||||
|
||||
@ -238,19 +239,19 @@
|
||||
|
||||
GPBUnknownFieldSet* parsed = [[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
[parsed mergeFromData:data];
|
||||
GPBField* field2 = [parsed getField:1];
|
||||
GPBUnknownField* field2 = [parsed getField:1];
|
||||
XCTAssertEqual(field2.varintList.count, (NSUInteger)1);
|
||||
XCTAssertEqual(0x7FFFFFFFFFFFFFFFULL, [field2.varintList valueAtIndex:0]);
|
||||
}
|
||||
|
||||
- (void)testMergingFields {
|
||||
GPBField* field1 = [[[GPBField alloc] initWithNumber:1] autorelease];
|
||||
GPBUnknownField* field1 = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
|
||||
[field1 addVarint:1];
|
||||
[field1 addFixed32:2];
|
||||
[field1 addFixed64:3];
|
||||
[field1 addLengthDelimited:[NSData dataWithBytes:"hello" length:5]];
|
||||
[field1 addGroup:[[unknownFields_ copy] autorelease]];
|
||||
GPBField* field2 = [[[GPBField alloc] initWithNumber:2] autorelease];
|
||||
GPBUnknownField* field2 = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
|
||||
[field2 mergeFromField:field1];
|
||||
XCTAssertEqualObjects(field1, field2);
|
||||
}
|
||||
|
@ -47,141 +47,6 @@
|
||||
@interface UtilitiesTests : GPBTestCase
|
||||
@end
|
||||
|
||||
// Support code for testing
|
||||
typedef struct {
|
||||
uint32_t _has_storage_[1];
|
||||
BOOL aBool;
|
||||
int32_t aInt32;
|
||||
uint32_t aUInt32;
|
||||
int64_t aInt64;
|
||||
uint64_t aUInt64;
|
||||
float aFloat;
|
||||
double aDouble;
|
||||
id aObject;
|
||||
BOOL _hasTest;
|
||||
BOOL stopper;
|
||||
BOOL shouldNotBeCounted;
|
||||
GPBInt32Array *anArray;
|
||||
} ApplyFunctionsTest_Storage;
|
||||
|
||||
@interface ApplyFunctionsTest : GPBMessage
|
||||
@property(nonatomic, readwrite) BOOL aBool;
|
||||
@property(nonatomic, readwrite) int32_t aInt32;
|
||||
@property(nonatomic, readwrite) uint32_t aUInt32;
|
||||
@property(nonatomic, readwrite) int64_t aInt64;
|
||||
@property(nonatomic, readwrite) uint64_t aUInt64;
|
||||
@property(nonatomic, readwrite) float aFloat;
|
||||
@property(nonatomic, readwrite) double aDouble;
|
||||
@property(nonatomic, readwrite, retain) id aObject;
|
||||
@property(nonatomic, readwrite) BOOL _hasTest;
|
||||
@property(nonatomic, readwrite) BOOL stopper;
|
||||
@property(nonatomic, readwrite) BOOL shouldNotBeCounted;
|
||||
@property(nonatomic, readwrite, retain) GPBInt32Array *anArray;
|
||||
@end
|
||||
|
||||
@implementation ApplyFunctionsTest
|
||||
|
||||
@dynamic aBool, aInt32, aUInt32, aInt64, aUInt64, aFloat, aDouble, aObject;
|
||||
@dynamic _hasTest, stopper, shouldNotBeCounted, anArray;
|
||||
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
#define FIELD_ENTRY(NAME, INDEX) \
|
||||
{ \
|
||||
.name = "a" #NAME, .hasIndex = INDEX, .type = GPBType##NAME, \
|
||||
.offset = offsetof(ApplyFunctionsTest_Storage, a##NAME), \
|
||||
}
|
||||
FIELD_ENTRY(Bool, 1),
|
||||
FIELD_ENTRY(Int32, 2),
|
||||
FIELD_ENTRY(UInt32, 3),
|
||||
FIELD_ENTRY(Int64, 4),
|
||||
FIELD_ENTRY(UInt64, 5),
|
||||
FIELD_ENTRY(Float, 6),
|
||||
FIELD_ENTRY(Double, 7),
|
||||
#undef FIELD_ENTRY
|
||||
{
|
||||
.name = "aObject",
|
||||
.type = GPBTypeString,
|
||||
.hasIndex = 8,
|
||||
.offset = offsetof(ApplyFunctionsTest_Storage, aObject),
|
||||
},
|
||||
{
|
||||
.name = "stopper",
|
||||
.type = GPBTypeBool,
|
||||
.hasIndex = 9,
|
||||
.offset = offsetof(ApplyFunctionsTest_Storage, stopper),
|
||||
},
|
||||
{
|
||||
.name = "shouldNotBeCounted",
|
||||
.type = GPBTypeBool,
|
||||
.hasIndex = 10,
|
||||
.offset = offsetof(ApplyFunctionsTest_Storage, shouldNotBeCounted),
|
||||
},
|
||||
{
|
||||
.name = "anArray",
|
||||
.type = GPBTypeInt32,
|
||||
.hasIndex = 11,
|
||||
.flags = GPBFieldRepeated,
|
||||
.offset = offsetof(ApplyFunctionsTest_Storage, anArray),
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor
|
||||
allocDescriptorForClass:[self class]
|
||||
rootClass:Nil
|
||||
file:nil
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) /
|
||||
sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(ApplyFunctionsTest_Storage)
|
||||
wireFormat:NO];
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
typedef struct {
|
||||
int calledBool;
|
||||
int calledInt32;
|
||||
int calledUInt32;
|
||||
int calledInt64;
|
||||
int calledUInt64;
|
||||
int calledFloat;
|
||||
int calledDouble;
|
||||
int calledObject;
|
||||
int hitCount;
|
||||
} TestApplyFunctionsContext;
|
||||
|
||||
// Really, who needs templates?
|
||||
// Macro for testing apply functions. Declares a variety of different functions
|
||||
// base on |NAME|.
|
||||
#define TEST_APPLY_FUNCTIONS_FUNC(NAME) \
|
||||
static BOOL TestApplyFunction##NAME(GPBFieldDescriptor *field, \
|
||||
void *voidContext) { \
|
||||
TestApplyFunctionsContext *context = voidContext; \
|
||||
if (field->getSel_ == sel_getUid("stopper")) return NO; \
|
||||
context->called##NAME += 1; \
|
||||
context->hitCount += 1; \
|
||||
return YES; \
|
||||
}
|
||||
|
||||
TEST_APPLY_FUNCTIONS_FUNC(Bool)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(Int32)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(UInt32)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(Int64)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(UInt64)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(Float)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(Double)
|
||||
TEST_APPLY_FUNCTIONS_FUNC(Object)
|
||||
|
||||
@implementation UtilitiesTests
|
||||
|
||||
- (void)testRightShiftFunctions {
|
||||
@ -194,61 +59,6 @@ TEST_APPLY_FUNCTIONS_FUNC(Object)
|
||||
XCTAssertEqual(GPBLogicalRightShift64((1LL << 63), 63), 1LL);
|
||||
}
|
||||
|
||||
- (void)testMutability {
|
||||
ApplyFunctionsTest *foo_message = [ApplyFunctionsTest message];
|
||||
XCTAssertEqual(0, [foo_message aInt32]);
|
||||
[foo_message setAInt32:100];
|
||||
XCTAssertEqual(100, [foo_message aInt32]);
|
||||
}
|
||||
|
||||
- (void)testSerializedSize {
|
||||
ApplyFunctionsTest *foo_message = [ApplyFunctionsTest message];
|
||||
[foo_message setAInt32:100];
|
||||
size_t size1 = [foo_message serializedSize];
|
||||
[foo_message setAInt64:100];
|
||||
size_t size2 = [foo_message serializedSize];
|
||||
|
||||
// Intentionally doing a pointer comparison.
|
||||
XCTAssertNotEqual(size1, size2);
|
||||
}
|
||||
|
||||
- (void)testCopying {
|
||||
ApplyFunctionsTest *foo_message = [ApplyFunctionsTest message];
|
||||
[foo_message setAInt32:100];
|
||||
[foo_message setAObject:@"Happy"];
|
||||
ApplyFunctionsTest *foo = [[foo_message copy] autorelease];
|
||||
XCTAssertNotEqual(foo, foo_message); // Pointer comparision
|
||||
XCTAssertEqualObjects(foo, foo_message);
|
||||
}
|
||||
|
||||
- (void)testApplyFunctions {
|
||||
// Covers ApplyFunctionsToProtoVariables and
|
||||
// ApplyFunctionsBasedOnEncodingType.
|
||||
// This test depends on the layout of the ivars to be in the order
|
||||
// declared in the interface. If this is not true, it will fail and will
|
||||
// need to be rewritten to accomodate.
|
||||
TestApplyFunctionsContext context;
|
||||
memset(&context, 0, sizeof(context));
|
||||
GPBApplyFunctions foo = GPBAPPLY_FUNCTIONS_INIT(TestApplyFunction);
|
||||
ApplyFunctionsTest *msg = [ApplyFunctionsTest message];
|
||||
GPBApplyFunctionsToMessageFields(&foo, msg, &context);
|
||||
|
||||
// Only eight vars should be set.
|
||||
// "stopper" should cause the loop to quit so it and shouldNotBeCounted should
|
||||
// not be counted.
|
||||
// "_hasTest" should be skipped over.
|
||||
// Each of the vars should only be set once.
|
||||
XCTAssertEqual(context.hitCount, 8);
|
||||
XCTAssertEqual(context.calledBool, 1);
|
||||
XCTAssertEqual(context.calledInt32, 1);
|
||||
XCTAssertEqual(context.calledUInt32, 1);
|
||||
XCTAssertEqual(context.calledInt64, 1);
|
||||
XCTAssertEqual(context.calledUInt64, 1);
|
||||
XCTAssertEqual(context.calledFloat, 1);
|
||||
XCTAssertEqual(context.calledDouble, 1);
|
||||
XCTAssertEqual(context.calledObject, 1);
|
||||
}
|
||||
|
||||
- (void)testGPBDecodeTextFormatName {
|
||||
uint8_t decodeData[] = {
|
||||
0x6,
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
#import "GPBCodedInputStream.h"
|
||||
#import "GPBMessage_PackagePrivate.h"
|
||||
#import "GPBField_PackagePrivate.h"
|
||||
#import "GPBUnknownField_PackagePrivate.h"
|
||||
#import "google/protobuf/Unittest.pbobjc.h"
|
||||
#import "google/protobuf/UnittestMset.pbobjc.h"
|
||||
|
||||
@ -143,8 +143,8 @@ const int kUnknownTypeId = 1550055;
|
||||
setI:123];
|
||||
[[message_set getExtension:[TestMessageSetExtension2 messageSetExtension]]
|
||||
setStr:@"foo"];
|
||||
GPBField* unknownField =
|
||||
[[[GPBField alloc] initWithNumber:kUnknownTypeId] autorelease];
|
||||
GPBUnknownField* unknownField =
|
||||
[[[GPBUnknownField alloc] initWithNumber:kUnknownTypeId] autorelease];
|
||||
[unknownField addLengthDelimited:[NSData dataWithBytes:"bar" length:3]];
|
||||
GPBUnknownFieldSet* unknownFieldSet =
|
||||
[[[GPBUnknownFieldSet alloc] init] autorelease];
|
||||
@ -159,9 +159,9 @@ const int kUnknownTypeId = 1550055;
|
||||
XCTAssertEqual([raw.unknownFields countOfFields], (NSUInteger)0);
|
||||
|
||||
XCTAssertEqual(raw.itemArray.count, (NSUInteger)3);
|
||||
XCTAssertEqual([raw.itemArray[0] typeId],
|
||||
XCTAssertEqual((uint32_t)[raw.itemArray[0] typeId],
|
||||
[TestMessageSetExtension1 messageSetExtension].fieldNumber);
|
||||
XCTAssertEqual([raw.itemArray[1] typeId],
|
||||
XCTAssertEqual((uint32_t)[raw.itemArray[1] typeId],
|
||||
[TestMessageSetExtension2 messageSetExtension].fieldNumber);
|
||||
XCTAssertEqual([raw.itemArray[2] typeId], kUnknownTypeId);
|
||||
|
||||
@ -227,7 +227,7 @@ const int kUnknownTypeId = 1550055;
|
||||
@"foo");
|
||||
|
||||
XCTAssertEqual([messageSet.unknownFields countOfFields], (NSUInteger)1);
|
||||
GPBField* unknownField = [messageSet.unknownFields getField:kUnknownTypeId];
|
||||
GPBUnknownField* unknownField = [messageSet.unknownFields getField:kUnknownTypeId];
|
||||
XCTAssertNotNil(unknownField);
|
||||
XCTAssertEqual(unknownField.lengthDelimitedList.count, (NSUInteger)1);
|
||||
XCTAssertEqualObjects(unknownField.lengthDelimitedList[0],
|
||||
|
@ -1,71 +0,0 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2013 Google Inc. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
syntax = "proto2";
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
|
||||
message Keep {
|
||||
}
|
||||
|
||||
message Remove {
|
||||
}
|
||||
|
||||
message RemoveJustKidding {
|
||||
}
|
||||
|
||||
message Other {
|
||||
optional Keep a = 1;
|
||||
optional Remove b = 2;
|
||||
}
|
||||
|
||||
enum RemoveEnum {
|
||||
RemoveValue = 1;
|
||||
}
|
||||
|
||||
enum KeepEnum {
|
||||
KeepValue = 1;
|
||||
}
|
||||
|
||||
message RemoveEnumMessage {
|
||||
enum KeepEnumInside {
|
||||
KeepValue = 1;
|
||||
}
|
||||
|
||||
enum RemoveEnumInside {
|
||||
RemoveValue = 1;
|
||||
}
|
||||
|
||||
message KeepNestedInside {
|
||||
}
|
||||
|
||||
message RemoveNestedInside {
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2015 Google Inc. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
syntax = "proto2";
|
||||
|
||||
option objc_class_prefix = "ABC";
|
||||
|
||||
package protobuf_unittest;
|
||||
|
||||
// TODO(thomasvl): Add tests for the special cases in name mangling.
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2014 Google Inc. All rights reserved.
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
@ -28,13 +28,22 @@
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
syntax = "proto2";
|
||||
|
||||
// Test the filter system for the ObjC Protocol Buffer Compiler.
|
||||
package protobuf_objc_unittest;
|
||||
|
||||
// Class names are matched using file name globbing rules.
|
||||
// Whitespace is not allowed at the beginning of a line (except for a line
|
||||
// that is a single newline).
|
||||
message TestObjCStartupMessage {
|
||||
extensions 1 to max;
|
||||
}
|
||||
|
||||
Keep
|
||||
RemoveEnumMessage_KeepNestedInside
|
||||
RemoveJustKidding
|
||||
extend TestObjCStartupMessage {
|
||||
// Singular
|
||||
optional int32 optional_int32_extension = 1;
|
||||
repeated int32 repeated_int32_extension = 2;
|
||||
}
|
||||
|
||||
message TestObjCStartupNested {
|
||||
extend TestObjCStartupMessage {
|
||||
optional string nested_string_extension = 3;
|
||||
}
|
||||
}
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBAnyRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBAnyRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -29,16 +32,16 @@ static GPBFileDescriptor *GPBAnyRoot_FileDescriptor(void) {
|
||||
@dynamic typeURL;
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBAny_Storage {
|
||||
typedef struct GPBAny__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *typeURL;
|
||||
NSData *value;
|
||||
} GPBAny_Storage;
|
||||
} GPBAny__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -46,10 +49,10 @@ typedef struct GPBAny_Storage {
|
||||
.number = GPBAny_FieldNumber_TypeURL,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBAny_Storage, typeURL),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBAny__storage_, typeURL),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -57,10 +60,10 @@ typedef struct GPBAny_Storage {
|
||||
.number = GPBAny_FieldNumber_Value,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeData,
|
||||
.offset = offsetof(GPBAny_Storage, value),
|
||||
.dataType = GPBDataTypeBytes,
|
||||
.offset = offsetof(GPBAny__storage_, value),
|
||||
.defaultValue.valueData = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
@ -69,20 +72,23 @@ typedef struct GPBAny_Storage {
|
||||
#else
|
||||
static const char *extraTextFormatInfo = "\001\001\004\241!!\000";
|
||||
#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBAny class]
|
||||
rootClass:[GPBAnyRoot class]
|
||||
file:GPBAnyRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBAny_Storage)
|
||||
wireFormat:NO
|
||||
extraTextFormatInfo:extraTextFormatInfo];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBAny class]
|
||||
rootClass:[GPBAnyRoot class]
|
||||
file:GPBAnyRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBAny__storage_)
|
||||
wireFormat:NO
|
||||
extraTextFormatInfo:extraTextFormatInfo];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -45,10 +45,12 @@ typedef GPB_ENUM(GPBApi_FieldNumber) {
|
||||
// The methods of this api, in unspecified order.
|
||||
// |methodsArray| contains |GPBMethod|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *methodsArray;
|
||||
@property(nonatomic, readonly) NSUInteger methodsArray_Count;
|
||||
|
||||
// Any metadata attached to the API.
|
||||
// |optionsArray| contains |GPBOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
|
||||
@property(nonatomic, readonly) NSUInteger optionsArray_Count;
|
||||
|
||||
// A version string for this api. If specified, must have the form
|
||||
// `major-version.minor-version`, as in `1.10`. If the minor version
|
||||
@ -113,6 +115,7 @@ typedef GPB_ENUM(GPBMethod_FieldNumber) {
|
||||
// Any metadata attached to the method.
|
||||
// |optionsArray| contains |GPBOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
|
||||
@property(nonatomic, readonly) NSUInteger optionsArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -16,10 +16,8 @@
|
||||
// about thread safety and initialization of registry.
|
||||
static GPBExtensionRegistry* registry = nil;
|
||||
if (!registry) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
registry = [[GPBExtensionRegistry alloc] init];
|
||||
static GPBExtensionDescription descriptions[] = {
|
||||
};
|
||||
#pragma unused (descriptions)
|
||||
[registry addExtensions:[GPBSourceContextRoot extensionRegistry]];
|
||||
[registry addExtensions:[GPBTypeRoot extensionRegistry]];
|
||||
}
|
||||
@ -28,11 +26,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBApiRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -44,24 +45,24 @@ static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) {
|
||||
@implementation GPBApi
|
||||
|
||||
@dynamic name;
|
||||
@dynamic methodsArray;
|
||||
@dynamic optionsArray;
|
||||
@dynamic methodsArray, methodsArray_Count;
|
||||
@dynamic optionsArray, optionsArray_Count;
|
||||
@dynamic version;
|
||||
@dynamic hasSourceContext, sourceContext;
|
||||
|
||||
typedef struct GPBApi_Storage {
|
||||
typedef struct GPBApi__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *name;
|
||||
NSMutableArray *methodsArray;
|
||||
NSMutableArray *optionsArray;
|
||||
NSString *version;
|
||||
GPBSourceContext *sourceContext;
|
||||
} GPBApi_Storage;
|
||||
} GPBApi__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -69,10 +70,10 @@ typedef struct GPBApi_Storage {
|
||||
.number = GPBApi_FieldNumber_Name,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBApi_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBApi__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -80,10 +81,10 @@ typedef struct GPBApi_Storage {
|
||||
.number = GPBApi_FieldNumber_MethodsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBApi_Storage, methodsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBApi__storage_, methodsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBMethod),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBMethod),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -91,10 +92,10 @@ typedef struct GPBApi_Storage {
|
||||
.number = GPBApi_FieldNumber_OptionsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBApi_Storage, optionsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBApi__storage_, optionsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -102,10 +103,10 @@ typedef struct GPBApi_Storage {
|
||||
.number = GPBApi_FieldNumber_Version,
|
||||
.hasIndex = 3,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBApi_Storage, version),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBApi__storage_, version),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -113,26 +114,29 @@ typedef struct GPBApi_Storage {
|
||||
.number = GPBApi_FieldNumber_SourceContext,
|
||||
.hasIndex = 4,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBApi_Storage, sourceContext),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBApi__storage_, sourceContext),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBSourceContext),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBApi class]
|
||||
rootClass:[GPBApiRoot class]
|
||||
file:GPBApiRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBApi_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBApi class]
|
||||
rootClass:[GPBApiRoot class]
|
||||
file:GPBApiRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBApi__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -148,9 +152,9 @@ typedef struct GPBApi_Storage {
|
||||
@dynamic requestStreaming;
|
||||
@dynamic responseTypeURL;
|
||||
@dynamic responseStreaming;
|
||||
@dynamic optionsArray;
|
||||
@dynamic optionsArray, optionsArray_Count;
|
||||
|
||||
typedef struct GPBMethod_Storage {
|
||||
typedef struct GPBMethod__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
BOOL requestStreaming;
|
||||
BOOL responseStreaming;
|
||||
@ -158,12 +162,12 @@ typedef struct GPBMethod_Storage {
|
||||
NSString *requestTypeURL;
|
||||
NSString *responseTypeURL;
|
||||
NSMutableArray *optionsArray;
|
||||
} GPBMethod_Storage;
|
||||
} GPBMethod__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -171,10 +175,10 @@ typedef struct GPBMethod_Storage {
|
||||
.number = GPBMethod_FieldNumber_Name,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBMethod_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBMethod__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -182,10 +186,10 @@ typedef struct GPBMethod_Storage {
|
||||
.number = GPBMethod_FieldNumber_RequestTypeURL,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBMethod_Storage, requestTypeURL),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBMethod__storage_, requestTypeURL),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -193,10 +197,10 @@ typedef struct GPBMethod_Storage {
|
||||
.number = GPBMethod_FieldNumber_RequestStreaming,
|
||||
.hasIndex = 2,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeBool,
|
||||
.offset = offsetof(GPBMethod_Storage, requestStreaming),
|
||||
.dataType = GPBDataTypeBool,
|
||||
.offset = offsetof(GPBMethod__storage_, requestStreaming),
|
||||
.defaultValue.valueBool = NO,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -204,10 +208,10 @@ typedef struct GPBMethod_Storage {
|
||||
.number = GPBMethod_FieldNumber_ResponseTypeURL,
|
||||
.hasIndex = 3,
|
||||
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBMethod_Storage, responseTypeURL),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBMethod__storage_, responseTypeURL),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -215,10 +219,10 @@ typedef struct GPBMethod_Storage {
|
||||
.number = GPBMethod_FieldNumber_ResponseStreaming,
|
||||
.hasIndex = 4,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeBool,
|
||||
.offset = offsetof(GPBMethod_Storage, responseStreaming),
|
||||
.dataType = GPBDataTypeBool,
|
||||
.offset = offsetof(GPBMethod__storage_, responseStreaming),
|
||||
.defaultValue.valueBool = NO,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -226,10 +230,10 @@ typedef struct GPBMethod_Storage {
|
||||
.number = GPBMethod_FieldNumber_OptionsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBMethod_Storage, optionsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBMethod__storage_, optionsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
@ -238,20 +242,23 @@ typedef struct GPBMethod_Storage {
|
||||
#else
|
||||
static const char *extraTextFormatInfo = "\002\002\007\244\241!!\000\004\010\244\241!!\000";
|
||||
#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBMethod class]
|
||||
rootClass:[GPBApiRoot class]
|
||||
file:GPBApiRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBMethod_Storage)
|
||||
wireFormat:NO
|
||||
extraTextFormatInfo:extraTextFormatInfo];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBMethod class]
|
||||
rootClass:[GPBApiRoot class]
|
||||
file:GPBApiRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBMethod__storage_)
|
||||
wireFormat:NO
|
||||
extraTextFormatInfo:extraTextFormatInfo];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -152,6 +152,7 @@ typedef GPB_ENUM(GPBFileDescriptorSet_FieldNumber) {
|
||||
|
||||
// |fileArray| contains |GPBFileDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *fileArray;
|
||||
@property(nonatomic, readonly) NSUInteger fileArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -186,26 +187,33 @@ typedef GPB_ENUM(GPBFileDescriptorProto_FieldNumber) {
|
||||
// Names of files imported by this file.
|
||||
// |dependencyArray| contains |NSString|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *dependencyArray;
|
||||
@property(nonatomic, readonly) NSUInteger dependencyArray_Count;
|
||||
|
||||
// Indexes of the public imported files in the dependency list above.
|
||||
@property(nonatomic, readwrite, strong) GPBInt32Array *publicDependencyArray;
|
||||
@property(nonatomic, readonly) NSUInteger publicDependencyArray_Count;
|
||||
|
||||
// Indexes of the weak imported files in the dependency list.
|
||||
// For Google-internal migration only. Do not use.
|
||||
@property(nonatomic, readwrite, strong) GPBInt32Array *weakDependencyArray;
|
||||
@property(nonatomic, readonly) NSUInteger weakDependencyArray_Count;
|
||||
|
||||
// All top-level definitions in this file.
|
||||
// |messageTypeArray| contains |GPBDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *messageTypeArray;
|
||||
@property(nonatomic, readonly) NSUInteger messageTypeArray_Count;
|
||||
|
||||
// |enumTypeArray| contains |GPBEnumDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *enumTypeArray;
|
||||
@property(nonatomic, readonly) NSUInteger enumTypeArray_Count;
|
||||
|
||||
// |serviceArray| contains |GPBServiceDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *serviceArray;
|
||||
@property(nonatomic, readonly) NSUInteger serviceArray_Count;
|
||||
|
||||
// |extensionArray| contains |GPBFieldDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *extensionArray;
|
||||
@property(nonatomic, readonly) NSUInteger extensionArray_Count;
|
||||
|
||||
@property(nonatomic, readwrite) BOOL hasOptions;
|
||||
@property(nonatomic, readwrite, strong) GPBFileOptions *options;
|
||||
@ -247,32 +255,40 @@ typedef GPB_ENUM(GPBDescriptorProto_FieldNumber) {
|
||||
|
||||
// |fieldArray| contains |GPBFieldDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *fieldArray;
|
||||
@property(nonatomic, readonly) NSUInteger fieldArray_Count;
|
||||
|
||||
// |extensionArray| contains |GPBFieldDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *extensionArray;
|
||||
@property(nonatomic, readonly) NSUInteger extensionArray_Count;
|
||||
|
||||
// |nestedTypeArray| contains |GPBDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *nestedTypeArray;
|
||||
@property(nonatomic, readonly) NSUInteger nestedTypeArray_Count;
|
||||
|
||||
// |enumTypeArray| contains |GPBEnumDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *enumTypeArray;
|
||||
@property(nonatomic, readonly) NSUInteger enumTypeArray_Count;
|
||||
|
||||
// |extensionRangeArray| contains |GPBDescriptorProto_ExtensionRange|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *extensionRangeArray;
|
||||
@property(nonatomic, readonly) NSUInteger extensionRangeArray_Count;
|
||||
|
||||
// |oneofDeclArray| contains |GPBOneofDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *oneofDeclArray;
|
||||
@property(nonatomic, readonly) NSUInteger oneofDeclArray_Count;
|
||||
|
||||
@property(nonatomic, readwrite) BOOL hasOptions;
|
||||
@property(nonatomic, readwrite, strong) GPBMessageOptions *options;
|
||||
|
||||
// |reservedRangeArray| contains |GPBDescriptorProto_ReservedRange|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *reservedRangeArray;
|
||||
@property(nonatomic, readonly) NSUInteger reservedRangeArray_Count;
|
||||
|
||||
// Reserved field names, which may not be used by fields in the same message.
|
||||
// A given name may only be reserved once.
|
||||
// |reservedNameArray| contains |NSString|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *reservedNameArray;
|
||||
@property(nonatomic, readonly) NSUInteger reservedNameArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -407,6 +423,7 @@ typedef GPB_ENUM(GPBEnumDescriptorProto_FieldNumber) {
|
||||
|
||||
// |valueArray| contains |GPBEnumValueDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *valueArray;
|
||||
@property(nonatomic, readonly) NSUInteger valueArray_Count;
|
||||
|
||||
@property(nonatomic, readwrite) BOOL hasOptions;
|
||||
@property(nonatomic, readwrite, strong) GPBEnumOptions *options;
|
||||
@ -451,6 +468,7 @@ typedef GPB_ENUM(GPBServiceDescriptorProto_FieldNumber) {
|
||||
|
||||
// |methodArray| contains |GPBMethodDescriptorProto|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *methodArray;
|
||||
@property(nonatomic, readonly) NSUInteger methodArray_Count;
|
||||
|
||||
@property(nonatomic, readwrite) BOOL hasOptions;
|
||||
@property(nonatomic, readwrite, strong) GPBServiceOptions *options;
|
||||
@ -617,6 +635,7 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -693,6 +712,7 @@ typedef GPB_ENUM(GPBMessageOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -782,6 +802,7 @@ typedef GPB_ENUM(GPBFieldOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -810,6 +831,7 @@ typedef GPB_ENUM(GPBEnumOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -832,6 +854,7 @@ typedef GPB_ENUM(GPBEnumValueOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -854,6 +877,7 @@ typedef GPB_ENUM(GPBServiceOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -876,6 +900,7 @@ typedef GPB_ENUM(GPBMethodOptions_FieldNumber) {
|
||||
// The parser stores options it doesn't recognize here. See above.
|
||||
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
|
||||
@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -901,6 +926,7 @@ typedef GPB_ENUM(GPBUninterpretedOption_FieldNumber) {
|
||||
|
||||
// |nameArray| contains |GPBUninterpretedOption_NamePart|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *nameArray;
|
||||
@property(nonatomic, readonly) NSUInteger nameArray_Count;
|
||||
|
||||
// The value of the uninterpreted option, in whatever type the tokenizer
|
||||
// identified it as during parsing. Exactly one of these should be set.
|
||||
@ -1001,6 +1027,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_FieldNumber) {
|
||||
// be recorded in the future.
|
||||
// |locationArray| contains |GPBSourceCodeInfo_Location|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *locationArray;
|
||||
@property(nonatomic, readonly) NSUInteger locationArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -1040,6 +1067,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_Location_FieldNumber) {
|
||||
// this path refers to the whole field declaration (from the beginning
|
||||
// of the label to the terminating semicolon).
|
||||
@property(nonatomic, readwrite, strong) GPBInt32Array *pathArray;
|
||||
@property(nonatomic, readonly) NSUInteger pathArray_Count;
|
||||
|
||||
// Always has exactly three or four elements: start line, start column,
|
||||
// end line (optional, otherwise assumed same as start line), end column.
|
||||
@ -1047,6 +1075,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_Location_FieldNumber) {
|
||||
// and column numbers are zero-based -- typically you will want to add
|
||||
// 1 to each before displaying to a user.
|
||||
@property(nonatomic, readwrite, strong) GPBInt32Array *spanArray;
|
||||
@property(nonatomic, readonly) NSUInteger spanArray_Count;
|
||||
|
||||
// If this SourceCodeInfo represents a complete declaration, these are any
|
||||
// comments appearing before and after the declaration which appear to be
|
||||
@ -1103,6 +1132,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_Location_FieldNumber) {
|
||||
|
||||
// |leadingDetachedCommentsArray| contains |NSString|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *leadingDetachedCommentsArray;
|
||||
@property(nonatomic, readonly) NSUInteger leadingDetachedCommentsArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBDurationRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBDurationRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -29,16 +32,16 @@ static GPBFileDescriptor *GPBDurationRoot_FileDescriptor(void) {
|
||||
@dynamic seconds;
|
||||
@dynamic nanos;
|
||||
|
||||
typedef struct GPBDuration_Storage {
|
||||
typedef struct GPBDuration__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
int32_t nanos;
|
||||
int64_t seconds;
|
||||
} GPBDuration_Storage;
|
||||
} GPBDuration__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -46,10 +49,10 @@ typedef struct GPBDuration_Storage {
|
||||
.number = GPBDuration_FieldNumber_Seconds,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt64,
|
||||
.offset = offsetof(GPBDuration_Storage, seconds),
|
||||
.dataType = GPBDataTypeInt64,
|
||||
.offset = offsetof(GPBDuration__storage_, seconds),
|
||||
.defaultValue.valueInt64 = 0LL,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -57,26 +60,29 @@ typedef struct GPBDuration_Storage {
|
||||
.number = GPBDuration_FieldNumber_Nanos,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt32,
|
||||
.offset = offsetof(GPBDuration_Storage, nanos),
|
||||
.dataType = GPBDataTypeInt32,
|
||||
.offset = offsetof(GPBDuration__storage_, nanos),
|
||||
.defaultValue.valueInt32 = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDuration class]
|
||||
rootClass:[GPBDurationRoot class]
|
||||
file:GPBDurationRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBDuration_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBDuration class]
|
||||
rootClass:[GPBDurationRoot class]
|
||||
file:GPBDurationRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBDuration__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBEmptyRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBEmptyRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -27,30 +30,31 @@ static GPBFileDescriptor *GPBEmptyRoot_FileDescriptor(void) {
|
||||
@implementation GPBEmpty
|
||||
|
||||
|
||||
typedef struct GPBEmpty_Storage {
|
||||
typedef struct GPBEmpty__storage_ {
|
||||
uint32_t _has_storage_[0];
|
||||
} GPBEmpty_Storage;
|
||||
} GPBEmpty__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEmpty class]
|
||||
rootClass:[GPBEmptyRoot class]
|
||||
file:GPBEmptyRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBEmpty_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBEmpty class]
|
||||
rootClass:[GPBEmptyRoot class]
|
||||
file:GPBEmptyRoot_FileDescriptor()
|
||||
fields:NULL
|
||||
fieldCount:0
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBEmpty__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -152,6 +152,7 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
|
||||
// The set of field mask paths.
|
||||
// |pathsArray| contains |NSString|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *pathsArray;
|
||||
@property(nonatomic, readonly) NSUInteger pathsArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBFieldMaskRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBFieldMaskRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -26,17 +29,17 @@ static GPBFileDescriptor *GPBFieldMaskRoot_FileDescriptor(void) {
|
||||
|
||||
@implementation GPBFieldMask
|
||||
|
||||
@dynamic pathsArray;
|
||||
@dynamic pathsArray, pathsArray_Count;
|
||||
|
||||
typedef struct GPBFieldMask_Storage {
|
||||
typedef struct GPBFieldMask__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSMutableArray *pathsArray;
|
||||
} GPBFieldMask_Storage;
|
||||
} GPBFieldMask__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -44,26 +47,29 @@ typedef struct GPBFieldMask_Storage {
|
||||
.number = GPBFieldMask_FieldNumber_PathsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBFieldMask_Storage, pathsArray),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBFieldMask__storage_, pathsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFieldMask class]
|
||||
rootClass:[GPBFieldMaskRoot class]
|
||||
file:GPBFieldMaskRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBFieldMask_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBFieldMask class]
|
||||
rootClass:[GPBFieldMaskRoot class]
|
||||
file:GPBFieldMaskRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBFieldMask__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBSourceContextRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBSourceContextRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -28,15 +31,15 @@ static GPBFileDescriptor *GPBSourceContextRoot_FileDescriptor(void) {
|
||||
|
||||
@dynamic fileName;
|
||||
|
||||
typedef struct GPBSourceContext_Storage {
|
||||
typedef struct GPBSourceContext__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *fileName;
|
||||
} GPBSourceContext_Storage;
|
||||
} GPBSourceContext__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -44,26 +47,29 @@ typedef struct GPBSourceContext_Storage {
|
||||
.number = GPBSourceContext_FieldNumber_FileName,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBSourceContext_Storage, fileName),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBSourceContext__storage_, fileName),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBSourceContext class]
|
||||
rootClass:[GPBSourceContextRoot class]
|
||||
file:GPBSourceContextRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBSourceContext_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBSourceContext class]
|
||||
rootClass:[GPBSourceContextRoot class]
|
||||
file:GPBSourceContextRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBSourceContext__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ typedef GPB_ENUM(GPBStruct_FieldNumber) {
|
||||
// Map of dynamically typed values.
|
||||
// |fields| values are |GPBValue|
|
||||
@property(nonatomic, readwrite, strong) NSMutableDictionary *fields;
|
||||
@property(nonatomic, readonly) NSUInteger fields_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -126,6 +127,7 @@ typedef GPB_ENUM(GPBListValue_FieldNumber) {
|
||||
// Repeated field of dynamically typed values.
|
||||
// |valuesArray| contains |GPBValue|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *valuesArray;
|
||||
@property(nonatomic, readonly) NSUInteger valuesArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBStructRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBStructRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -51,17 +54,17 @@ BOOL GPBNullValue_IsValidValue(int32_t value__) {
|
||||
|
||||
@implementation GPBStruct
|
||||
|
||||
@dynamic fields;
|
||||
@dynamic fields, fields_Count;
|
||||
|
||||
typedef struct GPBStruct_Storage {
|
||||
typedef struct GPBStruct__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSMutableDictionary *fields;
|
||||
} GPBStruct_Storage;
|
||||
} GPBStruct__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -69,26 +72,29 @@ typedef struct GPBStruct_Storage {
|
||||
.number = GPBStruct_FieldNumber_Fields,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldMapKeyString,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBStruct_Storage, fields),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBStruct__storage_, fields),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBValue),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBValue),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBStruct class]
|
||||
rootClass:[GPBStructRoot class]
|
||||
file:GPBStructRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBStruct_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBStruct class]
|
||||
rootClass:[GPBStructRoot class]
|
||||
file:GPBStructRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBStruct__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -107,7 +113,7 @@ typedef struct GPBStruct_Storage {
|
||||
@dynamic structValue;
|
||||
@dynamic listValue;
|
||||
|
||||
typedef struct GPBValue_Storage {
|
||||
typedef struct GPBValue__storage_ {
|
||||
uint32_t _has_storage_[2];
|
||||
BOOL boolValue;
|
||||
GPBNullValue nullValue;
|
||||
@ -115,12 +121,12 @@ typedef struct GPBValue_Storage {
|
||||
GPBStruct *structValue;
|
||||
GPBListValue *listValue;
|
||||
double numberValue;
|
||||
} GPBValue_Storage;
|
||||
} GPBValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageOneofDescription oneofs[] = {
|
||||
{
|
||||
@ -134,10 +140,10 @@ typedef struct GPBValue_Storage {
|
||||
.number = GPBValue_FieldNumber_NullValue,
|
||||
.hasIndex = -1,
|
||||
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
|
||||
.type = GPBTypeEnum,
|
||||
.offset = offsetof(GPBValue_Storage, nullValue),
|
||||
.dataType = GPBDataTypeEnum,
|
||||
.offset = offsetof(GPBValue__storage_, nullValue),
|
||||
.defaultValue.valueEnum = GPBNullValue_NullValue,
|
||||
.typeSpecific.enumDescFunc = GPBNullValue_EnumDescriptor,
|
||||
.dataTypeSpecific.enumDescFunc = GPBNullValue_EnumDescriptor,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -145,10 +151,10 @@ typedef struct GPBValue_Storage {
|
||||
.number = GPBValue_FieldNumber_NumberValue,
|
||||
.hasIndex = -1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeDouble,
|
||||
.offset = offsetof(GPBValue_Storage, numberValue),
|
||||
.dataType = GPBDataTypeDouble,
|
||||
.offset = offsetof(GPBValue__storage_, numberValue),
|
||||
.defaultValue.valueDouble = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -156,10 +162,10 @@ typedef struct GPBValue_Storage {
|
||||
.number = GPBValue_FieldNumber_StringValue,
|
||||
.hasIndex = -1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBValue_Storage, stringValue),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBValue__storage_, stringValue),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -167,10 +173,10 @@ typedef struct GPBValue_Storage {
|
||||
.number = GPBValue_FieldNumber_BoolValue,
|
||||
.hasIndex = -1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeBool,
|
||||
.offset = offsetof(GPBValue_Storage, boolValue),
|
||||
.dataType = GPBDataTypeBool,
|
||||
.offset = offsetof(GPBValue__storage_, boolValue),
|
||||
.defaultValue.valueBool = NO,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -178,10 +184,10 @@ typedef struct GPBValue_Storage {
|
||||
.number = GPBValue_FieldNumber_StructValue,
|
||||
.hasIndex = -1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBValue_Storage, structValue),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBValue__storage_, structValue),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBStruct),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBStruct),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -189,26 +195,29 @@ typedef struct GPBValue_Storage {
|
||||
.number = GPBValue_FieldNumber_ListValue,
|
||||
.hasIndex = -1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBValue_Storage, listValue),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBValue__storage_, listValue),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBListValue),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBListValue),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBValue class]
|
||||
rootClass:[GPBStructRoot class]
|
||||
file:GPBStructRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:oneofs
|
||||
oneofCount:sizeof(oneofs) / sizeof(GPBMessageOneofDescription)
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBValue class]
|
||||
rootClass:[GPBStructRoot class]
|
||||
file:GPBStructRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:oneofs
|
||||
oneofCount:sizeof(oneofs) / sizeof(GPBMessageOneofDescription)
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -218,7 +227,7 @@ typedef struct GPBValue_Storage {
|
||||
int32_t GPBValue_NullValue_RawValue(GPBValue *message) {
|
||||
GPBDescriptor *descriptor = [GPBValue descriptor];
|
||||
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBValue_FieldNumber_NullValue];
|
||||
return GPBGetInt32IvarWithField(message, field);
|
||||
return GPBGetMessageInt32Field(message, field);
|
||||
}
|
||||
|
||||
void SetGPBValue_NullValue_RawValue(GPBValue *message, int32_t value) {
|
||||
@ -236,17 +245,17 @@ void GPBValue_ClearKindOneOfCase(GPBValue *message) {
|
||||
|
||||
@implementation GPBListValue
|
||||
|
||||
@dynamic valuesArray;
|
||||
@dynamic valuesArray, valuesArray_Count;
|
||||
|
||||
typedef struct GPBListValue_Storage {
|
||||
typedef struct GPBListValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSMutableArray *valuesArray;
|
||||
} GPBListValue_Storage;
|
||||
} GPBListValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -254,26 +263,29 @@ typedef struct GPBListValue_Storage {
|
||||
.number = GPBListValue_FieldNumber_ValuesArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBListValue_Storage, valuesArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBListValue__storage_, valuesArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBValue),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBValue),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBListValue class]
|
||||
rootClass:[GPBStructRoot class]
|
||||
file:GPBStructRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBListValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBListValue class]
|
||||
rootClass:[GPBStructRoot class]
|
||||
file:GPBStructRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBListValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBTimestampRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBTimestampRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -29,16 +32,16 @@ static GPBFileDescriptor *GPBTimestampRoot_FileDescriptor(void) {
|
||||
@dynamic seconds;
|
||||
@dynamic nanos;
|
||||
|
||||
typedef struct GPBTimestamp_Storage {
|
||||
typedef struct GPBTimestamp__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
int32_t nanos;
|
||||
int64_t seconds;
|
||||
} GPBTimestamp_Storage;
|
||||
} GPBTimestamp__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -46,10 +49,10 @@ typedef struct GPBTimestamp_Storage {
|
||||
.number = GPBTimestamp_FieldNumber_Seconds,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt64,
|
||||
.offset = offsetof(GPBTimestamp_Storage, seconds),
|
||||
.dataType = GPBDataTypeInt64,
|
||||
.offset = offsetof(GPBTimestamp__storage_, seconds),
|
||||
.defaultValue.valueInt64 = 0LL,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -57,26 +60,29 @@ typedef struct GPBTimestamp_Storage {
|
||||
.number = GPBTimestamp_FieldNumber_Nanos,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt32,
|
||||
.offset = offsetof(GPBTimestamp_Storage, nanos),
|
||||
.dataType = GPBDataTypeInt32,
|
||||
.offset = offsetof(GPBTimestamp__storage_, nanos),
|
||||
.defaultValue.valueInt32 = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBTimestamp class]
|
||||
rootClass:[GPBTimestampRoot class]
|
||||
file:GPBTimestampRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBTimestamp_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBTimestamp class]
|
||||
rootClass:[GPBTimestampRoot class]
|
||||
file:GPBTimestampRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBTimestamp__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -132,15 +132,18 @@ typedef GPB_ENUM(GPBType_FieldNumber) {
|
||||
// The list of fields.
|
||||
// |fieldsArray| contains |GPBField|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *fieldsArray;
|
||||
@property(nonatomic, readonly) NSUInteger fieldsArray_Count;
|
||||
|
||||
// The list of oneof definitions.
|
||||
// The list of oneofs declared in this Type
|
||||
// |oneofsArray| contains |NSString|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *oneofsArray;
|
||||
@property(nonatomic, readonly) NSUInteger oneofsArray_Count;
|
||||
|
||||
// The proto options.
|
||||
// |optionsArray| contains |GPBOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
|
||||
@property(nonatomic, readonly) NSUInteger optionsArray_Count;
|
||||
|
||||
// The source context.
|
||||
@property(nonatomic, readwrite) BOOL hasSourceContext;
|
||||
@ -189,6 +192,7 @@ typedef GPB_ENUM(GPBField_FieldNumber) {
|
||||
// The proto options.
|
||||
// |optionsArray| contains |GPBOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
|
||||
@property(nonatomic, readonly) NSUInteger optionsArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
@ -216,10 +220,12 @@ typedef GPB_ENUM(GPBEnum_FieldNumber) {
|
||||
// Enum value definitions.
|
||||
// |enumvalueArray| contains |GPBEnumValue|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *enumvalueArray;
|
||||
@property(nonatomic, readonly) NSUInteger enumvalueArray_Count;
|
||||
|
||||
// Proto options for the enum type.
|
||||
// |optionsArray| contains |GPBOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
|
||||
@property(nonatomic, readonly) NSUInteger optionsArray_Count;
|
||||
|
||||
// The source context.
|
||||
@property(nonatomic, readwrite) BOOL hasSourceContext;
|
||||
@ -247,6 +253,7 @@ typedef GPB_ENUM(GPBEnumValue_FieldNumber) {
|
||||
// Proto options for the enum value.
|
||||
// |optionsArray| contains |GPBOption|
|
||||
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
|
||||
@property(nonatomic, readonly) NSUInteger optionsArray_Count;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -16,10 +16,8 @@
|
||||
// about thread safety and initialization of registry.
|
||||
static GPBExtensionRegistry* registry = nil;
|
||||
if (!registry) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
registry = [[GPBExtensionRegistry alloc] init];
|
||||
static GPBExtensionDescription descriptions[] = {
|
||||
};
|
||||
#pragma unused (descriptions)
|
||||
[registry addExtensions:[GPBAnyRoot extensionRegistry]];
|
||||
[registry addExtensions:[GPBSourceContextRoot extensionRegistry]];
|
||||
}
|
||||
@ -28,11 +26,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBTypeRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -44,24 +45,24 @@ static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) {
|
||||
@implementation GPBType
|
||||
|
||||
@dynamic name;
|
||||
@dynamic fieldsArray;
|
||||
@dynamic oneofsArray;
|
||||
@dynamic optionsArray;
|
||||
@dynamic fieldsArray, fieldsArray_Count;
|
||||
@dynamic oneofsArray, oneofsArray_Count;
|
||||
@dynamic optionsArray, optionsArray_Count;
|
||||
@dynamic hasSourceContext, sourceContext;
|
||||
|
||||
typedef struct GPBType_Storage {
|
||||
typedef struct GPBType__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *name;
|
||||
NSMutableArray *fieldsArray;
|
||||
NSMutableArray *oneofsArray;
|
||||
NSMutableArray *optionsArray;
|
||||
GPBSourceContext *sourceContext;
|
||||
} GPBType_Storage;
|
||||
} GPBType__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -69,10 +70,10 @@ typedef struct GPBType_Storage {
|
||||
.number = GPBType_FieldNumber_Name,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBType_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBType__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -80,10 +81,10 @@ typedef struct GPBType_Storage {
|
||||
.number = GPBType_FieldNumber_FieldsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBType_Storage, fieldsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBType__storage_, fieldsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBField),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBField),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -91,10 +92,10 @@ typedef struct GPBType_Storage {
|
||||
.number = GPBType_FieldNumber_OneofsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBType_Storage, oneofsArray),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBType__storage_, oneofsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -102,10 +103,10 @@ typedef struct GPBType_Storage {
|
||||
.number = GPBType_FieldNumber_OptionsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBType_Storage, optionsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBType__storage_, optionsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -113,26 +114,29 @@ typedef struct GPBType_Storage {
|
||||
.number = GPBType_FieldNumber_SourceContext,
|
||||
.hasIndex = 4,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBType_Storage, sourceContext),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBType__storage_, sourceContext),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBSourceContext),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBType class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBType_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBType class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBType__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -150,9 +154,9 @@ typedef struct GPBType_Storage {
|
||||
@dynamic typeURL;
|
||||
@dynamic oneofIndex;
|
||||
@dynamic packed;
|
||||
@dynamic optionsArray;
|
||||
@dynamic optionsArray, optionsArray_Count;
|
||||
|
||||
typedef struct GPBField_Storage {
|
||||
typedef struct GPBField__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
BOOL packed;
|
||||
GPBField_Kind kind;
|
||||
@ -162,12 +166,12 @@ typedef struct GPBField_Storage {
|
||||
NSString *name;
|
||||
NSString *typeURL;
|
||||
NSMutableArray *optionsArray;
|
||||
} GPBField_Storage;
|
||||
} GPBField__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -175,10 +179,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_Kind,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
|
||||
.type = GPBTypeEnum,
|
||||
.offset = offsetof(GPBField_Storage, kind),
|
||||
.dataType = GPBDataTypeEnum,
|
||||
.offset = offsetof(GPBField__storage_, kind),
|
||||
.defaultValue.valueEnum = GPBField_Kind_TypeUnknown,
|
||||
.typeSpecific.enumDescFunc = GPBField_Kind_EnumDescriptor,
|
||||
.dataTypeSpecific.enumDescFunc = GPBField_Kind_EnumDescriptor,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -186,10 +190,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_Cardinality,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
|
||||
.type = GPBTypeEnum,
|
||||
.offset = offsetof(GPBField_Storage, cardinality),
|
||||
.dataType = GPBDataTypeEnum,
|
||||
.offset = offsetof(GPBField__storage_, cardinality),
|
||||
.defaultValue.valueEnum = GPBField_Cardinality_CardinalityUnknown,
|
||||
.typeSpecific.enumDescFunc = GPBField_Cardinality_EnumDescriptor,
|
||||
.dataTypeSpecific.enumDescFunc = GPBField_Cardinality_EnumDescriptor,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -197,10 +201,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_Number,
|
||||
.hasIndex = 2,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt32,
|
||||
.offset = offsetof(GPBField_Storage, number),
|
||||
.dataType = GPBDataTypeInt32,
|
||||
.offset = offsetof(GPBField__storage_, number),
|
||||
.defaultValue.valueInt32 = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -208,10 +212,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_Name,
|
||||
.hasIndex = 3,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBField_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBField__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -219,10 +223,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_TypeURL,
|
||||
.hasIndex = 4,
|
||||
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBField_Storage, typeURL),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBField__storage_, typeURL),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -230,10 +234,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_OneofIndex,
|
||||
.hasIndex = 5,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt32,
|
||||
.offset = offsetof(GPBField_Storage, oneofIndex),
|
||||
.dataType = GPBDataTypeInt32,
|
||||
.offset = offsetof(GPBField__storage_, oneofIndex),
|
||||
.defaultValue.valueInt32 = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -241,10 +245,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_Packed,
|
||||
.hasIndex = 6,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeBool,
|
||||
.offset = offsetof(GPBField_Storage, packed),
|
||||
.dataType = GPBDataTypeBool,
|
||||
.offset = offsetof(GPBField__storage_, packed),
|
||||
.defaultValue.valueBool = NO,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -252,10 +256,10 @@ typedef struct GPBField_Storage {
|
||||
.number = GPBField_FieldNumber_OptionsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBField_Storage, optionsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBField__storage_, optionsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
@ -268,20 +272,23 @@ typedef struct GPBField_Storage {
|
||||
#else
|
||||
static const char *extraTextFormatInfo = "\001\006\004\241!!\000";
|
||||
#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBField class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:enums
|
||||
enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBField_Storage)
|
||||
wireFormat:NO
|
||||
extraTextFormatInfo:extraTextFormatInfo];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBField class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:enums
|
||||
enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBField__storage_)
|
||||
wireFormat:NO
|
||||
extraTextFormatInfo:extraTextFormatInfo];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -291,7 +298,7 @@ typedef struct GPBField_Storage {
|
||||
int32_t GPBField_Kind_RawValue(GPBField *message) {
|
||||
GPBDescriptor *descriptor = [GPBField descriptor];
|
||||
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Kind];
|
||||
return GPBGetInt32IvarWithField(message, field);
|
||||
return GPBGetMessageInt32Field(message, field);
|
||||
}
|
||||
|
||||
void SetGPBField_Kind_RawValue(GPBField *message, int32_t value) {
|
||||
@ -303,7 +310,7 @@ void SetGPBField_Kind_RawValue(GPBField *message, int32_t value) {
|
||||
int32_t GPBField_Cardinality_RawValue(GPBField *message) {
|
||||
GPBDescriptor *descriptor = [GPBField descriptor];
|
||||
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Cardinality];
|
||||
return GPBGetInt32IvarWithField(message, field);
|
||||
return GPBGetMessageInt32Field(message, field);
|
||||
}
|
||||
|
||||
void SetGPBField_Cardinality_RawValue(GPBField *message, int32_t value) {
|
||||
@ -407,22 +414,22 @@ BOOL GPBField_Cardinality_IsValidValue(int32_t value__) {
|
||||
@implementation GPBEnum
|
||||
|
||||
@dynamic name;
|
||||
@dynamic enumvalueArray;
|
||||
@dynamic optionsArray;
|
||||
@dynamic enumvalueArray, enumvalueArray_Count;
|
||||
@dynamic optionsArray, optionsArray_Count;
|
||||
@dynamic hasSourceContext, sourceContext;
|
||||
|
||||
typedef struct GPBEnum_Storage {
|
||||
typedef struct GPBEnum__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *name;
|
||||
NSMutableArray *enumvalueArray;
|
||||
NSMutableArray *optionsArray;
|
||||
GPBSourceContext *sourceContext;
|
||||
} GPBEnum_Storage;
|
||||
} GPBEnum__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -430,10 +437,10 @@ typedef struct GPBEnum_Storage {
|
||||
.number = GPBEnum_FieldNumber_Name,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBEnum_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBEnum__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -441,10 +448,10 @@ typedef struct GPBEnum_Storage {
|
||||
.number = GPBEnum_FieldNumber_EnumvalueArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBEnum_Storage, enumvalueArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBEnum__storage_, enumvalueArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBEnumValue),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBEnumValue),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -452,10 +459,10 @@ typedef struct GPBEnum_Storage {
|
||||
.number = GPBEnum_FieldNumber_OptionsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBEnum_Storage, optionsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBEnum__storage_, optionsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -463,26 +470,29 @@ typedef struct GPBEnum_Storage {
|
||||
.number = GPBEnum_FieldNumber_SourceContext,
|
||||
.hasIndex = 3,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBEnum_Storage, sourceContext),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBEnum__storage_, sourceContext),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBSourceContext),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnum class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBEnum_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBEnum class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBEnum__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -495,19 +505,19 @@ typedef struct GPBEnum_Storage {
|
||||
|
||||
@dynamic name;
|
||||
@dynamic number;
|
||||
@dynamic optionsArray;
|
||||
@dynamic optionsArray, optionsArray_Count;
|
||||
|
||||
typedef struct GPBEnumValue_Storage {
|
||||
typedef struct GPBEnumValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
int32_t number;
|
||||
NSString *name;
|
||||
NSMutableArray *optionsArray;
|
||||
} GPBEnumValue_Storage;
|
||||
} GPBEnumValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -515,10 +525,10 @@ typedef struct GPBEnumValue_Storage {
|
||||
.number = GPBEnumValue_FieldNumber_Name,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBEnumValue_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBEnumValue__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -526,10 +536,10 @@ typedef struct GPBEnumValue_Storage {
|
||||
.number = GPBEnumValue_FieldNumber_Number,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt32,
|
||||
.offset = offsetof(GPBEnumValue_Storage, number),
|
||||
.dataType = GPBDataTypeInt32,
|
||||
.offset = offsetof(GPBEnumValue__storage_, number),
|
||||
.defaultValue.valueInt32 = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -537,26 +547,29 @@ typedef struct GPBEnumValue_Storage {
|
||||
.number = GPBEnumValue_FieldNumber_OptionsArray,
|
||||
.hasIndex = GPBNoHasBit,
|
||||
.flags = GPBFieldRepeated,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBEnumValue_Storage, optionsArray),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBEnumValue__storage_, optionsArray),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnumValue class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBEnumValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBEnumValue class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBEnumValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -570,16 +583,16 @@ typedef struct GPBEnumValue_Storage {
|
||||
@dynamic name;
|
||||
@dynamic hasValue, value;
|
||||
|
||||
typedef struct GPBOption_Storage {
|
||||
typedef struct GPBOption__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *name;
|
||||
GPBAny *value;
|
||||
} GPBOption_Storage;
|
||||
} GPBOption__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -587,10 +600,10 @@ typedef struct GPBOption_Storage {
|
||||
.number = GPBOption_FieldNumber_Name,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBOption_Storage, name),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBOption__storage_, name),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
{
|
||||
@ -598,26 +611,29 @@ typedef struct GPBOption_Storage {
|
||||
.number = GPBOption_FieldNumber_Value,
|
||||
.hasIndex = 1,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeMessage,
|
||||
.offset = offsetof(GPBOption_Storage, value),
|
||||
.dataType = GPBDataTypeMessage,
|
||||
.offset = offsetof(GPBOption__storage_, value),
|
||||
.defaultValue.valueMessage = nil,
|
||||
.typeSpecific.className = GPBStringifySymbol(GPBAny),
|
||||
.dataTypeSpecific.className = GPBStringifySymbol(GPBAny),
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBOption class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBOption_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBOption class]
|
||||
rootClass:[GPBTypeRoot class]
|
||||
file:GPBTypeRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBOption__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -11,11 +11,14 @@
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - GPBWrappersRoot_FileDescriptor
|
||||
|
||||
static GPBFileDescriptor *GPBWrappersRoot_FileDescriptor(void) {
|
||||
// This is called by +initialize so there is no need to worry
|
||||
// about thread safety of the singleton.
|
||||
static GPBFileDescriptor *descriptor = NULL;
|
||||
if (!descriptor) {
|
||||
GPBDebugCheckRuntimeVersion();
|
||||
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
|
||||
syntax:GPBFileSyntaxProto3];
|
||||
}
|
||||
@ -28,15 +31,15 @@ static GPBFileDescriptor *GPBWrappersRoot_FileDescriptor(void) {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBDoubleValue_Storage {
|
||||
typedef struct GPBDoubleValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
double value;
|
||||
} GPBDoubleValue_Storage;
|
||||
} GPBDoubleValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -44,26 +47,29 @@ typedef struct GPBDoubleValue_Storage {
|
||||
.number = GPBDoubleValue_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeDouble,
|
||||
.offset = offsetof(GPBDoubleValue_Storage, value),
|
||||
.dataType = GPBDataTypeDouble,
|
||||
.offset = offsetof(GPBDoubleValue__storage_, value),
|
||||
.defaultValue.valueDouble = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDoubleValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBDoubleValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBDoubleValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBDoubleValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -76,15 +82,15 @@ typedef struct GPBDoubleValue_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBFloatValue_Storage {
|
||||
typedef struct GPBFloatValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
float value;
|
||||
} GPBFloatValue_Storage;
|
||||
} GPBFloatValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -92,26 +98,29 @@ typedef struct GPBFloatValue_Storage {
|
||||
.number = GPBFloatValue_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeFloat,
|
||||
.offset = offsetof(GPBFloatValue_Storage, value),
|
||||
.dataType = GPBDataTypeFloat,
|
||||
.offset = offsetof(GPBFloatValue__storage_, value),
|
||||
.defaultValue.valueFloat = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFloatValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBFloatValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBFloatValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBFloatValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -124,15 +133,15 @@ typedef struct GPBFloatValue_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBInt64Value_Storage {
|
||||
typedef struct GPBInt64Value__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
int64_t value;
|
||||
} GPBInt64Value_Storage;
|
||||
} GPBInt64Value__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -140,26 +149,29 @@ typedef struct GPBInt64Value_Storage {
|
||||
.number = GPBInt64Value_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt64,
|
||||
.offset = offsetof(GPBInt64Value_Storage, value),
|
||||
.dataType = GPBDataTypeInt64,
|
||||
.offset = offsetof(GPBInt64Value__storage_, value),
|
||||
.defaultValue.valueInt64 = 0LL,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBInt64Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBInt64Value_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBInt64Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBInt64Value__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -172,15 +184,15 @@ typedef struct GPBInt64Value_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBUInt64Value_Storage {
|
||||
typedef struct GPBUInt64Value__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
uint64_t value;
|
||||
} GPBUInt64Value_Storage;
|
||||
} GPBUInt64Value__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -188,26 +200,29 @@ typedef struct GPBUInt64Value_Storage {
|
||||
.number = GPBUInt64Value_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeUInt64,
|
||||
.offset = offsetof(GPBUInt64Value_Storage, value),
|
||||
.dataType = GPBDataTypeUInt64,
|
||||
.offset = offsetof(GPBUInt64Value__storage_, value),
|
||||
.defaultValue.valueUInt64 = 0ULL,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBUInt64Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBUInt64Value_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBUInt64Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBUInt64Value__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -220,15 +235,15 @@ typedef struct GPBUInt64Value_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBInt32Value_Storage {
|
||||
typedef struct GPBInt32Value__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
int32_t value;
|
||||
} GPBInt32Value_Storage;
|
||||
} GPBInt32Value__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -236,26 +251,29 @@ typedef struct GPBInt32Value_Storage {
|
||||
.number = GPBInt32Value_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeInt32,
|
||||
.offset = offsetof(GPBInt32Value_Storage, value),
|
||||
.dataType = GPBDataTypeInt32,
|
||||
.offset = offsetof(GPBInt32Value__storage_, value),
|
||||
.defaultValue.valueInt32 = 0,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBInt32Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBInt32Value_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBInt32Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBInt32Value__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -268,15 +286,15 @@ typedef struct GPBInt32Value_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBUInt32Value_Storage {
|
||||
typedef struct GPBUInt32Value__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
uint32_t value;
|
||||
} GPBUInt32Value_Storage;
|
||||
} GPBUInt32Value__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -284,26 +302,29 @@ typedef struct GPBUInt32Value_Storage {
|
||||
.number = GPBUInt32Value_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeUInt32,
|
||||
.offset = offsetof(GPBUInt32Value_Storage, value),
|
||||
.dataType = GPBDataTypeUInt32,
|
||||
.offset = offsetof(GPBUInt32Value__storage_, value),
|
||||
.defaultValue.valueUInt32 = 0U,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBUInt32Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBUInt32Value_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBUInt32Value class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBUInt32Value__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -316,15 +337,15 @@ typedef struct GPBUInt32Value_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBBoolValue_Storage {
|
||||
typedef struct GPBBoolValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
BOOL value;
|
||||
} GPBBoolValue_Storage;
|
||||
} GPBBoolValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -332,26 +353,29 @@ typedef struct GPBBoolValue_Storage {
|
||||
.number = GPBBoolValue_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeBool,
|
||||
.offset = offsetof(GPBBoolValue_Storage, value),
|
||||
.dataType = GPBDataTypeBool,
|
||||
.offset = offsetof(GPBBoolValue__storage_, value),
|
||||
.defaultValue.valueBool = NO,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBBoolValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBBoolValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBBoolValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBBoolValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -364,15 +388,15 @@ typedef struct GPBBoolValue_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBStringValue_Storage {
|
||||
typedef struct GPBStringValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSString *value;
|
||||
} GPBStringValue_Storage;
|
||||
} GPBStringValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -380,26 +404,29 @@ typedef struct GPBStringValue_Storage {
|
||||
.number = GPBStringValue_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeString,
|
||||
.offset = offsetof(GPBStringValue_Storage, value),
|
||||
.dataType = GPBDataTypeString,
|
||||
.offset = offsetof(GPBStringValue__storage_, value),
|
||||
.defaultValue.valueString = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBStringValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBStringValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBStringValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBStringValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
@ -412,15 +439,15 @@ typedef struct GPBStringValue_Storage {
|
||||
|
||||
@dynamic value;
|
||||
|
||||
typedef struct GPBBytesValue_Storage {
|
||||
typedef struct GPBBytesValue__storage_ {
|
||||
uint32_t _has_storage_[1];
|
||||
NSData *value;
|
||||
} GPBBytesValue_Storage;
|
||||
} GPBBytesValue__storage_;
|
||||
|
||||
// This method is threadsafe because it is initially called
|
||||
// in +initialize for each subclass.
|
||||
+ (GPBDescriptor *)descriptor {
|
||||
static GPBDescriptor *descriptor = NULL;
|
||||
static GPBDescriptor *descriptor = nil;
|
||||
if (!descriptor) {
|
||||
static GPBMessageFieldDescription fields[] = {
|
||||
{
|
||||
@ -428,26 +455,29 @@ typedef struct GPBBytesValue_Storage {
|
||||
.number = GPBBytesValue_FieldNumber_Value,
|
||||
.hasIndex = 0,
|
||||
.flags = GPBFieldOptional,
|
||||
.type = GPBTypeData,
|
||||
.offset = offsetof(GPBBytesValue_Storage, value),
|
||||
.dataType = GPBDataTypeBytes,
|
||||
.offset = offsetof(GPBBytesValue__storage_, value),
|
||||
.defaultValue.valueData = nil,
|
||||
.typeSpecific.className = NULL,
|
||||
.dataTypeSpecific.className = NULL,
|
||||
.fieldOptions = NULL,
|
||||
},
|
||||
};
|
||||
descriptor = [GPBDescriptor allocDescriptorForClass:[GPBBytesValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBBytesValue_Storage)
|
||||
wireFormat:NO];
|
||||
GPBDescriptor *localDescriptor =
|
||||
[GPBDescriptor allocDescriptorForClass:[GPBBytesValue class]
|
||||
rootClass:[GPBWrappersRoot class]
|
||||
file:GPBWrappersRoot_FileDescriptor()
|
||||
fields:fields
|
||||
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
|
||||
oneofs:NULL
|
||||
oneofCount:0
|
||||
enums:NULL
|
||||
enumCount:0
|
||||
ranges:NULL
|
||||
rangeCount:0
|
||||
storageSize:sizeof(GPBBytesValue__storage_)
|
||||
wireFormat:NO];
|
||||
NSAssert(descriptor == nil, @"Startup recursed!");
|
||||
descriptor = localDescriptor;
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ nobase_include_HEADERS = \
|
||||
google/protobuf/compiler/java/java_names.h \
|
||||
google/protobuf/compiler/javanano/javanano_generator.h \
|
||||
google/protobuf/compiler/objectivec/objectivec_generator.h \
|
||||
google/protobuf/compiler/objectivec/objectivec_helpers.h \
|
||||
google/protobuf/compiler/objectivec/objectivec_helpers.h \
|
||||
google/protobuf/compiler/python/python_generator.h \
|
||||
google/protobuf/compiler/ruby/ruby_generator.h \
|
||||
google/protobuf/compiler/csharp/csharp_generator.h
|
||||
|
@ -55,8 +55,6 @@ void SetEnumVariables(const FieldDescriptor* descriptor,
|
||||
(descriptor->file() != descriptor->enum_type()->file())) {
|
||||
(*variables)["property_type"] = "enum " + type;
|
||||
}
|
||||
// TODO(thomasvl): Make inclusion of descriptor compile time and output
|
||||
// both of these. Note: Extensions currently have to have the EnumDescription.
|
||||
(*variables)["enum_verifier"] = type + "_IsValidValue";
|
||||
(*variables)["enum_desc_func"] = type + "_EnumDescriptor";
|
||||
|
||||
@ -74,11 +72,9 @@ EnumFieldGenerator::~EnumFieldGenerator() {}
|
||||
|
||||
void EnumFieldGenerator::GenerateFieldDescriptionTypeSpecific(
|
||||
io::Printer* printer) const {
|
||||
// TODO(thomasvl): Output the CPP check to use descFunc or validator based
|
||||
// on final compile.
|
||||
printer->Print(
|
||||
variables_,
|
||||
" .typeSpecific.enumDescFunc = $enum_desc_func$,\n");
|
||||
" .dataTypeSpecific.enumDescFunc = $enum_desc_func$,\n");
|
||||
}
|
||||
|
||||
void EnumFieldGenerator::GenerateCFunctionDeclarations(
|
||||
@ -103,7 +99,7 @@ void EnumFieldGenerator::GenerateCFunctionImplementations(
|
||||
"int32_t $owning_message_class$_$capitalized_name$_RawValue($owning_message_class$ *message) {\n"
|
||||
" GPBDescriptor *descriptor = [$owning_message_class$ descriptor];\n"
|
||||
" GPBFieldDescriptor *field = [descriptor fieldWithNumber:$field_number_name$];\n"
|
||||
" return GPBGetInt32IvarWithField(message, field);\n"
|
||||
" return GPBGetMessageInt32Field(message, field);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"void Set$owning_message_class$_$capitalized_name$_RawValue($owning_message_class$ *message, int32_t value) {\n"
|
||||
@ -137,11 +133,9 @@ RepeatedEnumFieldGenerator::~RepeatedEnumFieldGenerator() {}
|
||||
|
||||
void RepeatedEnumFieldGenerator::GenerateFieldDescriptionTypeSpecific(
|
||||
io::Printer* printer) const {
|
||||
// TODO(thomasvl): Output the CPP check to use descFunc or validator based
|
||||
// on final compile.
|
||||
printer->Print(
|
||||
variables_,
|
||||
" .typeSpecific.enumDescFunc = $enum_desc_func$,\n");
|
||||
" .dataTypeSpecific.enumDescFunc = $enum_desc_func$,\n");
|
||||
}
|
||||
|
||||
} // namespace objectivec
|
||||
|
@ -46,24 +46,6 @@ ExtensionGenerator::ExtensionGenerator(const string& root_class_name,
|
||||
: method_name_(ExtensionMethodName(descriptor)),
|
||||
root_class_and_method_name_(root_class_name + "_" + method_name_),
|
||||
descriptor_(descriptor) {
|
||||
// Extensions can be filtered via the method they are accessed off the
|
||||
// file's Root with.
|
||||
if (FilterClass(root_class_and_method_name_)) {
|
||||
filter_reason_ =
|
||||
string("Extension |") + root_class_and_method_name_ + "| was not whitelisted.";
|
||||
} else {
|
||||
// Extensions that add a Message field also require that field be allowed
|
||||
// by the filter, or they aren't usable.
|
||||
ObjectiveCType objc_type = GetObjectiveCType(descriptor_);
|
||||
if (objc_type == OBJECTIVECTYPE_MESSAGE) {
|
||||
const string message_class_name(ClassName(descriptor_->message_type()));
|
||||
if (FilterClass(message_class_name)) {
|
||||
filter_reason_ = string("Extension |") + root_class_and_method_name_ +
|
||||
"| needs message |" + message_class_name +
|
||||
"|, which was not whitelisted.";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (descriptor->is_map()) {
|
||||
// NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
|
||||
// error cases, so it seems to be ok to use as a back door for errors.
|
||||
@ -77,10 +59,6 @@ ExtensionGenerator::ExtensionGenerator(const string& root_class_name,
|
||||
ExtensionGenerator::~ExtensionGenerator() {}
|
||||
|
||||
void ExtensionGenerator::GenerateMembersHeader(io::Printer* printer) {
|
||||
if (IsFiltered()) {
|
||||
printer->Print("// $filter_reason$\n\n", "filter_reason", filter_reason_);
|
||||
return;
|
||||
}
|
||||
map<string, string> vars;
|
||||
vars["method_name"] = method_name_;
|
||||
SourceLocation location;
|
||||
@ -91,15 +69,11 @@ void ExtensionGenerator::GenerateMembersHeader(io::Printer* printer) {
|
||||
}
|
||||
printer->Print(vars,
|
||||
"$comments$"
|
||||
"+ (GPBExtensionField*)$method_name$;\n");
|
||||
"+ (GPBExtensionDescriptor *)$method_name$;\n");
|
||||
}
|
||||
|
||||
void ExtensionGenerator::GenerateStaticVariablesInitialization(
|
||||
io::Printer* printer, bool* out_generated, bool root) {
|
||||
if (IsFiltered()) {
|
||||
return;
|
||||
}
|
||||
*out_generated = true;
|
||||
io::Printer* printer) {
|
||||
map<string, string> vars;
|
||||
vars["root_class_and_method_name"] = root_class_and_method_name_;
|
||||
vars["extended_type"] = ClassName(descriptor_->containing_type());
|
||||
@ -122,14 +96,14 @@ void ExtensionGenerator::GenerateStaticVariablesInitialization(
|
||||
vars["type"] = "NULL";
|
||||
}
|
||||
|
||||
vars["default_name"] = GPBValueFieldName(descriptor_);
|
||||
vars["default_name"] = GPBGenericValueFieldName(descriptor_);
|
||||
if (descriptor_->is_repeated()) {
|
||||
vars["default"] = "nil";
|
||||
} else {
|
||||
vars["default"] = DefaultValue(descriptor_);
|
||||
}
|
||||
string type = GetCapitalizedType(descriptor_);
|
||||
vars["extension_type"] = string("GPBType") + type;
|
||||
vars["extension_type"] = string("GPBDataType") + type;
|
||||
|
||||
if (objc_type == OBJECTIVECTYPE_ENUM) {
|
||||
vars["enum_desc_func_name"] =
|
||||
@ -141,7 +115,7 @@ void ExtensionGenerator::GenerateStaticVariablesInitialization(
|
||||
printer->Print(vars,
|
||||
"{\n"
|
||||
" .singletonName = GPBStringifySymbol($root_class_and_method_name$),\n"
|
||||
" .type = $extension_type$,\n"
|
||||
" .dataType = $extension_type$,\n"
|
||||
" .extendedClass = GPBStringifySymbol($extended_type$),\n"
|
||||
" .fieldNumber = $number$,\n"
|
||||
" .defaultValue.$default_name$ = $default$,\n"
|
||||
@ -152,9 +126,6 @@ void ExtensionGenerator::GenerateStaticVariablesInitialization(
|
||||
}
|
||||
|
||||
void ExtensionGenerator::GenerateRegistrationSource(io::Printer* printer) {
|
||||
if (IsFiltered()) {
|
||||
return;
|
||||
}
|
||||
printer->Print(
|
||||
"[registry addExtension:$root_class_and_method_name$];\n",
|
||||
"root_class_and_method_name", root_class_and_method_name_);
|
||||
|
@ -52,16 +52,12 @@ class ExtensionGenerator {
|
||||
~ExtensionGenerator();
|
||||
|
||||
void GenerateMembersHeader(io::Printer* printer);
|
||||
void GenerateStaticVariablesInitialization(io::Printer* printer,
|
||||
bool* out_generated, bool root);
|
||||
void GenerateStaticVariablesInitialization(io::Printer* printer);
|
||||
void GenerateRegistrationSource(io::Printer* printer);
|
||||
|
||||
bool IsFiltered() const { return filter_reason_.length() > 0; }
|
||||
|
||||
private:
|
||||
string method_name_;
|
||||
string root_class_and_method_name_;
|
||||
string filter_reason_;
|
||||
const FieldDescriptor* descriptor_;
|
||||
|
||||
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ExtensionGenerator);
|
||||
|
@ -87,18 +87,16 @@ void SetCommonFieldVariables(const FieldDescriptor* descriptor,
|
||||
field_flags.push_back("GPBFieldHasDefaultValue");
|
||||
if (needs_custom_name) field_flags.push_back("GPBFieldTextFormatNameCustom");
|
||||
if (descriptor->type() == FieldDescriptor::TYPE_ENUM) {
|
||||
// TODO(thomasvl): Output the CPP check to use descFunc or validator based
|
||||
// on final compile.
|
||||
field_flags.push_back("GPBFieldHasEnumDescriptor");
|
||||
}
|
||||
|
||||
(*variables)["fieldflags"] = BuildFlagsString(field_flags);
|
||||
|
||||
(*variables)["default"] = DefaultValue(descriptor);
|
||||
(*variables)["default_name"] = GPBValueFieldName(descriptor);
|
||||
(*variables)["default_name"] = GPBGenericValueFieldName(descriptor);
|
||||
|
||||
(*variables)["typeSpecific_name"] = "className";
|
||||
(*variables)["typeSpecific_value"] = "NULL";
|
||||
(*variables)["dataTypeSpecific_name"] = "className";
|
||||
(*variables)["dataTypeSpecific_value"] = "NULL";
|
||||
|
||||
string field_options = descriptor->options().SerializeAsString();
|
||||
// Must convert to a standard byte order for packing length into
|
||||
@ -117,45 +115,6 @@ void SetCommonFieldVariables(const FieldDescriptor* descriptor,
|
||||
(*variables)["storage_attribute"] = "";
|
||||
}
|
||||
|
||||
// A field generator that writes nothing.
|
||||
class EmptyFieldGenerator : public FieldGenerator {
|
||||
public:
|
||||
EmptyFieldGenerator(const FieldDescriptor* descriptor, const string& reason)
|
||||
: FieldGenerator(descriptor), reason_(reason) {}
|
||||
virtual ~EmptyFieldGenerator() {}
|
||||
|
||||
virtual void GenerateFieldStorageDeclaration(io::Printer* printer) const {}
|
||||
virtual void GeneratePropertyDeclaration(io::Printer* printer) const {
|
||||
string name = FieldName(descriptor_);
|
||||
string type;
|
||||
switch (GetObjectiveCType(descriptor_)) {
|
||||
case OBJECTIVECTYPE_MESSAGE:
|
||||
type = ClassName(descriptor_->message_type()) + " *";
|
||||
break;
|
||||
|
||||
case OBJECTIVECTYPE_ENUM:
|
||||
type = EnumName(descriptor_->enum_type()) + " ";
|
||||
break;
|
||||
|
||||
default:
|
||||
type = string(descriptor_->type_name()) + " ";
|
||||
break;
|
||||
}
|
||||
printer->Print("// Field |$type$$name$| $reason$\n\n", "type", type, "name",
|
||||
name, "reason", reason_);
|
||||
}
|
||||
|
||||
virtual void GenerateFieldNumberConstant(io::Printer* printer) const {}
|
||||
virtual void GeneratePropertyImplementation(io::Printer* printer) const {}
|
||||
virtual void GenerateFieldDescription(io::Printer* printer) const {}
|
||||
|
||||
virtual bool WantsHasProperty(void) const { return false; }
|
||||
|
||||
private:
|
||||
string reason_;
|
||||
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EmptyFieldGenerator);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
FieldGenerator* FieldGenerator::Make(const FieldDescriptor* field) {
|
||||
@ -163,12 +122,7 @@ FieldGenerator* FieldGenerator::Make(const FieldDescriptor* field) {
|
||||
if (field->is_repeated()) {
|
||||
switch (GetObjectiveCType(field)) {
|
||||
case OBJECTIVECTYPE_MESSAGE: {
|
||||
string type = ClassName(field->message_type());
|
||||
if (FilterClass(type)) {
|
||||
string reason =
|
||||
"Filtered by |" + type + "| not being whitelisted.";
|
||||
result = new EmptyFieldGenerator(field, reason);
|
||||
} else if (field->is_map()) {
|
||||
if (field->is_map()) {
|
||||
result = new MapFieldGenerator(field);
|
||||
} else {
|
||||
result = new RepeatedMessageFieldGenerator(field);
|
||||
@ -185,14 +139,7 @@ FieldGenerator* FieldGenerator::Make(const FieldDescriptor* field) {
|
||||
} else {
|
||||
switch (GetObjectiveCType(field)) {
|
||||
case OBJECTIVECTYPE_MESSAGE: {
|
||||
string type = ClassName(field->message_type());
|
||||
if (FilterClass(type)) {
|
||||
string reason =
|
||||
"Filtered by |" + type + "| not being whitelisted.";
|
||||
result = new EmptyFieldGenerator(field, reason);
|
||||
} else {
|
||||
result = new MessageFieldGenerator(field);
|
||||
}
|
||||
result = new MessageFieldGenerator(field);
|
||||
break;
|
||||
}
|
||||
case OBJECTIVECTYPE_ENUM:
|
||||
@ -249,11 +196,17 @@ void FieldGenerator::GenerateFieldDescription(
|
||||
" .number = $field_number_name$,\n"
|
||||
" .hasIndex = $has_index$,\n"
|
||||
" .flags = $fieldflags$,\n"
|
||||
" .type = GPBType$field_type$,\n"
|
||||
" .offset = offsetof($classname$_Storage, $name$),\n"
|
||||
" .dataType = GPBDataType$field_type$,\n"
|
||||
" .offset = offsetof($classname$__storage_, $name$),\n"
|
||||
" .defaultValue.$default_name$ = $default$,\n");
|
||||
|
||||
// " .typeSpecific.value* = [something],"
|
||||
// TODO(thomasvl): It might be useful to add a CPP wrapper to support
|
||||
// compiling away the EnumDescriptors. To do that, we'd need a #if here
|
||||
// to control setting the descriptor vs. the validator, and above in
|
||||
// SetCommonFieldVariables() we'd want to wrap how we add
|
||||
// GPBFieldHasDefaultValue to the flags.
|
||||
|
||||
// " .dataTypeSpecific.value* = [something],"
|
||||
GenerateFieldDescriptionTypeSpecific(printer);
|
||||
|
||||
const string& field_options(variables_.find("fieldoptions")->second);
|
||||
@ -280,7 +233,7 @@ void FieldGenerator::GenerateFieldDescriptionTypeSpecific(
|
||||
io::Printer* printer) const {
|
||||
printer->Print(
|
||||
variables_,
|
||||
" .typeSpecific.$typeSpecific_name$ = $typeSpecific_value$,\n");
|
||||
" .dataTypeSpecific.$dataTypeSpecific_name$ = $dataTypeSpecific_value$,\n");
|
||||
}
|
||||
|
||||
void FieldGenerator::SetOneofIndexBase(int index_base) {
|
||||
@ -410,22 +363,24 @@ void RepeatedFieldGenerator::GenerateFieldStorageDeclaration(
|
||||
|
||||
void RepeatedFieldGenerator::GeneratePropertyImplementation(
|
||||
io::Printer* printer) const {
|
||||
printer->Print(variables_, "@dynamic $name$;\n");
|
||||
printer->Print(variables_, "@dynamic $name$, $name$_Count;\n");
|
||||
}
|
||||
|
||||
void RepeatedFieldGenerator::GeneratePropertyDeclaration(
|
||||
io::Printer* printer) const {
|
||||
|
||||
// Repeated fields don't need the has* properties, but this has the same
|
||||
// logic as ObjCObjFieldGenerator::GeneratePropertyDeclaration() for dealing
|
||||
// with needing Objective C's rules around storage name conventions (init*,
|
||||
// new*, etc.)
|
||||
// Repeated fields don't need the has* properties, but they do expose a
|
||||
// *Count (to check without autocreation). So for the field property we need
|
||||
// the same logic as ObjCObjFieldGenerator::GeneratePropertyDeclaration() for
|
||||
// dealing with needing Objective C's rules around storage name conventions
|
||||
// (init*, new*, etc.)
|
||||
|
||||
printer->Print(
|
||||
variables_,
|
||||
"$comments$"
|
||||
"$array_comment$"
|
||||
"@property(nonatomic, readwrite, strong) $array_storage_type$ *$name$$storage_attribute$;\n");
|
||||
"@property(nonatomic, readwrite, strong) $array_storage_type$ *$name$$storage_attribute$;\n"
|
||||
"@property(nonatomic, readonly) NSUInteger $name$_Count;\n");
|
||||
if (IsInitName(variables_.find("name")->second)) {
|
||||
// If property name starts with init we need to annotate it to get past ARC.
|
||||
// http://stackoverflow.com/questions/18723226/how-do-i-annotate-an-objective-c-property-with-an-objc-method-family/18723227#18723227
|
||||
|
@ -54,35 +54,24 @@ namespace objectivec {
|
||||
FileGenerator::FileGenerator(const FileDescriptor *file)
|
||||
: file_(file),
|
||||
root_class_name_(FileClassName(file)),
|
||||
is_filtered_(true),
|
||||
all_extensions_filtered_(true),
|
||||
is_public_dep_(false) {
|
||||
// Validate the objc prefix, do this even if the file's contents are filtered
|
||||
// to catch a bad prefix as soon as it is found.
|
||||
// Validate the objc prefix.
|
||||
ValidateObjCClassPrefix(file_);
|
||||
|
||||
for (int i = 0; i < file_->enum_type_count(); i++) {
|
||||
EnumGenerator *generator = new EnumGenerator(file_->enum_type(i));
|
||||
// The enums are exposed via C functions, so they will dead strip if
|
||||
// not used.
|
||||
is_filtered_ &= false;
|
||||
enum_generators_.push_back(generator);
|
||||
}
|
||||
for (int i = 0; i < file_->message_type_count(); i++) {
|
||||
MessageGenerator *generator =
|
||||
new MessageGenerator(root_class_name_, file_->message_type(i));
|
||||
is_filtered_ &= generator->IsFiltered();
|
||||
is_filtered_ &= generator->IsSubContentFiltered();
|
||||
message_generators_.push_back(generator);
|
||||
}
|
||||
for (int i = 0; i < file_->extension_count(); i++) {
|
||||
ExtensionGenerator *generator =
|
||||
new ExtensionGenerator(root_class_name_, file_->extension(i));
|
||||
is_filtered_ &= generator->IsFiltered();
|
||||
all_extensions_filtered_ &= generator->IsFiltered();
|
||||
extension_generators_.push_back(generator);
|
||||
}
|
||||
// If there is nothing in the file we filter it.
|
||||
}
|
||||
|
||||
FileGenerator::~FileGenerator() {
|
||||
@ -116,8 +105,7 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
|
||||
"protoc_gen_objc_version",
|
||||
SimpleItoa(GOOGLE_PROTOBUF_OBJC_GEN_VERSION));
|
||||
|
||||
const vector<FileGenerator *> &dependency_generators =
|
||||
DependencyGenerators();
|
||||
const vector<FileGenerator *> &dependency_generators = DependencyGenerators();
|
||||
for (vector<FileGenerator *>::const_iterator iter =
|
||||
dependency_generators.begin();
|
||||
iter != dependency_generators.end(); ++iter) {
|
||||
@ -133,19 +121,17 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
|
||||
|
||||
printer->Print("CF_EXTERN_C_BEGIN\n\n");
|
||||
|
||||
if (!IsFiltered()) {
|
||||
set<string> fwd_decls;
|
||||
for (vector<MessageGenerator *>::iterator iter = message_generators_.begin();
|
||||
iter != message_generators_.end(); ++iter) {
|
||||
(*iter)->DetermineForwardDeclarations(&fwd_decls);
|
||||
}
|
||||
for (set<string>::const_iterator i(fwd_decls.begin());
|
||||
i != fwd_decls.end(); ++i) {
|
||||
printer->Print("$value$;\n", "value", *i);
|
||||
}
|
||||
if (fwd_decls.begin() != fwd_decls.end()) {
|
||||
printer->Print("\n");
|
||||
}
|
||||
set<string> fwd_decls;
|
||||
for (vector<MessageGenerator *>::iterator iter = message_generators_.begin();
|
||||
iter != message_generators_.end(); ++iter) {
|
||||
(*iter)->DetermineForwardDeclarations(&fwd_decls);
|
||||
}
|
||||
for (set<string>::const_iterator i(fwd_decls.begin());
|
||||
i != fwd_decls.end(); ++i) {
|
||||
printer->Print("$value$;\n", "value", *i);
|
||||
}
|
||||
if (fwd_decls.begin() != fwd_decls.end()) {
|
||||
printer->Print("\n");
|
||||
}
|
||||
|
||||
// need to write out all enums first
|
||||
@ -160,36 +146,27 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
|
||||
}
|
||||
|
||||
// For extensions to chain together, the Root gets created even if there
|
||||
// are no extensions. So if the entire file isn't filtered away, output it.
|
||||
if (!IsFiltered()) {
|
||||
printer->Print(
|
||||
"\n"
|
||||
"#pragma mark - $root_class_name$\n"
|
||||
"\n"
|
||||
"@interface $root_class_name$ : GPBRootObject\n"
|
||||
"\n"
|
||||
"// The base class provides:\n"
|
||||
"// + (GPBExtensionRegistry *)extensionRegistry;\n"
|
||||
"// which is an GPBExtensionRegistry that includes all the extensions defined by\n"
|
||||
"// this file and all files that it depends on.\n"
|
||||
"\n"
|
||||
"@end\n"
|
||||
"\n",
|
||||
"root_class_name", root_class_name_);
|
||||
}
|
||||
// are no extensions.
|
||||
printer->Print(
|
||||
"\n"
|
||||
"#pragma mark - $root_class_name$\n"
|
||||
"\n"
|
||||
"@interface $root_class_name$ : GPBRootObject\n"
|
||||
"\n"
|
||||
"// The base class provides:\n"
|
||||
"// + (GPBExtensionRegistry *)extensionRegistry;\n"
|
||||
"// which is an GPBExtensionRegistry that includes all the extensions defined by\n"
|
||||
"// this file and all files that it depends on.\n"
|
||||
"\n"
|
||||
"@end\n"
|
||||
"\n",
|
||||
"root_class_name", root_class_name_);
|
||||
|
||||
if (extension_generators_.size() > 0) {
|
||||
// The dynamic methods block is only needed if there are extensions. If
|
||||
// they are all filtered, output the @interface as a comment so there is
|
||||
// something left in the header for anyone that looks.
|
||||
const char *root_line_prefix = "";
|
||||
if (AreAllExtensionsFiltered()) {
|
||||
root_line_prefix = "// ";
|
||||
}
|
||||
// The dynamic methods block is only needed if there are extensions.
|
||||
printer->Print(
|
||||
"$root_line_prefix$@interface $root_class_name$ (DynamicMethods)\n",
|
||||
"root_class_name", root_class_name_,
|
||||
"root_line_prefix", root_line_prefix);
|
||||
"@interface $root_class_name$ (DynamicMethods)\n",
|
||||
"root_class_name", root_class_name_);
|
||||
|
||||
for (vector<ExtensionGenerator *>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
@ -197,8 +174,7 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
|
||||
(*iter)->GenerateMembersHeader(printer);
|
||||
}
|
||||
|
||||
printer->Print("$root_line_prefix$@end\n\n",
|
||||
"root_line_prefix", root_line_prefix);
|
||||
printer->Print("@end\n\n");
|
||||
} // extension_generators_.size() > 0
|
||||
|
||||
for (vector<MessageGenerator *>::iterator iter = message_generators_.begin();
|
||||
@ -239,136 +215,119 @@ void FileGenerator::GenerateSource(io::Printer *printer) {
|
||||
"// @@protoc_insertion_point(imports)\n"
|
||||
"\n");
|
||||
|
||||
if (IsFiltered()) {
|
||||
printer->Print(
|
||||
"// File empty because all messages, extensions and enum have been filtered.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"// Dummy symbol that will be stripped but will avoid linker warnings about\n"
|
||||
"// no symbols in the .o form compiling this file.\n"
|
||||
"static int $root_class_name$_dummy __attribute__((unused,used)) = 0;\n"
|
||||
"\n"
|
||||
"// @@protoc_insertion_point(global_scope)\n",
|
||||
"root_class_name", root_class_name_);
|
||||
return;
|
||||
}
|
||||
|
||||
printer->Print(
|
||||
"#pragma mark - $root_class_name$\n"
|
||||
"\n"
|
||||
"@implementation $root_class_name$\n\n",
|
||||
"root_class_name", root_class_name_);
|
||||
|
||||
bool generated_extensions = false;
|
||||
if (file_->extension_count() + file_->message_type_count() +
|
||||
file_->dependency_count() >
|
||||
0) {
|
||||
ostringstream extensions_stringstream;
|
||||
// Generate the extension initialization structures for the top level and
|
||||
// any nested messages.
|
||||
ostringstream extensions_stringstream;
|
||||
if (file_->extension_count() + file_->message_type_count() > 0) {
|
||||
io::OstreamOutputStream extensions_outputstream(&extensions_stringstream);
|
||||
io::Printer extensions_printer(&extensions_outputstream, '$');
|
||||
for (vector<ExtensionGenerator *>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(&extensions_printer);
|
||||
}
|
||||
for (vector<MessageGenerator *>::iterator iter =
|
||||
message_generators_.begin();
|
||||
iter != message_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(&extensions_printer);
|
||||
}
|
||||
extensions_stringstream.flush();
|
||||
}
|
||||
|
||||
if (file_->extension_count() + file_->message_type_count() > 0) {
|
||||
io::OstreamOutputStream extensions_outputstream(&extensions_stringstream);
|
||||
io::Printer extensions_printer(&extensions_outputstream, '$');
|
||||
extensions_printer.Print(
|
||||
// If there were any extensions or this file has any dependencies, output
|
||||
// a registry to override to create the file specific registry.
|
||||
const string& extensions_str = extensions_stringstream.str();
|
||||
if (extensions_str.length() > 0 || file_->dependency_count() > 0) {
|
||||
printer->Print(
|
||||
"+ (GPBExtensionRegistry*)extensionRegistry {\n"
|
||||
" // This is called by +initialize so there is no need to worry\n"
|
||||
" // about thread safety and initialization of registry.\n"
|
||||
" static GPBExtensionRegistry* registry = nil;\n"
|
||||
" if (!registry) {\n"
|
||||
" GPBDebugCheckRuntimeVersion();\n"
|
||||
" registry = [[GPBExtensionRegistry alloc] init];\n");
|
||||
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
|
||||
if (extensions_str.length() > 0) {
|
||||
printer->Print(
|
||||
"static GPBExtensionDescription descriptions[] = {\n");
|
||||
extensions_printer.Indent();
|
||||
for (vector<ExtensionGenerator *>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(
|
||||
&extensions_printer, &generated_extensions, true);
|
||||
}
|
||||
for (vector<MessageGenerator *>::iterator iter =
|
||||
message_generators_.begin();
|
||||
iter != message_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(&extensions_printer,
|
||||
&generated_extensions);
|
||||
}
|
||||
extensions_printer.Outdent();
|
||||
extensions_printer.Print("};\n");
|
||||
if (generated_extensions) {
|
||||
extensions_printer.Print(
|
||||
"for (size_t i = 0; i < sizeof(descriptions) / sizeof(descriptions[0]); ++i) {\n"
|
||||
" GPBExtensionField *extension = [[GPBExtensionField alloc] initWithDescription:&descriptions[i]];\n"
|
||||
" [registry addExtension:extension];\n"
|
||||
" [self globallyRegisterExtension:extension];\n"
|
||||
" [extension release];\n"
|
||||
"}\n");
|
||||
} else {
|
||||
extensions_printer.Print("#pragma unused (descriptions)\n");
|
||||
}
|
||||
const vector<FileGenerator *> &dependency_generators =
|
||||
DependencyGenerators();
|
||||
if (dependency_generators.size()) {
|
||||
for (vector<FileGenerator *>::const_iterator iter =
|
||||
dependency_generators.begin();
|
||||
iter != dependency_generators.end(); ++iter) {
|
||||
if (!(*iter)->IsFiltered()) {
|
||||
extensions_printer.Print(
|
||||
"[registry addExtensions:[$dependency$ extensionRegistry]];\n",
|
||||
"dependency", (*iter)->RootClassName());
|
||||
generated_extensions = true;
|
||||
}
|
||||
}
|
||||
} else if (!generated_extensions) {
|
||||
extensions_printer.Print("#pragma unused (registry)\n");
|
||||
}
|
||||
printer->Indent();
|
||||
printer->Print(extensions_str.c_str());
|
||||
printer->Outdent();
|
||||
printer->Print(
|
||||
"};\n"
|
||||
"for (size_t i = 0; i < sizeof(descriptions) / sizeof(descriptions[0]); ++i) {\n"
|
||||
" GPBExtensionDescriptor *extension =\n"
|
||||
" [[GPBExtensionDescriptor alloc] initWithExtensionDescription:&descriptions[i]];\n"
|
||||
" [registry addExtension:extension];\n"
|
||||
" [self globallyRegisterExtension:extension];\n"
|
||||
" [extension release];\n"
|
||||
"}\n");
|
||||
}
|
||||
|
||||
if (generated_extensions) {
|
||||
const vector<FileGenerator *> &dependency_generators =
|
||||
DependencyGenerators();
|
||||
for (vector<FileGenerator *>::const_iterator iter =
|
||||
dependency_generators.begin();
|
||||
iter != dependency_generators.end(); ++iter) {
|
||||
printer->Print(
|
||||
"+ (GPBExtensionRegistry*)extensionRegistry {\n"
|
||||
" // This is called by +initialize so there is no need to worry\n"
|
||||
" // about thread safety and initialization of registry.\n"
|
||||
" static GPBExtensionRegistry* registry = nil;\n"
|
||||
" if (!registry) {\n"
|
||||
" registry = [[GPBExtensionRegistry alloc] init];\n");
|
||||
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
|
||||
extensions_stringstream.flush();
|
||||
printer->Print(extensions_stringstream.str().c_str());
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
|
||||
printer->Print(
|
||||
" }\n"
|
||||
" return registry;\n"
|
||||
"}\n"
|
||||
"\n");
|
||||
"[registry addExtensions:[$dependency$ extensionRegistry]];\n",
|
||||
"dependency", (*iter)->RootClassName());
|
||||
}
|
||||
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
|
||||
printer->Print(
|
||||
" }\n"
|
||||
" return registry;\n"
|
||||
"}\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
printer->Print("@end\n\n");
|
||||
|
||||
|
||||
string syntax;
|
||||
switch (file_->syntax()) {
|
||||
case FileDescriptor::SYNTAX_UNKNOWN:
|
||||
syntax = "GPBFileSyntaxUnknown";
|
||||
break;
|
||||
case FileDescriptor::SYNTAX_PROTO2:
|
||||
syntax = "GPBFileSyntaxProto2";
|
||||
break;
|
||||
case FileDescriptor::SYNTAX_PROTO3:
|
||||
syntax = "GPBFileSyntaxProto3";
|
||||
break;
|
||||
// File descriptor only needed if there are messages to use it.
|
||||
if (message_generators_.size() > 0) {
|
||||
string syntax;
|
||||
switch (file_->syntax()) {
|
||||
case FileDescriptor::SYNTAX_UNKNOWN:
|
||||
syntax = "GPBFileSyntaxUnknown";
|
||||
break;
|
||||
case FileDescriptor::SYNTAX_PROTO2:
|
||||
syntax = "GPBFileSyntaxProto2";
|
||||
break;
|
||||
case FileDescriptor::SYNTAX_PROTO3:
|
||||
syntax = "GPBFileSyntaxProto3";
|
||||
break;
|
||||
}
|
||||
printer->Print(
|
||||
"#pragma mark - $root_class_name$_FileDescriptor\n"
|
||||
"\n"
|
||||
"static GPBFileDescriptor *$root_class_name$_FileDescriptor(void) {\n"
|
||||
" // This is called by +initialize so there is no need to worry\n"
|
||||
" // about thread safety of the singleton.\n"
|
||||
" static GPBFileDescriptor *descriptor = NULL;\n"
|
||||
" if (!descriptor) {\n"
|
||||
" GPBDebugCheckRuntimeVersion();\n"
|
||||
" descriptor = [[GPBFileDescriptor alloc] initWithPackage:@\"$package$\"\n"
|
||||
" syntax:$syntax$];\n"
|
||||
" }\n"
|
||||
" return descriptor;\n"
|
||||
"}\n"
|
||||
"\n",
|
||||
"root_class_name", root_class_name_,
|
||||
"package", file_->package(),
|
||||
"syntax", syntax);
|
||||
}
|
||||
printer->Print(
|
||||
"static GPBFileDescriptor *$root_class_name$_FileDescriptor(void) {\n"
|
||||
" // This is called by +initialize so there is no need to worry\n"
|
||||
" // about thread safety of the singleton.\n"
|
||||
" static GPBFileDescriptor *descriptor = NULL;\n"
|
||||
" if (!descriptor) {\n"
|
||||
" descriptor = [[GPBFileDescriptor alloc] initWithPackage:@\"$package$\"\n"
|
||||
" syntax:$syntax$];\n"
|
||||
" }\n"
|
||||
" return descriptor;\n"
|
||||
"}\n"
|
||||
"\n",
|
||||
"root_class_name", root_class_name_,
|
||||
"package", file_->package(),
|
||||
"syntax", syntax);
|
||||
|
||||
for (vector<EnumGenerator *>::iterator iter = enum_generators_.begin();
|
||||
iter != enum_generators_.end(); ++iter) {
|
||||
|
@ -64,8 +64,6 @@ class FileGenerator {
|
||||
const string& RootClassName() const { return root_class_name_; }
|
||||
const string Path() const;
|
||||
|
||||
bool IsFiltered() const { return is_filtered_; }
|
||||
bool AreAllExtensionsFiltered() const { return all_extensions_filtered_; }
|
||||
bool IsPublicDependency() const { return is_public_dep_; }
|
||||
|
||||
protected:
|
||||
@ -84,8 +82,6 @@ class FileGenerator {
|
||||
vector<EnumGenerator*> enum_generators_;
|
||||
vector<MessageGenerator*> message_generators_;
|
||||
vector<ExtensionGenerator*> extension_generators_;
|
||||
bool is_filtered_;
|
||||
bool all_extensions_filtered_;
|
||||
bool is_public_dep_;
|
||||
|
||||
const vector<FileGenerator*>& DependencyGenerators();
|
||||
|
@ -58,10 +58,6 @@ bool ObjectiveCGenerator::Generate(const FileDescriptor* file,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeClassWhitelist(error)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FileGenerator file_generator(file);
|
||||
|
||||
string filepath = FilePath(file);
|
||||
|
@ -50,8 +50,6 @@ namespace objectivec {
|
||||
|
||||
namespace {
|
||||
|
||||
hash_set<string> gClassWhitelist;
|
||||
|
||||
// islower()/isupper()/tolower()/toupper() change based on locale.
|
||||
//
|
||||
// src/google/protobuf/stubs/strutil.h:150 has the same pattern. For the
|
||||
@ -580,7 +578,7 @@ string GetCapitalizedType(const FieldDescriptor* field) {
|
||||
case FieldDescriptor::TYPE_STRING:
|
||||
return "String";
|
||||
case FieldDescriptor::TYPE_BYTES:
|
||||
return "Data";
|
||||
return "Bytes";
|
||||
case FieldDescriptor::TYPE_ENUM:
|
||||
return "Enum";
|
||||
case FieldDescriptor::TYPE_GROUP:
|
||||
@ -684,8 +682,9 @@ static string HandleExtremeFloatingPoint(string val, bool add_float_suffix) {
|
||||
}
|
||||
}
|
||||
|
||||
string GPBValueFieldName(const FieldDescriptor* field) {
|
||||
// Returns the field within the GPBValue union to use for the given field.
|
||||
string GPBGenericValueFieldName(const FieldDescriptor* field) {
|
||||
// Returns the field within the GPBGenericValue union to use for the given
|
||||
// field.
|
||||
if (field->is_repeated()) {
|
||||
return "valueMessage";
|
||||
}
|
||||
@ -831,60 +830,6 @@ string BuildCommentsString(const SourceLocation& location) {
|
||||
return final_comments;
|
||||
}
|
||||
|
||||
bool InitializeClassWhitelist(string* error) {
|
||||
const char* env_var_value = getenv("GPB_OBJC_CLASS_WHITELIST_PATHS");
|
||||
if (env_var_value == NULL) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// The values are joined with ';' in case we ever want to make this a
|
||||
// generator parameter also (instead of env var), and generator parameter
|
||||
// parsing already has meaning for ',' and ':'.
|
||||
vector<string> file_paths = Split(env_var_value, ";", true);
|
||||
|
||||
for (vector<string>::const_iterator i = file_paths.begin();
|
||||
i != file_paths.end(); ++i) {
|
||||
const string& file_path = *i;
|
||||
|
||||
ifstream stream(file_path.c_str(), ifstream::in);
|
||||
if (!stream.good()) {
|
||||
if (error != NULL) {
|
||||
stringstream err_stream;
|
||||
err_stream << endl << file_path << ":0:0: error: Unable to open";
|
||||
*error = err_stream.str();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
string input_line;
|
||||
while (stream.good()) {
|
||||
getline(stream, input_line);
|
||||
string trimmed_line(TrimString(input_line));
|
||||
if (trimmed_line.length() == 0) {
|
||||
// Skip empty lines
|
||||
continue;
|
||||
}
|
||||
if (trimmed_line[0] == '/' || trimmed_line[0] == '#') {
|
||||
// Skip comments and potential preprocessor symbols
|
||||
continue;
|
||||
}
|
||||
gClassWhitelist.insert(trimmed_line);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FilterClass(const string& name) {
|
||||
if (gClassWhitelist.count(name) > 0) {
|
||||
// Whitelisted, don't filter.
|
||||
return false;
|
||||
}
|
||||
|
||||
// If there was no list, default to everything in.
|
||||
// If there was a list, default to everything out.
|
||||
return gClassWhitelist.size() > 0;
|
||||
}
|
||||
|
||||
void TextFormatDecodeData::AddString(int32 key,
|
||||
const string& input_for_decode,
|
||||
const string& desired_output) {
|
||||
|
@ -138,16 +138,13 @@ inline ObjectiveCType GetObjectiveCType(const FieldDescriptor* field) {
|
||||
bool IsPrimitiveType(const FieldDescriptor* field);
|
||||
bool IsReferenceType(const FieldDescriptor* field);
|
||||
|
||||
string GPBValueFieldName(const FieldDescriptor* field);
|
||||
string GPBGenericValueFieldName(const FieldDescriptor* field);
|
||||
string DefaultValue(const FieldDescriptor* field);
|
||||
|
||||
string BuildFlagsString(const vector<string>& strings);
|
||||
|
||||
string BuildCommentsString(const SourceLocation& location);
|
||||
|
||||
bool InitializeClassWhitelist(string* error);
|
||||
bool FilterClass(const string& name);
|
||||
|
||||
// Generate decode data needed for ObjC's GPBDecodeTextFormatName() to transform
|
||||
// the input into the the expected output.
|
||||
class LIBPROTOC_EXPORT TextFormatDecodeData {
|
||||
|
@ -242,6 +242,14 @@ TEST(ObjCHelperDeathTest, TextFormatDecodeData_Failures) {
|
||||
}
|
||||
#endif // PROTOBUF_HAS_DEATH_TEST
|
||||
|
||||
// TODO(thomasvl): Should probably add some unittests for all the special cases
|
||||
// of name mangling (class name, field name, enum names). Rather than doing
|
||||
// this with an ObjC test in the objectivec directory, we should be able to
|
||||
// use src/google/protobuf/compiler/importer* (like other tests) to support a
|
||||
// virtual file system to feed in protos, once we have the Descriptor tree, the
|
||||
// tests could use the helper methods for generating names and validate the
|
||||
// right things are happening.
|
||||
|
||||
} // namespace
|
||||
} // namespace objectivec
|
||||
} // namespace compiler
|
||||
|
@ -178,49 +178,25 @@ MessageGenerator::MessageGenerator(const string& root_classname,
|
||||
: root_classname_(root_classname),
|
||||
descriptor_(descriptor),
|
||||
field_generators_(descriptor),
|
||||
class_name_(ClassName(descriptor_)),
|
||||
sub_content_filtered_(true) {
|
||||
if (FilterClass(class_name_)) {
|
||||
filter_reason_ =
|
||||
string("Message |") + class_name_ + "| was not whitelisted.";
|
||||
}
|
||||
if (!IsFiltered()) {
|
||||
// No need to generate extensions if this message is filtered
|
||||
for (int i = 0; i < descriptor_->extension_count(); i++) {
|
||||
extension_generators_.push_back(
|
||||
new ExtensionGenerator(class_name_, descriptor_->extension(i)));
|
||||
}
|
||||
// No need to generate oneofs if this message is filtered.
|
||||
for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
|
||||
OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i));
|
||||
oneof_generators_.push_back(generator);
|
||||
}
|
||||
class_name_(ClassName(descriptor_)) {
|
||||
for (int i = 0; i < descriptor_->extension_count(); i++) {
|
||||
extension_generators_.push_back(
|
||||
new ExtensionGenerator(class_name_, descriptor_->extension(i)));
|
||||
}
|
||||
|
||||
for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
|
||||
OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i));
|
||||
oneof_generators_.push_back(generator);
|
||||
}
|
||||
|
||||
// We may have enums of this message that are used even if the message
|
||||
// itself is filtered.
|
||||
for (int i = 0; i < descriptor_->enum_type_count(); i++) {
|
||||
EnumGenerator* generator = new EnumGenerator(descriptor_->enum_type(i));
|
||||
// The enums are exposed via C functions, so they will dead strip if
|
||||
// not used.
|
||||
sub_content_filtered_ &= false;
|
||||
enum_generators_.push_back(generator);
|
||||
}
|
||||
|
||||
// We may have nested messages that are used even if the message itself
|
||||
// is filtered.
|
||||
for (int i = 0; i < descriptor_->nested_type_count(); i++) {
|
||||
const Descriptor* nested_descriptor = descriptor_->nested_type(i);
|
||||
MessageGenerator* generator =
|
||||
new MessageGenerator(root_classname_, nested_descriptor);
|
||||
// Don't check map entries for being filtered, as they don't directly
|
||||
// generate anything in Objective C. In theory, they only should include
|
||||
// references to other toplevel types, but we still make the generators
|
||||
// to be safe.
|
||||
if (!IsMapEntryMessage(nested_descriptor)) {
|
||||
sub_content_filtered_ &= generator->IsFiltered();
|
||||
}
|
||||
sub_content_filtered_ &= generator->IsSubContentFiltered();
|
||||
new MessageGenerator(root_classname_, descriptor_->nested_type(i));
|
||||
nested_message_generators_.push_back(generator);
|
||||
}
|
||||
}
|
||||
@ -236,31 +212,26 @@ MessageGenerator::~MessageGenerator() {
|
||||
}
|
||||
|
||||
void MessageGenerator::GenerateStaticVariablesInitialization(
|
||||
io::Printer* printer, bool* out_generated) {
|
||||
if (!IsFiltered()) {
|
||||
// Skip extensions if we are filtered.
|
||||
for (vector<ExtensionGenerator*>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(printer, out_generated,
|
||||
false);
|
||||
}
|
||||
io::Printer* printer) {
|
||||
for (vector<ExtensionGenerator*>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(printer);
|
||||
}
|
||||
|
||||
// Generating sub messages is perfectly fine though.
|
||||
for (vector<MessageGenerator*>::iterator iter =
|
||||
nested_message_generators_.begin();
|
||||
iter != nested_message_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateStaticVariablesInitialization(printer, out_generated);
|
||||
(*iter)->GenerateStaticVariablesInitialization(printer);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageGenerator::DetermineForwardDeclarations(set<string>* fwd_decls) {
|
||||
if (!IsFiltered() && !IsMapEntryMessage(descriptor_)) {
|
||||
if (!IsMapEntryMessage(descriptor_)) {
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
const FieldDescriptor* fieldDescriptor = descriptor_->field(i);
|
||||
// If it is a the field is repeated, the type will be and *Array,
|
||||
// and we don't need any forward decl.
|
||||
// If it is a the field is repeated, the type will be and *Array, and we
|
||||
// don't need any forward decl.
|
||||
if (fieldDescriptor->is_repeated()) {
|
||||
continue;
|
||||
}
|
||||
@ -291,12 +262,10 @@ void MessageGenerator::GenerateEnumHeader(io::Printer* printer) {
|
||||
|
||||
void MessageGenerator::GenerateExtensionRegistrationSource(
|
||||
io::Printer* printer) {
|
||||
if (!IsFiltered()) {
|
||||
for (vector<ExtensionGenerator*>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateRegistrationSource(printer);
|
||||
}
|
||||
for (vector<ExtensionGenerator*>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateRegistrationSource(printer);
|
||||
}
|
||||
|
||||
for (vector<MessageGenerator*>::iterator iter =
|
||||
@ -317,101 +286,84 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsFiltered()) {
|
||||
printer->Print("// $filter_reason$\n\n",
|
||||
"filter_reason", filter_reason_);
|
||||
} else {
|
||||
printer->Print(
|
||||
"#pragma mark - $classname$\n"
|
||||
"\n",
|
||||
"classname", class_name_);
|
||||
printer->Print(
|
||||
"#pragma mark - $classname$\n"
|
||||
"\n",
|
||||
"classname", class_name_);
|
||||
|
||||
if (descriptor_->field_count()) {
|
||||
// Even if there are fields, they could be filtered away, so always use
|
||||
// a buffer to confirm we have something.
|
||||
ostringstream fieldnumber_stringstream;
|
||||
{
|
||||
scoped_array<const FieldDescriptor*> sorted_fields(
|
||||
SortFieldsByNumber(descriptor_));
|
||||
if (descriptor_->field_count()) {
|
||||
scoped_array<const FieldDescriptor*> sorted_fields(
|
||||
SortFieldsByNumber(descriptor_));
|
||||
|
||||
io::OstreamOutputStream fieldnumber_outputstream(
|
||||
&fieldnumber_stringstream);
|
||||
io::Printer fieldnumber_printer(&fieldnumber_outputstream, '$');
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
field_generators_.get(sorted_fields[i])
|
||||
.GenerateFieldNumberConstant(&fieldnumber_printer);
|
||||
}
|
||||
fieldnumber_stringstream.flush();
|
||||
}
|
||||
const string& fieldnumber_str = fieldnumber_stringstream.str();
|
||||
if (fieldnumber_str.length()) {
|
||||
printer->Print("typedef GPB_ENUM($classname$_FieldNumber) {\n",
|
||||
"classname", class_name_);
|
||||
printer->Indent();
|
||||
printer->Print(fieldnumber_str.c_str());
|
||||
printer->Outdent();
|
||||
printer->Print("};\n\n");
|
||||
}
|
||||
printer->Print("typedef GPB_ENUM($classname$_FieldNumber) {\n",
|
||||
"classname", class_name_);
|
||||
printer->Indent();
|
||||
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
field_generators_.get(sorted_fields[i])
|
||||
.GenerateFieldNumberConstant(printer);
|
||||
}
|
||||
|
||||
printer->Outdent();
|
||||
printer->Print("};\n\n");
|
||||
}
|
||||
|
||||
for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
|
||||
iter != oneof_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateCaseEnum(printer);
|
||||
}
|
||||
|
||||
string message_comments;
|
||||
SourceLocation location;
|
||||
if (descriptor_->GetSourceLocation(&location)) {
|
||||
message_comments = BuildCommentsString(location);
|
||||
} else {
|
||||
message_comments = "";
|
||||
}
|
||||
|
||||
printer->Print(
|
||||
"$comments$@interface $classname$ : GPBMessage\n\n",
|
||||
"classname", class_name_,
|
||||
"comments", message_comments);
|
||||
|
||||
vector<char> seen_oneofs(descriptor_->oneof_decl_count(), 0);
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
const FieldDescriptor* field = descriptor_->field(i);
|
||||
if (field->containing_oneof() != NULL) {
|
||||
const int oneof_index = field->containing_oneof()->index();
|
||||
if (!seen_oneofs[oneof_index]) {
|
||||
seen_oneofs[oneof_index] = 1;
|
||||
oneof_generators_[oneof_index]->GeneratePublicCasePropertyDeclaration(
|
||||
printer);
|
||||
}
|
||||
}
|
||||
field_generators_.get(field).GeneratePropertyDeclaration(printer);
|
||||
}
|
||||
|
||||
printer->Print("@end\n\n");
|
||||
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
field_generators_.get(descriptor_->field(i))
|
||||
.GenerateCFunctionDeclarations(printer);
|
||||
}
|
||||
|
||||
if (!oneof_generators_.empty()) {
|
||||
for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
|
||||
iter != oneof_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateCaseEnum(printer);
|
||||
(*iter)->GenerateClearFunctionDeclaration(printer);
|
||||
}
|
||||
printer->Print("\n");
|
||||
}
|
||||
|
||||
string message_comments;
|
||||
SourceLocation location;
|
||||
if (descriptor_->GetSourceLocation(&location)) {
|
||||
message_comments = BuildCommentsString(location);
|
||||
} else {
|
||||
message_comments = "";
|
||||
if (descriptor_->extension_count() > 0) {
|
||||
printer->Print("@interface $classname$ (DynamicMethods)\n\n",
|
||||
"classname", class_name_);
|
||||
for (vector<ExtensionGenerator*>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateMembersHeader(printer);
|
||||
}
|
||||
|
||||
printer->Print(
|
||||
"$comments$@interface $classname$ : GPBMessage\n\n",
|
||||
"classname", class_name_,
|
||||
"comments", message_comments);
|
||||
|
||||
vector<char> seen_oneofs(descriptor_->oneof_decl_count(), 0);
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
const FieldDescriptor* field = descriptor_->field(i);
|
||||
if (field->containing_oneof() != NULL) {
|
||||
const int oneof_index = field->containing_oneof()->index();
|
||||
if (!seen_oneofs[oneof_index]) {
|
||||
seen_oneofs[oneof_index] = 1;
|
||||
oneof_generators_[oneof_index]->GeneratePublicCasePropertyDeclaration(
|
||||
printer);
|
||||
}
|
||||
}
|
||||
field_generators_.get(field)
|
||||
.GeneratePropertyDeclaration(printer);
|
||||
}
|
||||
|
||||
printer->Print("@end\n\n");
|
||||
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
field_generators_.get(descriptor_->field(i))
|
||||
.GenerateCFunctionDeclarations(printer);
|
||||
}
|
||||
|
||||
if (!oneof_generators_.empty()) {
|
||||
for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
|
||||
iter != oneof_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateClearFunctionDeclaration(printer);
|
||||
}
|
||||
printer->Print("\n");
|
||||
}
|
||||
|
||||
if (descriptor_->extension_count() > 0) {
|
||||
printer->Print("@interface $classname$ (DynamicMethods)\n\n",
|
||||
"classname", class_name_);
|
||||
for (vector<ExtensionGenerator*>::iterator iter =
|
||||
extension_generators_.begin();
|
||||
iter != extension_generators_.end(); ++iter) {
|
||||
(*iter)->GenerateMembersHeader(printer);
|
||||
}
|
||||
printer->Print("@end\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
for (vector<MessageGenerator*>::iterator iter =
|
||||
@ -422,7 +374,7 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) {
|
||||
}
|
||||
|
||||
void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
if (!IsFiltered() && !IsMapEntryMessage(descriptor_)) {
|
||||
if (!IsMapEntryMessage(descriptor_)) {
|
||||
printer->Print(
|
||||
"#pragma mark - $classname$\n"
|
||||
"\n",
|
||||
@ -454,6 +406,23 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
sort(sorted_extensions.begin(), sorted_extensions.end(),
|
||||
ExtensionRangeOrdering());
|
||||
|
||||
// TODO(thomasvl): Finish optimizing has bit. The current behavior is as
|
||||
// follows:
|
||||
// 1. objectivec_field.cc's SetCommonFieldVariables() defaults the has_index
|
||||
// to the field's index in the list of fields.
|
||||
// 2. RepeatedFieldGenerator::RepeatedFieldGenerator() sets has_index to
|
||||
// GPBNoHasBit because repeated fields & map<> fields don't use the has
|
||||
// bit.
|
||||
// 3. FieldGenerator::SetOneofIndexBase() overrides has_bit with a negative
|
||||
// index that groups all the elements on of the oneof.
|
||||
// So in has_storage, we need enough bits for the single fields that aren't
|
||||
// in any oneof, and then one int32 for each oneof (to store the field
|
||||
// number). So we could save a little space by not using the field's index
|
||||
// and instead make a second pass only assigning indexes for the fields
|
||||
// that would need it. The only savings would come when messages have over
|
||||
// a multiple of 32 fields with some number being repeated or in oneofs to
|
||||
// drop the count below that 32 multiple; so it hasn't seemed worth doing
|
||||
// at the moment.
|
||||
size_t num_has_bits = descriptor_->field_count();
|
||||
size_t sizeof_has_storage = (num_has_bits + 31) / 32;
|
||||
// Tell all the fields the oneof base.
|
||||
@ -467,7 +436,7 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
|
||||
printer->Print(
|
||||
"\n"
|
||||
"typedef struct $classname$_Storage {\n"
|
||||
"typedef struct $classname$__storage_ {\n"
|
||||
" uint32_t _has_storage_[$sizeof_has_storage$];\n",
|
||||
"classname", class_name_,
|
||||
"sizeof_has_storage", SimpleItoa(sizeof_has_storage));
|
||||
@ -479,14 +448,14 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
}
|
||||
printer->Outdent();
|
||||
|
||||
printer->Print("} $classname$_Storage;\n\n", "classname", class_name_);
|
||||
printer->Print("} $classname$__storage_;\n\n", "classname", class_name_);
|
||||
|
||||
|
||||
printer->Print(
|
||||
"// This method is threadsafe because it is initially called\n"
|
||||
"// in +initialize for each subclass.\n"
|
||||
"+ (GPBDescriptor *)descriptor {\n"
|
||||
" static GPBDescriptor *descriptor = NULL;\n"
|
||||
" static GPBDescriptor *descriptor = nil;\n"
|
||||
" if (!descriptor) {\n");
|
||||
|
||||
bool has_oneofs = oneof_generators_.size();
|
||||
@ -507,30 +476,45 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
" };\n");
|
||||
}
|
||||
|
||||
printer->Print(
|
||||
" static GPBMessageFieldDescription fields[] = {\n");
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
TextFormatDecodeData text_format_decode_data;
|
||||
for (int i = 0; i < descriptor_->field_count(); ++i) {
|
||||
const FieldGenerator& field_generator =
|
||||
field_generators_.get(sorted_fields[i]);
|
||||
field_generator.GenerateFieldDescription(printer);
|
||||
if (field_generator.needs_textformat_name_support()) {
|
||||
text_format_decode_data.AddString(sorted_fields[i]->number(),
|
||||
field_generator.generated_objc_name(),
|
||||
field_generator.raw_field_name());
|
||||
bool has_fields = descriptor_->field_count() > 0;
|
||||
if (has_fields) {
|
||||
// TODO(thomasvl): The plugin's FieldGenerator::GenerateFieldDescription()
|
||||
// wraps the fieldOptions's value of this structure in an CPP gate so
|
||||
// they can be compiled away; but that still results in a const char* in
|
||||
// the structure for a NULL pointer for every message field. If the
|
||||
// fieldOptions are moved to a separate payload like the TextFormat extra
|
||||
// data is, then it would shrink that static data shrinking the binaries
|
||||
// a little more.
|
||||
// TODO(thomasvl): proto3 syntax doens't need a defaultValue in the
|
||||
// structure because primitive types are always zero. If we add a second
|
||||
// structure and a different initializer, we can avoid the wasted static
|
||||
// storage for every field in a proto3 message.
|
||||
printer->Print(
|
||||
" static GPBMessageFieldDescription fields[] = {\n");
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
for (int i = 0; i < descriptor_->field_count(); ++i) {
|
||||
const FieldGenerator& field_generator =
|
||||
field_generators_.get(sorted_fields[i]);
|
||||
field_generator.GenerateFieldDescription(printer);
|
||||
if (field_generator.needs_textformat_name_support()) {
|
||||
text_format_decode_data.AddString(sorted_fields[i]->number(),
|
||||
field_generator.generated_objc_name(),
|
||||
field_generator.raw_field_name());
|
||||
}
|
||||
}
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Print(
|
||||
" };\n");
|
||||
}
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
|
||||
bool has_enums = enum_generators_.size();
|
||||
if (has_enums) {
|
||||
printer->Print(
|
||||
" };\n"
|
||||
" static GPBMessageEnumDescription enums[] = {\n");
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
@ -543,12 +527,13 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Print(
|
||||
" };\n");
|
||||
}
|
||||
|
||||
bool has_extensions = sorted_extensions.size();
|
||||
if (has_extensions) {
|
||||
printer->Print(
|
||||
" };\n"
|
||||
" static GPBExtensionRange ranges[] = {\n");
|
||||
printer->Indent();
|
||||
printer->Indent();
|
||||
@ -561,11 +546,16 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Outdent();
|
||||
printer->Print(
|
||||
" };\n");
|
||||
}
|
||||
|
||||
map<string, string> vars;
|
||||
vars["classname"] = class_name_;
|
||||
vars["rootclassname"] = root_classname_;
|
||||
vars["fields"] = has_fields ? "fields" : "NULL";
|
||||
vars["fields_count"] =
|
||||
has_fields ? "sizeof(fields) / sizeof(GPBMessageFieldDescription)" : "0";
|
||||
vars["oneofs"] = has_oneofs ? "oneofs" : "NULL";
|
||||
vars["oneof_count"] =
|
||||
has_oneofs ? "sizeof(oneofs) / sizeof(GPBMessageOneofDescription)" : "0";
|
||||
@ -578,23 +568,23 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
vars["wireformat"] =
|
||||
descriptor_->options().message_set_wire_format() ? "YES" : "NO";
|
||||
|
||||
printer->Print(" };\n");
|
||||
if (text_format_decode_data.num_entries() == 0) {
|
||||
printer->Print(
|
||||
vars,
|
||||
" descriptor = [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
|
||||
" rootClass:[$rootclassname$ class]\n"
|
||||
" file:$rootclassname$_FileDescriptor()\n"
|
||||
" fields:fields\n"
|
||||
" fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)\n"
|
||||
" oneofs:$oneofs$\n"
|
||||
" oneofCount:$oneof_count$\n"
|
||||
" enums:$enums$\n"
|
||||
" enumCount:$enum_count$\n"
|
||||
" ranges:$ranges$\n"
|
||||
" rangeCount:$range_count$\n"
|
||||
" storageSize:sizeof($classname$_Storage)\n"
|
||||
" wireFormat:$wireformat$];\n");
|
||||
" GPBDescriptor *localDescriptor =\n"
|
||||
" [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
|
||||
" rootClass:[$rootclassname$ class]\n"
|
||||
" file:$rootclassname$_FileDescriptor()\n"
|
||||
" fields:$fields$\n"
|
||||
" fieldCount:$fields_count$\n"
|
||||
" oneofs:$oneofs$\n"
|
||||
" oneofCount:$oneof_count$\n"
|
||||
" enums:$enums$\n"
|
||||
" enumCount:$enum_count$\n"
|
||||
" ranges:$ranges$\n"
|
||||
" rangeCount:$range_count$\n"
|
||||
" storageSize:sizeof($classname$__storage_)\n"
|
||||
" wireFormat:$wireformat$];\n");
|
||||
} else {
|
||||
vars["extraTextFormatInfo"] = CEscape(text_format_decode_data.Data());
|
||||
printer->Print(
|
||||
@ -604,26 +594,29 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
|
||||
"#else\n"
|
||||
" static const char *extraTextFormatInfo = \"$extraTextFormatInfo$\";\n"
|
||||
"#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS\n"
|
||||
" descriptor = [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
|
||||
" rootClass:[$rootclassname$ class]\n"
|
||||
" file:$rootclassname$_FileDescriptor()\n"
|
||||
" fields:fields\n"
|
||||
" fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)\n"
|
||||
" oneofs:$oneofs$\n"
|
||||
" oneofCount:$oneof_count$\n"
|
||||
" enums:$enums$\n"
|
||||
" enumCount:$enum_count$\n"
|
||||
" ranges:$ranges$\n"
|
||||
" rangeCount:$range_count$\n"
|
||||
" storageSize:sizeof($classname$_Storage)\n"
|
||||
" wireFormat:$wireformat$\n"
|
||||
" extraTextFormatInfo:extraTextFormatInfo];\n");
|
||||
" GPBDescriptor *localDescriptor =\n"
|
||||
" [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
|
||||
" rootClass:[$rootclassname$ class]\n"
|
||||
" file:$rootclassname$_FileDescriptor()\n"
|
||||
" fields:$fields$\n"
|
||||
" fieldCount:$fields_count$\n"
|
||||
" oneofs:$oneofs$\n"
|
||||
" oneofCount:$oneof_count$\n"
|
||||
" enums:$enums$\n"
|
||||
" enumCount:$enum_count$\n"
|
||||
" ranges:$ranges$\n"
|
||||
" rangeCount:$range_count$\n"
|
||||
" storageSize:sizeof($classname$__storage_)\n"
|
||||
" wireFormat:$wireformat$\n"
|
||||
" extraTextFormatInfo:extraTextFormatInfo];\n");
|
||||
}
|
||||
printer->Print(
|
||||
" }\n"
|
||||
" return descriptor;\n"
|
||||
"}\n\n"
|
||||
"@end\n\n");
|
||||
" NSAssert(descriptor == nil, @\"Startup recursed!\");\n"
|
||||
" descriptor = localDescriptor;\n"
|
||||
" }\n"
|
||||
" return descriptor;\n"
|
||||
"}\n\n"
|
||||
"@end\n\n");
|
||||
|
||||
for (int i = 0; i < descriptor_->field_count(); i++) {
|
||||
field_generators_.get(descriptor_->field(i))
|
||||
|
@ -57,20 +57,13 @@ class MessageGenerator {
|
||||
MessageGenerator(const string& root_classname, const Descriptor* descriptor);
|
||||
~MessageGenerator();
|
||||
|
||||
void GenerateStaticVariablesInitialization(io::Printer* printer,
|
||||
bool* out_generated);
|
||||
void GenerateStaticVariablesInitialization(io::Printer* printer);
|
||||
void GenerateEnumHeader(io::Printer* printer);
|
||||
void GenerateMessageHeader(io::Printer* printer);
|
||||
void GenerateSource(io::Printer* printer);
|
||||
void GenerateExtensionRegistrationSource(io::Printer* printer);
|
||||
void DetermineForwardDeclarations(set<string>* fwd_decls);
|
||||
|
||||
// This only speaks for this message, not sub message/enums.
|
||||
bool IsFiltered() const { return filter_reason_.length() > 0; }
|
||||
// This message being filtered doesn't effect this, instead it covers if
|
||||
// there are any nested messages or enums.
|
||||
bool IsSubContentFiltered() const { return sub_content_filtered_; }
|
||||
|
||||
private:
|
||||
void GenerateParseFromMethodsHeader(io::Printer* printer);
|
||||
|
||||
@ -87,8 +80,6 @@ class MessageGenerator {
|
||||
const Descriptor* descriptor_;
|
||||
FieldGeneratorMap field_generators_;
|
||||
const string class_name_;
|
||||
string filter_reason_;
|
||||
bool sub_content_filtered_;
|
||||
vector<ExtensionGenerator*> extension_generators_;
|
||||
vector<EnumGenerator*> enum_generators_;
|
||||
vector<MessageGenerator*> nested_message_generators_;
|
||||
|
@ -53,7 +53,7 @@ void SetMessageVariables(const FieldDescriptor* descriptor,
|
||||
(*variables)["group_or_message"] =
|
||||
(descriptor->type() == FieldDescriptor::TYPE_GROUP) ? "Group" : "Message";
|
||||
|
||||
(*variables)["typeSpecific_value"] = "GPBStringifySymbol(" + message_type + ")";
|
||||
(*variables)["dataTypeSpecific_value"] = "GPBStringifySymbol(" + message_type + ")";
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
Loading…
Reference in New Issue
Block a user