-ZEND_BEGIN_ARG_INFO_EX(ai_pqevent_construct, 0, 0, 3)
- ZEND_ARG_OBJ_INFO(0, connection, pq\\Connection, 0)
- ZEND_ARG_INFO(0, type)
- ZEND_ARG_INFO(0, callable)
-ZEND_END_ARG_INFO();
-static PHP_METHOD(pqevent, __construct) {
- zend_error_handling zeh;
- zval *zconn;
- char *type_str;
- int type_len;
- php_pq_callback_t cb;
- STATUS rv;
-
- zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Osf", &zconn, php_pqconn_class_entry, &type_str, &type_len, &cb.fci, &cb.fcc);
- zend_restore_error_handling(&zeh TSRMLS_CC);
-
- if (SUCCESS == rv) {
- php_pqconn_object_t *conn_obj = zend_object_store_get_object(zconn TSRMLS_CC);
-
- if (!conn_obj->intern) {
- throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized");
- } else {
- php_pqevent_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- obj->intern = ecalloc(1, sizeof(*obj->intern));
- php_pq_callback_addref(&cb);
- obj->intern->cb = cb;
- obj->intern->type = estrdup(type_str);
- obj->intern->h = php_pqconn_add_eventhandler(conn_obj, type_str, type_len, getThis() TSRMLS_CC);
- }
- }
-}
-
-ZEND_BEGIN_ARG_INFO_EX(ai_pqevent_trigger, 0, 0, 1)
- ZEND_ARG_ARRAY_INFO(0, args, 1)
-ZEND_END_ARG_INFO();
-static PHP_METHOD(pqevent, trigger) {
- zend_error_handling zeh;
- zval *args;
- STATUS rv;
-
- zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/", &args);
- zend_restore_error_handling(&zeh TSRMLS_CC);
-
- if (SUCCESS == rv) {
- php_pqevent_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (!obj->intern) {
- throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Event not initialized");
- } else {
- zval *rv = NULL;
-
- if (SUCCESS != zend_fcall_info_call(&obj->intern->cb.fci, &obj->intern->cb.fcc, &rv, args TSRMLS_CC)) {
- throw_exce(EX_RUNTIME TSRMLS_CC, "Failed to trigger event");
- } else {
- if (rv) {
- RETVAL_ZVAL(rv, 0, 1);
- } else {
- RETVAL_TRUE;
- }
- }
- }
- }
-}
-
-static zend_function_entry php_pqevent_methods[] = {
- PHP_ME(pqevent, __construct, ai_pqevent_construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
- PHP_ME(pqevent, trigger, ai_pqevent_trigger, ZEND_ACC_PUBLIC)
- {0}
-};
-