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

Reply via email to