jan Thu Oct 3 04:56:10 2002 EDT Modified files: /php4/ext/wddx php_wddx.h php_wddx_api.h wddx.c Log: - Added wddx_serialize_type(). Allows users to cast values to WDDX types @- Added wddx_serialize_type(). Allows users to cast values to WDDX types (jan) Index: php4/ext/wddx/php_wddx.h diff -u php4/ext/wddx/php_wddx.h:1.11 php4/ext/wddx/php_wddx.h:1.12 --- php4/ext/wddx/php_wddx.h:1.11 Mon May 13 13:28:37 2002 +++ php4/ext/wddx/php_wddx.h Thu Oct 3 04:56:09 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_wddx.h,v 1.11 2002/05/13 17:28:37 andrei Exp $ */ +/* $Id: php_wddx.h,v 1.12 2002/10/03 08:56:09 jan Exp $ */ #ifndef PHP_WDDX_H #define PHP_WDDX_H @@ -30,6 +30,7 @@ PHP_FUNCTION(wddx_serialize_value); PHP_FUNCTION(wddx_serialize_vars); +PHP_FUNCTION(wddx_serialize_type); PHP_FUNCTION(wddx_packet_start); PHP_FUNCTION(wddx_packet_end); PHP_FUNCTION(wddx_add_vars); Index: php4/ext/wddx/php_wddx_api.h diff -u php4/ext/wddx/php_wddx_api.h:1.17 php4/ext/wddx/php_wddx_api.h:1.18 --- php4/ext/wddx/php_wddx_api.h:1.17 Thu Sep 26 14:13:32 2002 +++ php4/ext/wddx/php_wddx_api.h Thu Oct 3 04:56:10 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_wddx_api.h,v 1.17 2002/09/26 18:13:32 sebastian Exp $ */ +/* $Id: php_wddx_api.h,v 1.18 2002/10/03 08:56:10 jan Exp $ */ #ifndef PHP_WDDX_API_H #define PHP_WDDX_API_H @@ -27,6 +27,7 @@ #define WDDX_ARRAY_E "</array>" #define WDDX_BINARY_S "<binary>" #define WDDX_BINARY_E "</binary>" +#define WDDX_BINARY "<binary>%s</binary>" #define WDDX_BOOLEAN "<boolean value='%s'/>" #define WDDX_CHAR "<char code='%02X'/>" #define WDDX_COMMENT_S "<comment>" @@ -46,6 +47,17 @@ #define WDDX_STRUCT_E "</struct>" #define WDDX_VAR_S "<var name='%s'>" #define WDDX_VAR_E "</var>" + +#define WDDX_NUMBER_T 0 +#define WDDX_BOOLEAN_T 1 +#define WDDX_NULL_T 2 +#define WDDX_STRING_T 3 +#define WDDX_DATETIME_T 4 +#define WDDX_ARRAY_T 5 +#define WDDX_STRUCT_T 6 +#define WDDX_RECORDSET_T 7 +#define WDDX_BINARY_T 8 + #define php_wddx_add_chunk(packet, str) smart_str_appends(packet, str) #define php_wddx_add_chunk_ex(packet, str, len) smart_str_appendl(packet, str, len) Index: php4/ext/wddx/wddx.c diff -u php4/ext/wddx/wddx.c:1.94 php4/ext/wddx/wddx.c:1.95 --- php4/ext/wddx/wddx.c:1.94 Thu Sep 26 14:13:32 2002 +++ php4/ext/wddx/wddx.c Thu Oct 3 04:56:10 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: wddx.c,v 1.94 2002/09/26 18:13:32 sebastian Exp $ */ +/* $Id: wddx.c,v 1.95 2002/10/03 08:56:10 jan Exp $ */ #include "php.h" #include "php_wddx.h" @@ -96,6 +96,7 @@ */ function_entry wddx_functions[] = { PHP_FE(wddx_serialize_value, NULL) + PHP_FE(wddx_serialize_type, NULL) PHP_FE(wddx_serialize_vars, NULL) PHP_FE(wddx_packet_start, NULL) PHP_FE(wddx_packet_end, NULL) @@ -304,6 +305,15 @@ PHP_MINIT_FUNCTION(wddx) { le_wddx = zend_register_list_destructors_ex(release_wddx_packet_rsrc, NULL, "wddx", module_number); + REGISTER_LONG_CONSTANT("WDDX_BOOLEAN", WDDX_BOOLEAN_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_NUMBER", WDDX_NUMBER_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_NULL", WDDX_NULL_T, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_DATETIME", WDDX_DATETIME_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_ARRAY", WDDX_ARRAY_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_RECORDSET", WDDX_RECORDSET_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_STRUCT", WDDX_STRUCT_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_STRING", WDDX_STRING_T, CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("WDDX_BINARY", WDDX_BINARY_T, CONST_CS | +CONST_PERSISTENT); #if HAVE_PHP_SESSION php_session_register_serializer("wddx", @@ -432,6 +442,24 @@ } /* }}} */ +/* {{{ php_wddx_serialize_binary + */ +static void php_wddx_serialize_binary(wddx_packet *packet, zval *var) +{ + char tmp_buf[WDDX_BUF_LEN]; + zval tmp; + + tmp = *var; + zval_copy_ctor(&tmp); + convert_to_string(&tmp); + + sprintf(tmp_buf, WDDX_BINARY, Z_STRVAL(tmp)); + zval_dtor(&tmp); + + php_wddx_add_chunk(packet, tmp_buf); +} +/* }}} */ + /* {{{ php_wddx_serialize_boolean */ static void php_wddx_serialize_boolean(wddx_packet *packet, zval *var) @@ -1115,6 +1143,64 @@ php_wddx_packet_start(packet, comment, comment_len); php_wddx_serialize_var(packet, var, NULL, 0 TSRMLS_CC); + php_wddx_packet_end(packet); + + ZVAL_STRINGL(return_value, packet->c, packet->len, 1); + smart_str_free(packet); + efree(packet); +} +/* }}} */ + +/* {{{ proto string wddx_serialize_type(mixed var, int type, [, string comment]) + Creates a new packet, serializes the given value and casts the type*/ +PHP_FUNCTION(wddx_serialize_type) +{ + zval *var; + char *comment = NULL; + int comment_len = 0, type = 0; + wddx_packet *packet; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl|s", + &var, &type, &comment, +&comment_len) == FAILURE) + return; + + packet = php_wddx_constructor(); + if (!packet) { + RETURN_FALSE; + } + + php_wddx_packet_start(packet, comment, comment_len); + + switch(type) { + case WDDX_NULL_T: + php_wddx_serialize_unset(packet); + break; + case WDDX_BOOLEAN_T: + convert_to_boolean(var); + php_wddx_serialize_boolean(packet, var); + break; + case WDDX_NUMBER_T: + convert_to_long(var); + php_wddx_serialize_number(packet, var); + break; + case WDDX_DATETIME_T: /* break omitted intentionally! */ + case WDDX_STRING_T: + convert_to_string(var); + php_wddx_serialize_string(packet, var); + break; + case WDDX_ARRAY_T: + case WDDX_STRUCT_T: /* breaks omitted intentionally! */ + case WDDX_RECORDSET_T: + convert_to_array(var); + php_wddx_serialize_array(packet, var); + break; + case WDDX_BINARY_T: + php_wddx_serialize_binary(packet, var); + break; + default: + break; + } + php_wddx_packet_end(packet); ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php