Go to the documentation of this file.
31 #ifndef __GOOGLE_PROTOBUF_PHP_PROTOBUF_H__
32 #define __GOOGLE_PROTOBUF_PHP_PROTOBUF_H__
39 #define PHP_PROTOBUF_EXTNAME "protobuf"
40 #define PHP_PROTOBUF_VERSION "3.9.2"
42 #define MAX_LENGTH_OF_INT64 20
43 #define SIZEOF_INT64 8
46 #define ARRAY_SIZE(x) \
47 ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
53 #if PHP_VERSION_ID < 70300
54 #define GC_ADDREF(h) ++GC_REFCOUNT(h)
55 #define GC_DELREF(h) --GC_REFCOUNT(h)
58 #if PHP_MAJOR_VERSION < 7
60 #define php_proto_zend_literal const zend_literal*
61 #define PHP_PROTO_CASE_IS_BOOL IS_BOOL
62 #define PHP_PROTO_SIZE int
63 #define PHP_PROTO_LONG long
64 #define PHP_PROTO_TSRMLS_DC TSRMLS_DC
65 #define PHP_PROTO_TSRMLS_CC TSRMLS_CC
69 #define PHP_PROTO_ZVAL_STRING(zval_ptr, s, copy) \
70 ZVAL_STRING(zval_ptr, s, copy)
71 #define PHP_PROTO_ZVAL_STRINGL(zval_ptr, s, len, copy) \
72 ZVAL_STRINGL(zval_ptr, s, len, copy)
73 #define PHP_PROTO_RETURN_STRING(s, copy) RETURN_STRING(s, copy)
74 #define PHP_PROTO_RETURN_STRINGL(s, len, copy) RETURN_STRINGL(s, len, copy)
75 #define PHP_PROTO_RETVAL_STRINGL(s, len, copy) RETVAL_STRINGL(s, len, copy)
76 #define php_proto_zend_make_printable_zval(from, to) \
79 zend_make_printable_zval(from, to, &use_copy); \
84 #define PHP_PROTO_HASH_OF(array) Z_ARRVAL_P(array)
86 #define php_proto_zend_hash_index_update_zval(ht, h, pData) \
87 zend_hash_index_update(ht, h, &(pData), sizeof(void*), NULL)
89 #define php_proto_zend_hash_update_zval(ht, key, key_len, value) \
90 zend_hash_update(ht, key, key_len, value, sizeof(void*), NULL)
92 #define php_proto_zend_hash_update(ht, key, key_len) \
93 zend_hash_update(ht, key, key_len, 0, 0, NULL)
95 #define php_proto_zend_hash_index_update_mem(ht, h, pData, nDataSize, pDest) \
96 zend_hash_index_update(ht, h, pData, nDataSize, pDest)
98 #define php_proto_zend_hash_update_mem(ht, key, key_len, pData, nDataSize, \
100 zend_hash_update(ht, key, key_len, pData, nDataSize, pDest)
102 #define php_proto_zend_hash_index_find_zval(ht, h, pDest) \
103 zend_hash_index_find(ht, h, pDest)
105 #define php_proto_zend_hash_find(ht, key, key_len, pDest) \
106 zend_hash_find(ht, key, key_len, pDest)
108 #define php_proto_zend_hash_index_find_mem(ht, h, pDest) \
109 zend_hash_index_find(ht, h, pDest)
111 #define php_proto_zend_hash_find_zval(ht, key, key_len, pDest) \
112 zend_hash_find(ht, key, key_len, pDest)
114 #define php_proto_zend_hash_find_mem(ht, key, key_len, pDest) \
115 zend_hash_find(ht, key, key_len, pDest)
117 #define php_proto_zend_hash_next_index_insert_zval(ht, pData) \
118 zend_hash_next_index_insert(ht, pData, sizeof(void*), NULL)
120 #define php_proto_zend_hash_next_index_insert_mem(ht, pData, nDataSize, pDest) \
121 zend_hash_next_index_insert(ht, pData, nDataSize, pDest)
123 #define php_proto_zend_hash_get_current_data_ex(ht, pDest, pos) \
124 zend_hash_get_current_data_ex(ht, pDest, pos)
128 #define PHP_PROTO_WRAP_OBJECT_START(name) \
131 #define PHP_PROTO_WRAP_OBJECT_END \
134 #define PHP_PROTO_INIT_SUBMSGCLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \
135 void LOWWERNAME##_init(TSRMLS_D) { \
136 zend_class_entry class_type; \
137 const char* class_name = CLASSNAME; \
138 INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \
139 LOWWERNAME##_methods); \
140 LOWWERNAME##_type = zend_register_internal_class_ex( \
141 &class_type, message_type, NULL TSRMLS_CC); \
142 LOWWERNAME##_type->create_object = message_create; \
143 zend_do_inheritance(LOWWERNAME##_type, message_type TSRMLS_CC);
144 #define PHP_PROTO_INIT_SUBMSGCLASS_END \
147 #define PHP_PROTO_INIT_ENUMCLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \
148 void LOWWERNAME##_init(TSRMLS_D) { \
149 zend_class_entry class_type; \
150 const char* class_name = CLASSNAME; \
151 INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \
152 LOWWERNAME##_methods); \
153 LOWWERNAME##_type = zend_register_internal_class(&class_type TSRMLS_CC);
154 #define PHP_PROTO_INIT_ENUMCLASS_END \
157 #define PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \
158 void LOWWERNAME##_init(TSRMLS_D) { \
159 zend_class_entry class_type; \
160 const char* class_name = CLASSNAME; \
161 INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \
162 LOWWERNAME##_methods); \
163 LOWWERNAME##_type = zend_register_internal_class(&class_type TSRMLS_CC); \
164 LOWWERNAME##_type->create_object = LOWWERNAME##_create; \
165 LOWWERNAME##_handlers = PEMALLOC(zend_object_handlers); \
166 memcpy(LOWWERNAME##_handlers, zend_get_std_object_handlers(), \
167 sizeof(zend_object_handlers));
168 #define PHP_PROTO_INIT_CLASS_END \
171 #define PHP_PROTO_OBJECT_CREATE_START(NAME, LOWWERNAME) \
172 static zend_object_value LOWWERNAME##_create( \
173 zend_class_entry* ce TSRMLS_DC) { \
174 PHP_PROTO_ALLOC_CLASS_OBJECT(NAME, ce); \
175 zend_object_std_init(&intern->std, ce TSRMLS_CC); \
176 object_properties_init(&intern->std, ce);
177 #define PHP_PROTO_OBJECT_CREATE_END(NAME, LOWWERNAME) \
178 PHP_PROTO_FREE_CLASS_OBJECT(NAME, LOWWERNAME##_free, LOWWERNAME##_handlers); \
181 #define PHP_PROTO_OBJECT_FREE_START(classname, lowername) \
182 void lowername##_free(void* object TSRMLS_DC) { \
183 classname* intern = object;
184 #define PHP_PROTO_OBJECT_FREE_END \
185 zend_object_std_dtor(&intern->std TSRMLS_CC); \
189 #define PHP_PROTO_OBJECT_DTOR_START(classname, lowername)
190 #define PHP_PROTO_OBJECT_DTOR_END
192 #define CACHED_VALUE zval*
193 #define CACHED_TO_ZVAL_PTR(VALUE) (VALUE)
194 #define CACHED_PTR_TO_ZVAL_PTR(VALUE) (*VALUE)
195 #define ZVAL_PTR_TO_CACHED_PTR(VALUE) (&VALUE)
196 #define ZVAL_PTR_TO_CACHED_VALUE(VALUE) (VALUE)
197 #define ZVAL_TO_CACHED_VALUE(VALUE) (&VALUE)
199 #define CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(zval_ptr, class_type) \
200 ZVAL_OBJ(zval_ptr, class_type->create_object(class_type TSRMLS_CC));
202 #define PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(value) \
203 SEPARATE_ZVAL_IF_NOT_REF(value)
205 #define PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL EG(uninitialized_zval_ptr)
207 #define OBJ_PROP(OBJECT, OFFSET) &((OBJECT)->properties_table[OFFSET])
209 #define php_proto_zval_ptr_dtor(zval_ptr) \
210 zval_ptr_dtor(&(zval_ptr))
212 #define PHP_PROTO_ALLOC_CLASS_OBJECT(class_object, class_type) \
213 class_object* intern; \
214 intern = (class_object*)emalloc(sizeof(class_object)); \
215 memset(intern, 0, sizeof(class_object));
217 #define PHP_PROTO_FREE_CLASS_OBJECT(class_object, class_object_free, handler) \
218 zend_object_value retval = {0}; \
219 retval.handle = zend_objects_store_put( \
220 intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, \
221 class_object_free, NULL TSRMLS_CC); \
222 retval.handlers = handler; \
225 #define PHP_PROTO_ALLOC_ARRAY(zval_ptr) \
226 ALLOC_HASHTABLE(Z_ARRVAL_P(zval_ptr)); \
227 Z_TYPE_P(zval_ptr) = IS_ARRAY;
229 #define ZVAL_OBJ(zval_ptr, call_create) \
230 Z_TYPE_P(zval_ptr) = IS_OBJECT; \
231 Z_OBJVAL_P(zval_ptr) = call_create;
233 #define UNBOX(class_name, val) \
234 (class_name*)zend_object_store_get_object(val TSRMLS_CC);
236 #define UNBOX_HASHTABLE_VALUE(class_name, val) UNBOX(class_name, val)
238 #define HASHTABLE_VALUE_DTOR ZVAL_PTR_DTOR
240 #define PHP_PROTO_HASHTABLE_VALUE zval*
241 #define HASHTABLE_VALUE_CE(val) Z_OBJCE_P(val)
243 #define CREATE_HASHTABLE_VALUE(OBJ, WRAPPED_OBJ, OBJ_TYPE, OBJ_CLASS_ENTRY) \
245 PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \
246 MAKE_STD_ZVAL(WRAPPED_OBJ); \
247 ZVAL_OBJ(WRAPPED_OBJ, \
248 OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY TSRMLS_CC)); \
249 OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \
250 Z_DELREF_P(desc_php);
252 #define PHP_PROTO_CE_DECLARE zend_class_entry**
253 #define PHP_PROTO_CE_UNREF(ce) (*ce)
255 #define php_proto_zend_lookup_class(name, name_length, ce) \
256 zend_lookup_class(name, name_length, ce TSRMLS_CC)
258 #define PHP_PROTO_RETVAL_ZVAL(value) ZVAL_ZVAL(return_value, value, 1, 0)
260 #else // PHP_MAJOR_VERSION >= 7
262 #define php_proto_zend_literal void**
263 #define PHP_PROTO_CASE_IS_BOOL IS_TRUE: case IS_FALSE
264 #define PHP_PROTO_SIZE size_t
265 #define PHP_PROTO_LONG zend_long
266 #define PHP_PROTO_TSRMLS_DC
267 #define PHP_PROTO_TSRMLS_CC
271 #define PHP_PROTO_ZVAL_STRING(zval_ptr, s, copy) \
272 ZVAL_STRING(zval_ptr, s)
273 #define PHP_PROTO_ZVAL_STRINGL(zval_ptr, s, len, copy) \
274 ZVAL_STRINGL(zval_ptr, s, len)
275 #define PHP_PROTO_RETURN_STRING(s, copy) RETURN_STRING(s)
276 #define PHP_PROTO_RETURN_STRINGL(s, len, copy) RETURN_STRINGL(s, len)
277 #define PHP_PROTO_RETVAL_STRINGL(s, len, copy) RETVAL_STRINGL(s, len)
278 #define php_proto_zend_make_printable_zval(from, to) \
279 zend_make_printable_zval(from, to)
283 #define PHP_PROTO_HASH_OF(array) Z_ARRVAL_P(&array)
288 result = zend_hash_index_update(ht,
h, pData);
289 return result !=
NULL ? SUCCESS : FAILURE;
297 result = zend_hash_str_update(ht,
key, key_len, &temp);
298 return result !=
NULL ? SUCCESS : FAILURE;
302 void* pData,
uint nDataSize,
305 result = zend_hash_index_update_mem(ht,
h, pData, nDataSize);
306 if (pDest !=
NULL) *pDest = result;
307 return result !=
NULL ? SUCCESS : FAILURE;
314 zend_string* internal_key = zend_string_init(
key, key_len, 0);
315 result = zend_hash_update(ht, internal_key, pData);
316 return result !=
NULL ? SUCCESS : FAILURE;
320 uint key_len,
void* pData,
321 uint nDataSize,
void** pDest) {
322 zend_string* internal_key = zend_string_init(
key, key_len, 0);
323 void* result = zend_hash_update_mem(ht, internal_key, pData, nDataSize);
324 zend_string_release(internal_key);
325 if (pDest !=
NULL) *pDest = result;
326 return result !=
NULL ? SUCCESS : FAILURE;
330 ulong
h,
void** pDest) {
331 zval* result = zend_hash_index_find(ht,
h);
332 if (pDest !=
NULL) *pDest = result;
333 return result !=
NULL ? SUCCESS : FAILURE;
337 size_t key_len,
void** pDest) {
339 result = zend_hash_str_find(ht,
key, key_len);
340 return result !=
NULL ? SUCCESS : FAILURE;
344 ulong
h,
void** pDest) {
346 result = zend_hash_index_find_ptr(ht,
h);
347 if (pDest !=
NULL) *pDest = result;
348 return result !=
NULL ? SUCCESS : FAILURE;
354 zend_string* internal_key = zend_string_init(
key, key_len, 1);
355 zval* result = zend_hash_find(ht, internal_key);
356 if (pDest !=
NULL) *pDest = result;
357 return result !=
NULL ? SUCCESS : FAILURE;
363 zend_string* internal_key = zend_string_init(
key, key_len, 1);
364 void* result = zend_hash_find_ptr(ht, internal_key);
365 zend_string_release(internal_key);
366 if (pDest !=
NULL) *pDest = result;
367 return result !=
NULL ? SUCCESS : FAILURE;
373 ZVAL_OBJ(&tmp, *(zend_object**)pData);
374 zval* result = zend_hash_next_index_insert(ht, &tmp);
375 return result !=
NULL ? SUCCESS : FAILURE;
383 result = zend_hash_next_index_insert_mem(ht, pData, nDataSize);
384 if (pDest !=
NULL) *pDest = result;
385 return result !=
NULL ? SUCCESS : FAILURE;
392 result = zend_hash_get_current_data_ex(ht, pos);
393 if (pDest !=
NULL) *pDest = result;
394 return result !=
NULL ? SUCCESS : FAILURE;
399 #define PHP_PROTO_WRAP_OBJECT_START(name) struct name {
400 #define PHP_PROTO_WRAP_OBJECT_END \
404 #define PHP_PROTO_INIT_SUBMSGCLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \
405 void LOWWERNAME##_init(TSRMLS_D) { \
406 zend_class_entry class_type; \
407 const char* class_name = CLASSNAME; \
408 INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \
409 LOWWERNAME##_methods); \
410 LOWWERNAME##_type = zend_register_internal_class_ex( \
411 &class_type, message_type TSRMLS_CC); \
412 zend_do_inheritance(LOWWERNAME##_type, message_type TSRMLS_CC);
413 #define PHP_PROTO_INIT_SUBMSGCLASS_END \
416 #define PHP_PROTO_INIT_ENUMCLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \
417 void LOWWERNAME##_init(TSRMLS_D) { \
418 zend_class_entry class_type; \
419 const char* class_name = CLASSNAME; \
420 INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \
421 LOWWERNAME##_methods); \
422 LOWWERNAME##_type = zend_register_internal_class(&class_type TSRMLS_CC);
423 #define PHP_PROTO_INIT_ENUMCLASS_END \
426 #define PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \
427 void LOWWERNAME##_init(TSRMLS_D) { \
428 zend_class_entry class_type; \
429 const char* class_name = CLASSNAME; \
430 INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \
431 LOWWERNAME##_methods); \
432 LOWWERNAME##_type = zend_register_internal_class(&class_type TSRMLS_CC); \
433 LOWWERNAME##_type->create_object = LOWWERNAME##_create; \
434 LOWWERNAME##_handlers = PEMALLOC(zend_object_handlers); \
435 memcpy(LOWWERNAME##_handlers, zend_get_std_object_handlers(), \
436 sizeof(zend_object_handlers)); \
437 LOWWERNAME##_handlers->free_obj = LOWWERNAME##_free; \
438 LOWWERNAME##_handlers->dtor_obj = LOWWERNAME##_dtor; \
439 LOWWERNAME##_handlers->offset = XtOffsetOf(CAMELNAME, std);
440 #define PHP_PROTO_INIT_CLASS_END \
443 #define PHP_PROTO_OBJECT_FREE_START(classname, lowername) \
444 void lowername##_free(zend_object* object) { \
445 classname* intern = \
446 (classname*)((char*)object - XtOffsetOf(classname, std));
447 #define PHP_PROTO_OBJECT_FREE_END \
450 #define PHP_PROTO_OBJECT_DTOR_START(classname, lowername) \
451 void lowername##_dtor(zend_object* object) { \
452 classname* intern = \
453 (classname*)((char*)object - XtOffsetOf(classname, std));
454 #define PHP_PROTO_OBJECT_DTOR_END \
455 zend_object_std_dtor(object TSRMLS_CC); \
458 #define PHP_PROTO_OBJECT_CREATE_START(NAME, LOWWERNAME) \
459 static zend_object* LOWWERNAME##_create(zend_class_entry* ce TSRMLS_DC) { \
460 PHP_PROTO_ALLOC_CLASS_OBJECT(NAME, ce); \
461 zend_object_std_init(&intern->std, ce TSRMLS_CC); \
462 object_properties_init(&intern->std, ce);
463 #define PHP_PROTO_OBJECT_CREATE_END(NAME, LOWWERNAME) \
464 PHP_PROTO_FREE_CLASS_OBJECT(NAME, LOWWERNAME##_free, LOWWERNAME##_handlers); \
467 #define CACHED_VALUE zval
468 #define CACHED_TO_ZVAL_PTR(VALUE) (&VALUE)
469 #define CACHED_PTR_TO_ZVAL_PTR(VALUE) (VALUE)
470 #define ZVAL_PTR_TO_CACHED_PTR(VALUE) (VALUE)
471 #define ZVAL_PTR_TO_CACHED_VALUE(VALUE) (*VALUE)
472 #define ZVAL_TO_CACHED_VALUE(VALUE) (VALUE)
474 #define CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(zval_ptr, class_type) \
475 ZVAL_OBJ(zval_ptr, class_type->create_object(class_type));
477 #define PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(value) ;
479 #define PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL &EG(uninitialized_zval)
481 #define php_proto_zval_ptr_dtor(zval_ptr) \
482 zval_ptr_dtor(zval_ptr)
484 #define PHP_PROTO_ALLOC_CLASS_OBJECT(class_object, class_type) \
485 class_object* intern; \
486 int size = sizeof(class_object) + zend_object_properties_size(class_type); \
487 intern = ecalloc(1, size); \
488 memset(intern, 0, size);
490 #define PHP_PROTO_FREE_CLASS_OBJECT(class_object, class_object_free, handler) \
491 intern->std.handlers = handler; \
494 #define PHP_PROTO_ALLOC_ARRAY(zval_ptr) \
495 ZVAL_NEW_ARR(zval_ptr)
497 #define UNBOX(class_name, val) \
498 (class_name*)((char*)Z_OBJ_P(val) - XtOffsetOf(class_name, std));
500 #define UNBOX_HASHTABLE_VALUE(class_name, val) \
501 (class_name*)((char*)val - XtOffsetOf(class_name, std))
503 #define HASHTABLE_VALUE_DTOR php_proto_hashtable_descriptor_release
505 #define PHP_PROTO_HASHTABLE_VALUE zend_object*
506 #define HASHTABLE_VALUE_CE(val) val->ce
508 #define CREATE_HASHTABLE_VALUE(OBJ, WRAPPED_OBJ, OBJ_TYPE, OBJ_CLASS_ENTRY) \
510 PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \
511 WRAPPED_OBJ = OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY); \
512 OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \
513 GC_DELREF(WRAPPED_OBJ);
515 #define PHP_PROTO_CE_DECLARE zend_class_entry*
516 #define PHP_PROTO_CE_UNREF(ce) (ce)
519 const char*
name,
int name_length, zend_class_entry** ce TSRMLS_DC) {
520 zend_string *zstr_name = zend_string_init(
name, name_length, 0);
521 *ce = zend_lookup_class(zstr_name);
522 zend_string_release(zstr_name);
523 return *ce !=
NULL ? SUCCESS : FAILURE;
526 #define PHP_PROTO_RETVAL_ZVAL(value) ZVAL_COPY(return_value, value)
528 #endif // PHP_MAJOR_VERSION >= 7
530 #if PHP_MAJOR_VERSION < 7 || (PHP_MAJOR_VERSION == 7 && PHP_MINOR_VERSION == 0)
531 #define PHP_PROTO_FAKE_SCOPE_BEGIN(klass) \
532 zend_class_entry* old_scope = EG(scope); \
534 #define PHP_PROTO_FAKE_SCOPE_RESTART(klass) \
535 old_scope = EG(scope); \
537 #define PHP_PROTO_FAKE_SCOPE_END EG(scope) = old_scope;
539 #define PHP_PROTO_FAKE_SCOPE_BEGIN(klass) \
540 zend_class_entry* old_scope = EG(fake_scope); \
541 EG(fake_scope) = klass;
542 #define PHP_PROTO_FAKE_SCOPE_RESTART(klass) \
543 old_scope = EG(fake_scope); \
544 EG(fake_scope) = klass;
545 #define PHP_PROTO_FAKE_SCOPE_END EG(fake_scope) = old_scope;
549 #define DEFINE_PROTOBUF_INIT_CLASS(CLASSNAME, CAMELNAME, LOWERNAME) \
550 PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWERNAME) \
551 PHP_PROTO_INIT_CLASS_END
553 #define DEFINE_PROTOBUF_CREATE(NAME, LOWERNAME) \
554 PHP_PROTO_OBJECT_CREATE_START(NAME, LOWERNAME) \
555 LOWERNAME##_init_c_instance(intern TSRMLS_CC); \
556 PHP_PROTO_OBJECT_CREATE_END(NAME, LOWERNAME)
558 #define DEFINE_PROTOBUF_FREE(CAMELNAME, LOWERNAME) \
559 PHP_PROTO_OBJECT_FREE_START(CAMELNAME, LOWERNAME) \
560 LOWERNAME##_free_c(intern TSRMLS_CC); \
561 PHP_PROTO_OBJECT_FREE_END
563 #define DEFINE_PROTOBUF_DTOR(CAMELNAME, LOWERNAME) \
564 PHP_PROTO_OBJECT_DTOR_START(CAMELNAME, LOWERNAME) \
565 PHP_PROTO_OBJECT_DTOR_END
567 #define DEFINE_CLASS(NAME, LOWERNAME, string_name) \
568 zend_class_entry *LOWERNAME##_type; \
569 zend_object_handlers *LOWERNAME##_handlers; \
570 DEFINE_PROTOBUF_FREE(NAME, LOWERNAME) \
571 DEFINE_PROTOBUF_DTOR(NAME, LOWERNAME) \
572 DEFINE_PROTOBUF_CREATE(NAME, LOWERNAME) \
573 DEFINE_PROTOBUF_INIT_CLASS(string_name, NAME, LOWERNAME)
673 ZEND_BEGIN_MODULE_GLOBALS(protobuf)
674 ZEND_END_MODULE_GLOBALS(protobuf)
779 bool use_nested_submsg TSRMLS_DC);
784 #if PHP_MAJOR_VERSION < 7
831 zend_class_entry*
klass;
918 #define MESSAGE_FIELD_NO_CASE ((size_t)-1)
969 #define ENCODE_MAX_NESTING 63
999 zval*
val, zval* return_value);
1021 #define NATIVE_SLOT_MAX_SIZE sizeof(uint64_t)
1025 void* memory, zval*
value TSRMLS_DC);
1029 const zend_class_entry*
klass,
void* memory,
1030 zval*
value TSRMLS_DC);
1032 void* memory, zval*
value TSRMLS_DC);
1093 #define MAP_KEY_FIELD 1
1094 #define MAP_VALUE_FIELD 2
1126 #if PHP_MAJOR_VERSION < 7
1132 const zend_class_entry*
msg_ce;
1188 #define ONEOF_CASE_NONE 0
1210 PHP_METHOD(GPBMetadata_SourceContext, initOnce);
1477 #define ALLOC(class_name) (class_name*) emalloc(sizeof(class_name))
1478 #define PEMALLOC(class_name) (class_name*) pemalloc(sizeof(class_name), 1)
1479 #define ALLOC_N(class_name, n) (class_name*) emalloc(sizeof(class_name) * n)
1480 #define FREE(object) efree(object)
1481 #define PEFREE(object) pefree(object, 1)
1484 #define STR(str) (str), strlen(str)
1487 #if PHP_MAJOR_VERSION < 7
1488 #define Z_OBJ_P(zval_p) \
1489 ((zend_object*)(EG(objects_store) \
1490 .object_buckets[Z_OBJ_HANDLE_P(zval_p)] \
1491 .bucket.obj.object))
1497 #if PHP_MAJOR_VERSION < 7
1510 #endif // __GOOGLE_PROTOBUF_PHP_PROTOBUF_H__
#define php_proto_zend_hash_find_zval(ht, key, key_len, pDest)
void layout_init(MessageLayout *layout, void *storage, zend_object *object PHP_PROTO_TSRMLS_DC)
bool protobuf_convert_to_float(zval *from, float *to)
def unpack(archive, location, log=EmptyLogger())
const char * layout_get_oneof_case(MessageLayout *layout, const void *storage, const upb_oneofdef *oneof TSRMLS_DC)
bool native_slot_set(upb_fieldtype_t type, const zend_class_entry *klass, void *memory, zval *value TSRMLS_DC)
void stringsink_uninit_opaque(void *sink)
const upb_msgdef * msgdef
void option_init(TSRMLS_D)
zend_class_entry * uint32_value_type
zval * internal_generated_pool_php
GLuint const GLchar * name
zend_class_entry * string_value_type
#define PHP_PROTO_TSRMLS_DC
void field_cardinality_init(TSRMLS_D)
void syntax_init(TSRMLS_D)
zend_class_entry * oneof_descriptor_type
#define PHP_PROTO_TSRMLS_CC
void gpb_metadata_source_context_init(TSRMLS_D)
void bool_value_init(TSRMLS_D)
zend_class_entry * struct_type
zval * layout_get(MessageLayout *layout, const void *storage, const upb_fielddef *field, CACHED_VALUE *cache TSRMLS_DC)
const upb_fielddef * fielddef
void add_handlers_for_message(const void *closure, upb_handlers *h)
bool is_inited_file_struct
void u_int32_value_init(TSRMLS_D)
GLenum GLuint GLenum GLsizei length
zend_class_entry * bytes_value_type
void descriptor_pool_free(void *object TSRMLS_DC)
bool class_added(const void *ce)
void native_slot_init(upb_fieldtype_t type, void *memory, CACHED_VALUE *cache)
void gpb_type_init(TSRMLS_D)
zend_class_entry * syntax_type
zend_class_entry * source_context_type
void map_field_create_with_field(const zend_class_entry *ce, const upb_fielddef *field, CACHED_VALUE *map_field PHP_PROTO_TSRMLS_DC)
void * message_data(MessageHeader *msg)
void check_map_field(const zend_class_entry *klass, PHP_PROTO_LONG key_type, PHP_PROTO_LONG value_type, zval *val, zval *return_value)
void u_int64_value_init(TSRMLS_D)
void layout_set(MessageLayout *layout, MessageHeader *header, const upb_fielddef *field, zval *val TSRMLS_DC)
bool native_slot_set_by_map(upb_fieldtype_t type, const zend_class_entry *klass, void *memory, zval *value TSRMLS_DC)
void native_slot_get_by_map_key(upb_fieldtype_t type, const void *memory, int length, CACHED_VALUE *cache TSRMLS_DC)
bool is_map_field(const upb_fielddef *field)
bool protobuf_convert_to_uint64(zval *from, uint64_t *to)
const upb_fielddef * map_entry_key(const upb_msgdef *msgdef)
upb_handlercache * json_serialize_handler_preserve_cache
zend_class_entry * field_kind_type
void init_generated_pool_once(TSRMLS_D)
#define PHP_PROTO_HASHTABLE_VALUE
#define php_proto_zend_hash_update_zval(ht, key, key_len, value)
void repeated_field_create_with_type(zend_class_entry *ce, upb_fieldtype_t type, const zend_class_entry *msg_ce, CACHED_VALUE *repeated_field PHP_PROTO_TSRMLS_DC)
void * slot_memory(MessageLayout *layout, const void *storage, const upb_fielddef *field)
bool map_index_set(Map *intern, const char *keyval, int length, upb_value v)
zend_class_entry * type_type
zend_class_entry * enum_type
void gpb_metadata_struct_init(TSRMLS_D)
upb_pbcodecache * fill_method_cache
void oneof_descriptor_init(TSRMLS_D)
void custom_data_init(const zend_class_entry *ce, MessageHeader *msg PHP_PROTO_TSRMLS_DC)
#define php_proto_zend_hash_next_index_insert_zval(ht, pData)
void enum_value_init(TSRMLS_D)
zval * generated_pool_php
bool protobuf_convert_to_int64(zval *from, int64_t *to)
void field_descriptor_init(TSRMLS_D)
zend_class_entry * empty_type
void int64_value_init(TSRMLS_D)
const upb_fielddef * map_field_value(const upb_fielddef *field)
#define php_proto_zend_hash_index_find_mem(ht, h, pDest)
void null_value_init(TSRMLS_D)
void mixin_init(TSRMLS_D)
zend_class_entry * int64_value_type
size_t native_slot_size(upb_fieldtype_t type)
#define php_proto_zend_hash_index_update_mem(ht, h, pData, nDataSize, pDest)
PHP_PROTO_WRAP_OBJECT_END PHP_METHOD(DescriptorPool, getGeneratedPool)
void internal_descriptor_pool_free(void *object TSRMLS_DC)
bool is_inited_file_source_context
zend_class_entry * null_value_type
#define php_proto_zend_hash_index_update_zval(ht, h, pData)
uint32_t * slot_oneof_case(MessageLayout *layout, const void *storage, const upb_fielddef *field)
void descriptor_init(TSRMLS_D)
struct InternalDescriptorPool InternalDescriptorPool
upb_json_codecache * json_fill_method_cache
bool is_reserved_name(const char *name)
void struct_init(TSRMLS_D)
zend_class_entry * field_type
zend_class_entry * mixin_type
PHP_PROTO_HASHTABLE_VALUE get_proto_obj(const char *proto)
void map_field_init(TSRMLS_D)
void gpb_metadata_api_init(TSRMLS_D)
void timestamp_init(TSRMLS_D)
PHP_PROTO_WRAP_OBJECT_END void map_begin(zval *self, MapIter *iter TSRMLS_DC)
PHP_PROTO_HASHTABLE_VALUE get_def_obj(const void *def)
void free_layout(MessageLayout *layout)
#define PHP_PROTO_WRAP_OBJECT_START(name)
void descriptor_name_set(Descriptor *desc, const char *name)
bool map_done(MapIter *iter)
void float_value_init(TSRMLS_D)
zend_class_entry * uint64_value_type
zend_object_handlers * map_field_iter_handlers
const zend_class_entry * field_type_class(const upb_fielddef *field PHP_PROTO_TSRMLS_DC)
const zend_class_entry * msg_ce
void message_init(TSRMLS_D)
void add_proto_obj(const char *proto, PHP_PROTO_HASHTABLE_VALUE value)
const upb_fielddef * map_entry_value(const upb_msgdef *msgdef)
upb_handlercache * json_serialize_handler_cache
zend_class_entry * duration_type
struct EnumValueDescriptor EnumValueDescriptor
void enum_descriptor_init(TSRMLS_D)
upb_fieldtype_t to_fieldtype(upb_descriptortype_t type)
void stringsink_init(stringsink *sink)
void stringsink_uninit(stringsink *sink)
void map_field_create_with_type(const zend_class_entry *ce, upb_fieldtype_t key_type, upb_fieldtype_t value_type, const zend_class_entry *msg_ce, CACHED_VALUE *map_field PHP_PROTO_TSRMLS_DC)
zend_class_entry * float_value_type
zend_class_entry * field_descriptor_type
bool protobuf_convert_to_uint32(zval *from, uint32_t *to)
zend_class_entry * api_type
PHP_PROTO_HASHTABLE_VALUE get_ce_obj(const void *ce)
zend_class_entry * field_cardinality_type
const upb_oneofdef * oneofdef
zend_object_handlers * repeated_field_iter_handlers
void source_context_init(TSRMLS_D)
void field_mask_init(TSRMLS_D)
bool is_valid_constant_name(const char *name)
void descriptor_pool_init(TSRMLS_D)
void native_slot_get(upb_fieldtype_t type, const void *memory, CACHED_VALUE *cache TSRMLS_DC)
zend_class_entry * timestamp_type
void layout_merge(MessageLayout *layout, MessageHeader *from, MessageHeader *to TSRMLS_DC)
void serialize_to_string(zval *val, zval *return_value TSRMLS_DC)
zend_class_entry * option_type
const FieldDescriptor * field
const SETUP_TEARDOWN_TESTCONTEXT char * key
#define php_proto_zend_hash_find(ht, key, key_len, pDest)
bool is_inited_file_duration
void map_next(MapIter *iter)
zend_class_entry * int32_value_type
upb_handlercache * fill_handler_cache
InternalDescriptorPool * pool
void check_repeated_field(const zend_class_entry *klass, PHP_PROTO_LONG type, zval *val, zval *return_value)
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
zend_class_entry * enum_descriptor_type
void field_kind_init(TSRMLS_D)
zend_class_entry * double_value_type
upb_handlercache * pb_serialize_handler_cache
const upb_fielddef * map_field_key(const upb_fielddef *field)
void build_class_from_descriptor(PHP_PROTO_HASHTABLE_VALUE php_descriptor TSRMLS_DC)
void method_init(TSRMLS_D)
void field_init(TSRMLS_D)
zend_object_handlers * map_field_handlers
void gpb_metadata_field_mask_init(TSRMLS_D)
#define ZVAL_OBJ(zval_ptr, call_create)
bool protobuf_convert_to_int32(zval *from, int32_t *to)
#define php_proto_zend_hash_update(ht, key, key_len)
void internal_descriptor_pool_init(TSRMLS_D)
zend_class_entry * enum_value_type
void native_slot_get_default(upb_fieldtype_t type, CACHED_VALUE *cache TSRMLS_DC)
size_t stringsink_string(void *_sink, const void *hd, const char *ptr, size_t len, const upb_bufhandle *handle)
PHP_PROTO_WRAP_OBJECT_END Map * self
PHP_PROTO_WRAP_OBJECT_END MessageLayout * create_layout(const upb_msgdef *msgdef)
const upb_msgdef * msgdef
zend_class_entry * list_value_type
void duration_init(TSRMLS_D)
zend_class_entry * any_type
void gpb_metadata_duration_init(TSRMLS_D)
#define PHP_PROTO_WRAP_OBJECT_END
void gpb_metadata_wrappers_init(TSRMLS_D)
InternalDescriptorPool * generated_pool
zend_class_entry * bool_value_type
#define NATIVE_SLOT_MAX_SIZE
void gpb_metadata_empty_init(TSRMLS_D)
bool native_slot_set_by_array(upb_fieldtype_t type, const zend_class_entry *klass, void *memory, zval *value TSRMLS_DC)
bool is_inited_file_timestamp
zend_object_handlers * repeated_field_handlers
void add_ce_obj(const void *ce, PHP_PROTO_HASHTABLE_VALUE value)
void enum_value_descriptor_init(TSRMLS_D)
static zval * php_proto_message_read_property(zval *msg, zval *member PHP_PROTO_TSRMLS_DC)
zend_class_entry * repeated_field_type
void repeated_field_iter_init(TSRMLS_D)
void empty_init(TSRMLS_D)
const char * map_iter_key(MapIter *iter, int *len)
void * upb_value_memory(upb_value *v)
void add_def_obj(const void *def, PHP_PROTO_HASHTABLE_VALUE value)
zend_class_entry * field_mask_type
InternalDescriptorPool * intern
#define php_proto_zend_lookup_class(name, name_length, ce)
zend_class_entry * method_type
void internal_add_generated_file(const char *data, PHP_PROTO_SIZE data_len, InternalDescriptorPool *pool, bool use_nested_submsg TSRMLS_DC)
zend_object_handlers * message_handlers
bool is_inited_file_field_mask
bool protobuf_convert_to_double(zval *from, double *to)
zend_class_entry * message_type
struct RepeatedFieldIter RepeatedFieldIter
void list_value_init(TSRMLS_D)
upb_fieldtype_t value_type
zend_class_entry * map_field_type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
bool is_inited_file_wrappers
void native_slot_get_by_array(upb_fieldtype_t type, const void *memory, CACHED_VALUE *cache TSRMLS_DC)
void string_value_init(TSRMLS_D)
void map_field_iter_init(TSRMLS_D)
void int32_value_init(TSRMLS_D)
void merge_from_string(const char *data, int data_len, Descriptor *desc, MessageHeader *msg)
static size_t next(const upb_table *t, size_t i)
void repeated_field_push_native(RepeatedField *intern, void *value)
GLsizei const GLfloat * value
#define php_proto_zend_hash_get_current_data_ex(ht, pDest, pos)
#define php_proto_zend_hash_index_find_zval(ht, h, pDest)
const upb_pbdecodermethod * new_fillmsg_decodermethod(Descriptor *desc, const void *owner)
void gpb_metadata_timestamp_init(TSRMLS_D)
upb_value map_iter_value(MapIter *iter, int *len)
const upb_enumdef * enumdef
bool is_inited_file_empty
void value_init(TSRMLS_D)
bool protobuf_convert_to_string(zval *from)
void double_value_init(TSRMLS_D)
void gpb_metadata_any_init(TSRMLS_D)
void gpb_metadata_type_init(TSRMLS_D)
void native_slot_get_by_map_value(upb_fieldtype_t type, const void *memory, CACHED_VALUE *cache TSRMLS_DC)
void * repeated_field_index_native(RepeatedField *intern, int index TSRMLS_DC)
PHP_PROTO_WRAP_OBJECT_END RepeatedField * repeated_field
zend_class_entry * enum_value_descriptor_type
void bytes_value_init(TSRMLS_D)
void repeated_field_init(TSRMLS_D)
GLfloat GLfloat GLfloat GLfloat h
zend_class_entry * descriptor_type
#define php_proto_zend_hash_update_mem(ht, key, key_len, pData, nDataSize, pDest)
bool protobuf_convert_to_bool(zval *from, int8_t *to)
#define php_proto_zend_hash_find_mem(ht, key, key_len, pDest)
PHP_PROTO_WRAP_OBJECT_END void repeated_field_create_with_field(zend_class_entry *ce, const upb_fielddef *field, CACHED_VALUE *repeated_field PHP_PROTO_TSRMLS_DC)
#define php_proto_zend_hash_next_index_insert_mem(ht, pData, nDataSize, pDest)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:58