GPBUtilities_PackagePrivate.h
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 #import <Foundation/Foundation.h>
32 
33 #import "GPBUtilities.h"
34 
36 
37 // Macros for stringifying library symbols. These are used in the generated
38 // PB descriptor classes wherever a library symbol name is represented as a
39 // string. See README.google for more information.
40 #define GPBStringify(S) #S
41 #define GPBStringifySymbol(S) GPBStringify(S)
42 
43 #define GPBNSStringify(S) @#S
44 #define GPBNSStringifySymbol(S) GPBNSStringify(S)
45 
46 // Constant to internally mark when there is no has bit.
47 #define GPBNoHasBit INT32_MAX
48 
49 CF_EXTERN_C_BEGIN
50 
51 // These two are used to inject a runtime check for version mismatch into the
52 // generated sources to make sure they are linked with a supporting runtime.
53 void GPBCheckRuntimeVersionSupport(int32_t objcRuntimeVersion);
55  // NOTE: By being inline here, this captures the value from the library's
56  // headers at the time the generated code was compiled.
57 #if defined(DEBUG) && DEBUG
59 #endif
60 }
61 
62 // Legacy version of the checks, remove when GOOGLE_PROTOBUF_OBJC_GEN_VERSION
63 // goes away (see more info in GPBBootstrap.h).
66 #if defined(DEBUG) && DEBUG
68 #endif
69 }
70 
71 // Conversion functions for de/serializing floating point types.
72 
74  GPBInternalCompileAssert(sizeof(double) == sizeof(int64_t), double_not_64_bits);
75  int64_t result;
76  memcpy(&result, &v, sizeof(result));
77  return result;
78 }
79 
81  GPBInternalCompileAssert(sizeof(float) == sizeof(int32_t), float_not_32_bits);
82  int32_t result;
83  memcpy(&result, &v, sizeof(result));
84  return result;
85 }
86 
88  GPBInternalCompileAssert(sizeof(double) == sizeof(int64_t), double_not_64_bits);
89  double result;
90  memcpy(&result, &v, sizeof(result));
91  return result;
92 }
93 
95  GPBInternalCompileAssert(sizeof(float) == sizeof(int32_t), float_not_32_bits);
96  float result;
97  memcpy(&result, &v, sizeof(result));
98  return result;
99 }
100 
101 GPB_INLINE int32_t GPBLogicalRightShift32(int32_t value, int32_t spaces) {
102  return (int32_t)((uint32_t)(value) >> spaces);
103 }
104 
105 GPB_INLINE int64_t GPBLogicalRightShift64(int64_t value, int32_t spaces) {
106  return (int64_t)((uint64_t)(value) >> spaces);
107 }
108 
109 // Decode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers
110 // into values that can be efficiently encoded with varint. (Otherwise,
111 // negative values must be sign-extended to 64 bits to be varint encoded,
112 // thus always taking 10 bytes on the wire.)
113 GPB_INLINE int32_t GPBDecodeZigZag32(uint32_t n) {
114  return (int32_t)(GPBLogicalRightShift32((int32_t)n, 1) ^ -((int32_t)(n) & 1));
115 }
116 
117 // Decode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers
118 // into values that can be efficiently encoded with varint. (Otherwise,
119 // negative values must be sign-extended to 64 bits to be varint encoded,
120 // thus always taking 10 bytes on the wire.)
121 GPB_INLINE int64_t GPBDecodeZigZag64(uint64_t n) {
122  return (int64_t)(GPBLogicalRightShift64((int64_t)n, 1) ^ -((int64_t)(n) & 1));
123 }
124 
125 // Encode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers
126 // into values that can be efficiently encoded with varint. (Otherwise,
127 // negative values must be sign-extended to 64 bits to be varint encoded,
128 // thus always taking 10 bytes on the wire.)
129 GPB_INLINE uint32_t GPBEncodeZigZag32(int32_t n) {
130  // Note: the right-shift must be arithmetic
131  return ((uint32_t)n << 1) ^ (uint32_t)(n >> 31);
132 }
133 
134 // Encode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers
135 // into values that can be efficiently encoded with varint. (Otherwise,
136 // negative values must be sign-extended to 64 bits to be varint encoded,
137 // thus always taking 10 bytes on the wire.)
138 GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n) {
139  // Note: the right-shift must be arithmetic
140  return ((uint64_t)n << 1) ^ (uint64_t)(n >> 63);
141 }
142 
143 #pragma clang diagnostic push
144 #pragma clang diagnostic ignored "-Wswitch-enum"
145 #pragma clang diagnostic ignored "-Wdirect-ivar-access"
146 
148  switch (type) {
149  case GPBDataTypeBytes:
150  case GPBDataTypeString:
151  case GPBDataTypeMessage:
152  case GPBDataTypeGroup:
153  return YES;
154  default:
155  return NO;
156  }
157 }
158 
160  switch (type) {
161  case GPBDataTypeMessage:
162  case GPBDataTypeGroup:
163  return YES;
164  default:
165  return NO;
166  }
167 }
168 
170  return GPBDataTypeIsMessage(field->description_->dataType);
171 }
172 
174  return GPBDataTypeIsObject(field->description_->dataType);
175 }
176 
179 }
180 
181 // The field is an array/map or it has an object value.
183  GPBMessageFieldDescription *desc = field->description_;
184  if ((desc->flags & (GPBFieldRepeated | GPBFieldMapKeyMask)) != 0) {
185  return YES;
186  }
187  return GPBDataTypeIsObject(desc->dataType);
188 }
189 
190 BOOL GPBGetHasIvar(GPBMessage *self, int32_t index, uint32_t fieldNumber);
191 void GPBSetHasIvar(GPBMessage *self, int32_t idx, uint32_t fieldNumber,
192  BOOL value);
193 uint32_t GPBGetHasOneof(GPBMessage *self, int32_t index);
194 
195 GPB_INLINE BOOL
197  GPBMessageFieldDescription *fieldDesc = field->description_;
198  return GPBGetHasIvar(self, fieldDesc->hasIndex, fieldDesc->number);
199 }
201  BOOL value) {
202  GPBMessageFieldDescription *fieldDesc = field->description_;
203  GPBSetHasIvar(self, fieldDesc->hasIndex, fieldDesc->number, value);
204 }
205 
207  int32_t oneofHasIndex, uint32_t fieldNumberNotToClear);
208 
209 #pragma clang diagnostic pop
210 
211 //%PDDM-DEFINE GPB_IVAR_SET_DECL(NAME, TYPE)
212 //%void GPBSet##NAME##IvarWithFieldInternal(GPBMessage *self,
213 //% NAME$S GPBFieldDescriptor *field,
214 //% NAME$S TYPE value,
215 //% NAME$S GPBFileSyntax syntax);
216 //%PDDM-EXPAND GPB_IVAR_SET_DECL(Bool, BOOL)
217 // This block of code is generated, do not edit it directly.
218 
221  BOOL value,
222  GPBFileSyntax syntax);
223 //%PDDM-EXPAND GPB_IVAR_SET_DECL(Int32, int32_t)
224 // This block of code is generated, do not edit it directly.
225 
228  int32_t value,
229  GPBFileSyntax syntax);
230 //%PDDM-EXPAND GPB_IVAR_SET_DECL(UInt32, uint32_t)
231 // This block of code is generated, do not edit it directly.
232 
235  uint32_t value,
236  GPBFileSyntax syntax);
237 //%PDDM-EXPAND GPB_IVAR_SET_DECL(Int64, int64_t)
238 // This block of code is generated, do not edit it directly.
239 
242  int64_t value,
243  GPBFileSyntax syntax);
244 //%PDDM-EXPAND GPB_IVAR_SET_DECL(UInt64, uint64_t)
245 // This block of code is generated, do not edit it directly.
246 
249  uint64_t value,
250  GPBFileSyntax syntax);
251 //%PDDM-EXPAND GPB_IVAR_SET_DECL(Float, float)
252 // This block of code is generated, do not edit it directly.
253 
256  float value,
257  GPBFileSyntax syntax);
258 //%PDDM-EXPAND GPB_IVAR_SET_DECL(Double, double)
259 // This block of code is generated, do not edit it directly.
260 
263  double value,
264  GPBFileSyntax syntax);
265 //%PDDM-EXPAND GPB_IVAR_SET_DECL(Enum, int32_t)
266 // This block of code is generated, do not edit it directly.
267 
270  int32_t value,
271  GPBFileSyntax syntax);
272 //%PDDM-EXPAND-END (8 expansions)
273 
276  GPBFileSyntax syntax);
277 
279 
282  GPBFileSyntax syntax);
285  id __attribute__((ns_consumed))
286  value,
287  GPBFileSyntax syntax);
288 
289 // GPBGetObjectIvarWithField will automatically create the field (message) if
290 // it doesn't exist. GPBGetObjectIvarWithFieldNoAutocreate will return nil.
293 
296  id __attribute__((ns_consumed)) value);
297 
298 // Clears and releases the autocreated message ivar, if it's autocreated. If
299 // it's not set as autocreated, this method does nothing.
302 
303 // Returns an Objective C encoding for |selector|. |instanceSel| should be
304 // YES if it's an instance selector (as opposed to a class selector).
305 // |selector| must be a selector from MessageSignatureProtocol.
306 const char *GPBMessageEncodingForSelector(SEL selector, BOOL instanceSel);
307 
308 // Helper for text format name encoding.
309 // decodeData is the data describing the sepecial decodes.
310 // key and inputString are the input that needs decoding.
311 NSString *GPBDecodeTextFormatName(const uint8_t *decodeData, int32_t key,
312  NSString *inputString);
313 
314 // A series of selectors that are used solely to get @encoding values
315 // for them by the dynamic protobuf runtime code. See
316 // GPBMessageEncodingForSelector for details. GPBRootObject conforms to
317 // the protocol so that it is encoded in the Objective C runtime.
319 @optional
320 
321 #define GPB_MESSAGE_SIGNATURE_ENTRY(TYPE, NAME) \
322  -(TYPE)get##NAME; \
323  -(void)set##NAME : (TYPE)value; \
324  -(TYPE)get##NAME##AtIndex : (NSUInteger)index;
325 
327 GPB_MESSAGE_SIGNATURE_ENTRY(uint32_t, Fixed32)
328 GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, SFixed32)
330 GPB_MESSAGE_SIGNATURE_ENTRY(uint64_t, Fixed64)
331 GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, SFixed64)
335 GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, SInt32)
336 GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, SInt64)
339 GPB_MESSAGE_SIGNATURE_ENTRY(NSData *, Bytes)
340 GPB_MESSAGE_SIGNATURE_ENTRY(NSString *, String)
344 
345 #undef GPB_MESSAGE_SIGNATURE_ENTRY
346 
347 - (id)getArray;
348 - (NSUInteger)getArrayCount;
349 - (void)setArray:(NSArray *)array;
350 + (id)getClassValue;
351 @end
352 
353 BOOL GPBClassHasSel(Class aClass, SEL sel);
354 
355 CF_EXTERN_C_END
GPBSetUInt64IvarWithFieldInternal
void GPBSetUInt64IvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, uint64_t value, GPBFileSyntax syntax)
GPBEncodeZigZag32
GPB_INLINE uint32_t GPBEncodeZigZag32(int32_t n)
Definition: GPBUtilities_PackagePrivate.h:129
GOOGLE_PROTOBUF_OBJC_VERSION
#define GOOGLE_PROTOBUF_OBJC_VERSION
Definition: GPBBootstrap.h:130
Json::UInt64
unsigned long long int UInt64
Definition: json.h:241
-[GPBMessageSignatureProtocol-p getArrayCount]
NSUInteger getArrayCount()
GPBOneofDescriptor
Definition: GPBDescriptor.h:138
GPBUtilities.h
Bool
Definition: gtest_pred_impl_unittest.cc:56
GPBGetObjectIvarWithFieldNoAutocreate
id GPBGetObjectIvarWithFieldNoAutocreate(GPBMessage *self, GPBFieldDescriptor *field)
GPBSetHasIvar
void GPBSetHasIvar(GPBMessage *self, int32_t idx, uint32_t fieldNumber, BOOL value)
GPBGetEnumIvarWithFieldInternal
int32_t GPBGetEnumIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax)
GPBClassHasSel
BOOL GPBClassHasSel(Class aClass, SEL sel)
GPBMessageSignatureProtocol-p
Definition: GPBUtilities_PackagePrivate.h:318
GPBDecodeZigZag64
GPB_INLINE int64_t GPBDecodeZigZag64(uint64_t n)
Definition: GPBUtilities_PackagePrivate.h:121
GPBDebugCheckRuntimeVersion
GPB_INLINE void GPBDebugCheckRuntimeVersion()
Definition: GPBUtilities_PackagePrivate.h:65
desc
#define desc
Definition: extension_set.h:342
GPBFieldDataTypeIsObject
GPB_INLINE BOOL GPBFieldDataTypeIsObject(GPBFieldDescriptor *field)
Definition: GPBUtilities_PackagePrivate.h:173
GPBClearAutocreatedMessageIvarWithField
void GPBClearAutocreatedMessageIvarWithField(GPBMessage *self, GPBFieldDescriptor *field)
GPBSetInt32IvarWithFieldInternal
void GPBSetInt32IvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, int32_t value, GPBFileSyntax syntax)
GPBMessageFieldDescription::number
uint32_t number
Definition: GPBDescriptor_PackagePrivate.h:90
GPBGetObjectIvarWithField
id GPBGetObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field)
GPBLogicalRightShift32
GPB_INLINE int32_t GPBLogicalRightShift32(int32_t value, int32_t spaces)
Definition: GPBUtilities_PackagePrivate.h:101
GPBDescriptor_PackagePrivate.h
GPBGetHasIvar
BOOL GPBGetHasIvar(GPBMessage *self, int32_t index, uint32_t fieldNumber)
GPBMessageEncodingForSelector
const char * GPBMessageEncodingForSelector(SEL selector, BOOL instanceSel)
GPBLogicalRightShift64
GPB_INLINE int64_t GPBLogicalRightShift64(int64_t value, int32_t spaces)
Definition: GPBUtilities_PackagePrivate.h:105
testing::internal::Int32
TypeWithSize< 4 >::Int Int32
Definition: gtest-port.h:2241
GPBConvertInt32ToFloat
GPB_INLINE float GPBConvertInt32ToFloat(int32_t v)
Definition: GPBUtilities_PackagePrivate.h:94
Enum
Definition: type.pb.h:797
GPBSetBoolIvarWithFieldInternal
void GPBSetBoolIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, BOOL value, GPBFileSyntax syntax)
idx
static uint32_t idx(tarjan *t, const upb_refcounted *r)
Definition: ruby/ext/google/protobuf_c/upb.c:5925
GPBDataTypeIsObject
GPB_INLINE BOOL GPBDataTypeIsObject(GPBDataType type)
Definition: GPBUtilities_PackagePrivate.h:147
GPBSetFloatIvarWithFieldInternal
void GPBSetFloatIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, float value, GPBFileSyntax syntax)
testing::internal::Double
FloatingPoint< double > Double
Definition: gtest-internal.h:429
testing::internal::UInt32
TypeWithSize< 4 >::UInt UInt32
Definition: gtest-port.h:2242
GPBSetEnumIvarWithFieldInternal
void GPBSetEnumIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, int32_t value, GPBFileSyntax syntax)
+[GPBMessageSignatureProtocol-p getClassValue]
id getClassValue()
GPBGetHasIvarField
GPB_INLINE BOOL GPBGetHasIvarField(GPBMessage *self, GPBFieldDescriptor *field)
Definition: GPBUtilities_PackagePrivate.h:196
testing::internal::Float
FloatingPoint< float > Float
Definition: gtest-internal.h:428
id
GLenum GLuint id
Definition: glcorearb.h:2695
GPB_INLINE
#define GPB_INLINE
Definition: GPBBootstrap.h:78
GPB_DEBUG_CHECK_RUNTIME_VERSIONS
GPB_INLINE void GPB_DEBUG_CHECK_RUNTIME_VERSIONS()
Definition: GPBUtilities_PackagePrivate.h:54
GPBDataTypeIsMessage
GPB_INLINE BOOL GPBDataTypeIsMessage(GPBDataType type)
Definition: GPBUtilities_PackagePrivate.h:159
GPBSetObjectIvarWithFieldInternal
void GPBSetObjectIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, id value, GPBFileSyntax syntax)
GPBExtensionDescriptor::description_
package GPBExtensionDescription * description_
Definition: GPBDescriptor_PackagePrivate.h:238
GPBSetUInt32IvarWithFieldInternal
void GPBSetUInt32IvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, uint32_t value, GPBFileSyntax syntax)
field
const FieldDescriptor * field
Definition: parser_unittest.cc:2694
key
const SETUP_TEARDOWN_TESTCONTEXT char * key
Definition: test_wss_transport.cpp:10
GPBInternalCompileAssert
GPBInternalCompileAssert(sizeof(GPBMessageFieldDescriptionWithDefault)==(sizeof(GPBGenericValue)+sizeof(GPBMessageFieldDescription)), DescriptionsWithDefault_different_size_than_expected)
GPBConvertFloatToInt32
GPB_INLINE int32_t GPBConvertFloatToInt32(float v)
Definition: GPBUtilities_PackagePrivate.h:80
GPBMessageFieldDescription::hasIndex
int32_t hasIndex
Definition: GPBDescriptor_PackagePrivate.h:95
void
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
n
GLdouble n
Definition: glcorearb.h:4153
GPBSetInt64IvarWithFieldInternal
void GPBSetInt64IvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, int64_t value, GPBFileSyntax syntax)
type
GLenum type
Definition: glcorearb.h:2695
GPBFieldDataTypeIsMessage
GPB_INLINE BOOL GPBFieldDataTypeIsMessage(GPBFieldDescriptor *field)
Definition: GPBUtilities_PackagePrivate.h:169
GPBFieldDescriptor
Definition: GPBDescriptor.h:167
GPBSetHasIvarField
GPB_INLINE void GPBSetHasIvarField(GPBMessage *self, GPBFieldDescriptor *field, BOOL value)
Definition: GPBUtilities_PackagePrivate.h:200
v
const GLdouble * v
Definition: glcorearb.h:3106
GPBFieldStoresObject
GPB_INLINE BOOL GPBFieldStoresObject(GPBFieldDescriptor *field)
Definition: GPBUtilities_PackagePrivate.h:182
GPBExtensionDescriptor
Definition: GPBDescriptor.h:296
GPBMessageFieldDescription
Definition: GPBDescriptor_PackagePrivate.h:79
GPBConvertInt64ToDouble
GPB_INLINE double GPBConvertInt64ToDouble(int64_t v)
Definition: GPBUtilities_PackagePrivate.h:87
GPBCheckRuntimeVersionSupport
CF_EXTERN_C_BEGIN void GPBCheckRuntimeVersionSupport(int32_t objcRuntimeVersion)
GPBExtensionDescription::dataType
GPBDataType dataType
Definition: GPBDescriptor_PackagePrivate.h:130
GPBMessage
Definition: GPBMessage.h:83
GPBDecodeTextFormatName
NSString * GPBDecodeTextFormatName(const uint8_t *decodeData, int32_t key, NSString *inputString)
GPB_MESSAGE_SIGNATURE_ENTRY
#define GPB_MESSAGE_SIGNATURE_ENTRY(TYPE, NAME)
Definition: GPBUtilities_PackagePrivate.h:321
GPBExtensionIsMessage
GPB_INLINE BOOL GPBExtensionIsMessage(GPBExtensionDescriptor *ext)
Definition: GPBUtilities_PackagePrivate.h:177
GOOGLE_PROTOBUF_OBJC_GEN_VERSION
#define GOOGLE_PROTOBUF_OBJC_GEN_VERSION
Definition: GPBBootstrap.h:141
GPBEncodeZigZag64
GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n)
Definition: GPBUtilities_PackagePrivate.h:138
GPBMaybeClearOneof
void GPBMaybeClearOneof(GPBMessage *self, GPBOneofDescriptor *oneof, int32_t oneofHasIndex, uint32_t fieldNumberNotToClear)
value
GLsizei const GLfloat * value
Definition: glcorearb.h:3093
GPBCheckRuntimeVersionInternal
void GPBCheckRuntimeVersionInternal(int32_t version)
GPBSetRetainedObjectIvarWithFieldInternal
void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, id __attribute__((ns_consumed)) value, GPBFileSyntax syntax)
GPBSetDoubleIvarWithFieldInternal
void GPBSetDoubleIvarWithFieldInternal(GPBMessage *self, GPBFieldDescriptor *field, double value, GPBFileSyntax syntax)
version
static struct @0 version
GPBSetAutocreatedRetainedObjectIvarWithField
void GPBSetAutocreatedRetainedObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field, id __attribute__((ns_consumed)) value)
index
GLuint index
Definition: glcorearb.h:3055
GPBDecodeZigZag32
GPB_INLINE int32_t GPBDecodeZigZag32(uint32_t n)
Definition: GPBUtilities_PackagePrivate.h:113
Json::Int64
long long int Int64
Definition: json.h:240
GPBConvertDoubleToInt64
GPB_INLINE int64_t GPBConvertDoubleToInt64(double v)
Definition: GPBUtilities_PackagePrivate.h:73
-[GPBMessageSignatureProtocol-p getArray]
id getArray()
GPBGetHasOneof
uint32_t GPBGetHasOneof(GPBMessage *self, int32_t index)


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:53