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