aboutsummaryrefslogtreecommitdiff
path: root/php/ext/google/protobuf/message.c
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2017-02-11 16:36:17 -0800
committerGitHub <noreply@github.com>2017-02-11 16:36:17 -0800
commit74eb9a0a304a3261f3c83e100f51081986ac8ba6 (patch)
treed7171743decd0b21fdf60fc76d5fd0509ebceeda /php/ext/google/protobuf/message.c
parentef927cc428db7bf41d3a593a16a8f1a0fe6306c5 (diff)
downloadprotobuf-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.c19
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;