diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2017-02-11 16:36:17 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-11 16:36:17 -0800 |
commit | 74eb9a0a304a3261f3c83e100f51081986ac8ba6 (patch) | |
tree | d7171743decd0b21fdf60fc76d5fd0509ebceeda /php/ext/google/protobuf/message.c | |
parent | ef927cc428db7bf41d3a593a16a8f1a0fe6306c5 (diff) | |
download | protobuf-74eb9a0a304a3261f3c83e100f51081986ac8ba6.tar.gz protobuf-74eb9a0a304a3261f3c83e100f51081986ac8ba6.tar.bz2 protobuf-74eb9a0a304a3261f3c83e100f51081986ac8ba6.zip |
Add clear method to PHP message (#2700)
Diffstat (limited to 'php/ext/google/protobuf/message.c')
-rw-r--r-- | php/ext/google/protobuf/message.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/php/ext/google/protobuf/message.c b/php/ext/google/protobuf/message.c index e8b8ae81..46da9024 100644 --- a/php/ext/google/protobuf/message.c +++ b/php/ext/google/protobuf/message.c @@ -38,6 +38,7 @@ static zend_class_entry* message_type; zend_object_handlers* message_handlers; static zend_function_entry message_methods[] = { + PHP_ME(Message, clear, NULL, ZEND_ACC_PUBLIC) PHP_ME(Message, encode, NULL, ZEND_ACC_PUBLIC) PHP_ME(Message, decode, NULL, ZEND_ACC_PUBLIC) PHP_ME(Message, jsonEncode, NULL, ZEND_ACC_PUBLIC) @@ -241,6 +242,24 @@ PHP_METHOD(Message, __construct) { } } +PHP_METHOD(Message, clear) { + MessageHeader* msg = + (MessageHeader*)zend_object_store_get_object(getThis() TSRMLS_CC); + Descriptor* desc = msg->descriptor; + zend_class_entry* ce = desc->klass; + int i; + + for (i = 0; i < msg->std.ce->default_properties_count; i++) { + zval_ptr_dtor(&msg->std.properties_table[i]); + } + efree(msg->std.properties_table); + + zend_object_std_init(&msg->std, ce TSRMLS_CC); + object_properties_init(&msg->std, ce); + layout_init(desc->layout, message_data(msg), + msg->std.properties_table TSRMLS_CC); +} + PHP_METHOD(Message, readOneof) { long index; |