123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- #import "GPBDescriptor.h"
- #import "GPBWireFormat.h"
- typedef NS_OPTIONS(uint16_t, GPBFieldFlags) {
- GPBFieldNone = 0,
-
- GPBFieldRequired = 1 << 0,
- GPBFieldRepeated = 1 << 1,
- GPBFieldPacked = 1 << 2,
- GPBFieldOptional = 1 << 3,
- GPBFieldHasDefaultValue = 1 << 4,
-
-
- GPBFieldTextFormatNameCustom = 1 << 6,
-
- GPBFieldHasEnumDescriptor = 1 << 7,
-
-
-
-
- GPBFieldMapKeyMask = 0xF << 8,
- GPBFieldMapKeyInt32 = 1 << 8,
- GPBFieldMapKeyInt64 = 2 << 8,
- GPBFieldMapKeyUInt32 = 3 << 8,
- GPBFieldMapKeyUInt64 = 4 << 8,
- GPBFieldMapKeySInt32 = 5 << 8,
- GPBFieldMapKeySInt64 = 6 << 8,
- GPBFieldMapKeyFixed32 = 7 << 8,
- GPBFieldMapKeyFixed64 = 8 << 8,
- GPBFieldMapKeySFixed32 = 9 << 8,
- GPBFieldMapKeySFixed64 = 10 << 8,
- GPBFieldMapKeyBool = 11 << 8,
- GPBFieldMapKeyString = 12 << 8,
- };
- typedef struct GPBMessageFieldDescription {
-
- const char *name;
- union {
- const char *className;
-
-
- GPBEnumDescriptorFunc enumDescFunc;
- GPBEnumValidationFunc enumVerifier;
- } dataTypeSpecific;
-
- uint32_t number;
-
-
-
-
- int32_t hasIndex;
-
- uint32_t offset;
-
- GPBFieldFlags flags;
-
- GPBDataType dataType;
- } GPBMessageFieldDescription;
- typedef struct GPBMessageFieldDescriptionWithDefault {
-
- GPBGenericValue defaultValue;
- GPBMessageFieldDescription core;
- } GPBMessageFieldDescriptionWithDefault;
- typedef NS_OPTIONS(uint8_t, GPBExtensionOptions) {
- GPBExtensionNone = 0,
-
- GPBExtensionRepeated = 1 << 0,
- GPBExtensionPacked = 1 << 1,
- GPBExtensionSetWireFormat = 1 << 2,
- };
- typedef struct GPBExtensionDescription {
- GPBGenericValue defaultValue;
- const char *singletonName;
- const char *extendedClass;
- const char *messageOrGroupClassName;
- GPBEnumDescriptorFunc enumDescriptorFunc;
- int32_t fieldNumber;
- GPBDataType dataType;
- GPBExtensionOptions options;
- } GPBExtensionDescription;
- typedef NS_OPTIONS(uint32_t, GPBDescriptorInitializationFlags) {
- GPBDescriptorInitializationFlag_None = 0,
- GPBDescriptorInitializationFlag_FieldsWithDefault = 1 << 0,
- GPBDescriptorInitializationFlag_WireFormat = 1 << 1,
- };
- @interface GPBDescriptor () {
- @package
- NSArray *fields_;
- NSArray *oneofs_;
- uint32_t storageSize_;
- }
- + (instancetype)
- allocDescriptorForClass:(Class)messageClass
- rootClass:(Class)rootClass
- file:(GPBFileDescriptor *)file
- fields:(void *)fieldDescriptions
- fieldCount:(uint32_t)fieldCount
- storageSize:(uint32_t)storageSize
- flags:(GPBDescriptorInitializationFlags)flags;
- - (instancetype)initWithClass:(Class)messageClass
- file:(GPBFileDescriptor *)file
- fields:(NSArray *)fields
- storageSize:(uint32_t)storage
- wireFormat:(BOOL)wireFormat;
- - (void)setupOneofs:(const char **)oneofNames
- count:(uint32_t)count
- firstHasIndex:(int32_t)firstHasIndex;
- - (void)setupExtraTextInfo:(const char *)extraTextFormatInfo;
- - (void)setupExtensionRanges:(const GPBExtensionRange *)ranges count:(int32_t)count;
- - (void)setupContainingMessageClassName:(const char *)msgClassName;
- - (void)setupMessageClassNameSuffix:(NSString *)suffix;
- @end
- @interface GPBFileDescriptor ()
- - (instancetype)initWithPackage:(NSString *)package
- objcPrefix:(NSString *)objcPrefix
- syntax:(GPBFileSyntax)syntax;
- - (instancetype)initWithPackage:(NSString *)package
- syntax:(GPBFileSyntax)syntax;
- @end
- @interface GPBOneofDescriptor () {
- @package
- const char *name_;
- NSArray *fields_;
- SEL caseSel_;
- }
- - (instancetype)initWithName:(const char *)name fields:(NSArray *)fields;
- @end
- @interface GPBFieldDescriptor () {
- @package
- GPBMessageFieldDescription *description_;
- GPB_UNSAFE_UNRETAINED GPBOneofDescriptor *containingOneof_;
- SEL getSel_;
- SEL setSel_;
- SEL hasOrCountSel_;
- SEL setHasSel_;
- }
- - (instancetype)initWithFieldDescription:(void *)description
- includesDefault:(BOOL)includesDefault
- syntax:(GPBFileSyntax)syntax;
- @end
- @interface GPBEnumDescriptor ()
- + (instancetype)
- allocDescriptorForName:(NSString *)name
- valueNames:(const char *)valueNames
- values:(const int32_t *)values
- count:(uint32_t)valueCount
- enumVerifier:(GPBEnumValidationFunc)enumVerifier;
- + (instancetype)
- allocDescriptorForName:(NSString *)name
- valueNames:(const char *)valueNames
- values:(const int32_t *)values
- count:(uint32_t)valueCount
- enumVerifier:(GPBEnumValidationFunc)enumVerifier
- extraTextFormatInfo:(const char *)extraTextFormatInfo;
- - (instancetype)initWithName:(NSString *)name
- valueNames:(const char *)valueNames
- values:(const int32_t *)values
- count:(uint32_t)valueCount
- enumVerifier:(GPBEnumValidationFunc)enumVerifier;
- @end
- @interface GPBExtensionDescriptor () {
- @package
- GPBExtensionDescription *description_;
- }
- @property(nonatomic, readonly) GPBWireFormat wireType;
- @property(nonatomic, readonly) GPBWireFormat alternateWireType;
- - (instancetype)initWithExtensionDescription:
- (GPBExtensionDescription *)description;
- - (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other;
- @end
- CF_EXTERN_C_BEGIN
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdirect-ivar-access"
- GPB_INLINE BOOL GPBFieldIsMapOrArray(GPBFieldDescriptor *field) {
- return (field->description_->flags &
- (GPBFieldRepeated | GPBFieldMapKeyMask)) != 0;
- }
- GPB_INLINE GPBDataType GPBGetFieldDataType(GPBFieldDescriptor *field) {
- return field->description_->dataType;
- }
- GPB_INLINE int32_t GPBFieldHasIndex(GPBFieldDescriptor *field) {
- return field->description_->hasIndex;
- }
- GPB_INLINE uint32_t GPBFieldNumber(GPBFieldDescriptor *field) {
- return field->description_->number;
- }
- #pragma clang diagnostic pop
- uint32_t GPBFieldTag(GPBFieldDescriptor *self);
- uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self);
- 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;
- }
- #ifndef GPBInternalCompileAssert
- #if __has_feature(c_static_assert) || __has_extension(c_static_assert)
- #define GPBInternalCompileAssert(test, msg) _Static_assert((test), #msg)
- #else
-
- #define GPBInternalCompileAssertSymbolInner(line, msg) GPBInternalCompileAssert ## line ## __ ## msg
- #define GPBInternalCompileAssertSymbol(line, msg) GPBInternalCompileAssertSymbolInner(line, msg)
- #define GPBInternalCompileAssert(test, msg) \
- typedef char GPBInternalCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ]
- #endif
- #endif
- GPBInternalCompileAssert(sizeof(GPBMessageFieldDescriptionWithDefault) ==
- (sizeof(GPBGenericValue) +
- sizeof(GPBMessageFieldDescription)),
- DescriptionsWithDefault_different_size_than_expected);
- CF_EXTERN_C_END
|