|
@@ -904,6 +904,39 @@ PHP_METHOD(Message, whichOneof) {
|
|
|
RETURN_STRING(field ? upb_fielddef_name(field) : "");
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Message::hasOneof()
|
|
|
+ *
|
|
|
+ * Returns the presence of the given oneof field, given a field number. Called
|
|
|
+ * from generated code methods such as:
|
|
|
+ *
|
|
|
+ * public function hasDoubleValueOneof()
|
|
|
+ * {
|
|
|
+ * return $this->hasOneof(10);
|
|
|
+ * }
|
|
|
+ *
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+PHP_METHOD(Message, hasOneof) {
|
|
|
+ Message* intern = (Message*)Z_OBJ_P(getThis());
|
|
|
+ zend_long field_num;
|
|
|
+ const upb_fielddef* f;
|
|
|
+
|
|
|
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &field_num) == FAILURE) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ f = upb_msgdef_itof(intern->desc->msgdef, field_num);
|
|
|
+
|
|
|
+ if (!f || !upb_fielddef_realcontainingoneof(f)) {
|
|
|
+ php_error_docref(NULL, E_USER_ERROR,
|
|
|
+ "Internal error, no such oneof field %d\n",
|
|
|
+ (int)field_num);
|
|
|
+ }
|
|
|
+
|
|
|
+ RETVAL_BOOL(upb_msg_has(intern->msg, f));
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Message::readOneof()
|
|
|
*
|
|
@@ -1014,6 +1047,7 @@ static zend_function_entry Message_methods[] = {
|
|
|
PHP_ME(Message, mergeFrom, arginfo_mergeFrom, ZEND_ACC_PUBLIC)
|
|
|
PHP_ME(Message, readWrapperValue, arginfo_read, ZEND_ACC_PROTECTED)
|
|
|
PHP_ME(Message, writeWrapperValue, arginfo_write, ZEND_ACC_PROTECTED)
|
|
|
+ PHP_ME(Message, hasOneof, arginfo_read, ZEND_ACC_PROTECTED)
|
|
|
PHP_ME(Message, readOneof, arginfo_read, ZEND_ACC_PROTECTED)
|
|
|
PHP_ME(Message, writeOneof, arginfo_write, ZEND_ACC_PROTECTED)
|
|
|
PHP_ME(Message, whichOneof, arginfo_read, ZEND_ACC_PROTECTED)
|