diff options
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; |