andrei          Fri Apr 21 18:25:16 2006 UTC

  Modified files:              
    /php-src/ext/unicode        collator.c php_unicode.h unicode.c 
  Log:
  Implement collator_get_default() and simplify/fix the underlying code.
  
  # Derick, objects aren't that difficult.. :)
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/collator.c?r1=1.4&r2=1.5&diff_format=u
Index: php-src/ext/unicode/collator.c
diff -u php-src/ext/unicode/collator.c:1.4 php-src/ext/unicode/collator.c:1.5
--- php-src/ext/unicode/collator.c:1.4  Thu Apr 20 21:56:43 2006
+++ php-src/ext/unicode/collator.c      Fri Apr 21 18:25:16 2006
@@ -14,7 +14,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: collator.c,v 1.4 2006/04/20 21:56:43 andrei Exp $ */
+/* $Id: collator.c,v 1.5 2006/04/21 18:25:16 andrei Exp $ */
 
 #include "php.h"
 #include "ext/standard/php_array.h"
@@ -35,7 +35,7 @@
        {NULL, NULL, NULL}
 };
 
-zend_class_entry *unicode_ce_collator;
+zend_class_entry *unicode_collator_ce;
 
 static zend_object_handlers unicode_object_handlers_collator;
 
@@ -64,7 +64,7 @@
        }       \
        obj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
 
-static zend_object_value collator_object_new(zend_class_entry *class_type 
TSRMLS_DC);
+static zend_object_value collator_object_create(zend_class_entry *class_type 
TSRMLS_DC);
 static void collator_object_free_storage(void *object TSRMLS_DC);
 
 static void collator_register_class(TSRMLS_D)
@@ -72,15 +72,15 @@
        zend_class_entry ce_collator;
 
        INIT_CLASS_ENTRY(ce_collator, "Collator", collator_funcs_collator);
-       ce_collator.create_object = collator_object_new;
-       unicode_ce_collator = zend_register_internal_class_ex(&ce_collator, 
NULL, NULL TSRMLS_CC);
+       ce_collator.create_object = collator_object_create;
+       unicode_collator_ce = zend_register_internal_class_ex(&ce_collator, 
NULL, NULL TSRMLS_CC);
        memcpy(&unicode_object_handlers_collator, 
zend_get_std_object_handlers(), sizeof(zend_object_handlers));
        unicode_object_handlers_collator.clone_obj = NULL;
 
 #define REGISTER_COLLATOR_CLASS_CONST_STRING(const_name, value) \
-       zend_declare_class_constant_stringl(unicode_ce_collator, const_name, 
sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC);
+       zend_declare_class_constant_stringl(unicode_collator_ce, const_name, 
sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC);
 #define REGISTER_COLLATOR_CLASS_CONST_LONG(const_name, value) \
-       zend_declare_class_constant_long(unicode_ce_collator, const_name, 
sizeof(const_name)-1, value TSRMLS_CC);
+       zend_declare_class_constant_long(unicode_collator_ce, const_name, 
sizeof(const_name)-1, value TSRMLS_CC);
 
        /* Attributes */
        REGISTER_COLLATOR_CLASS_CONST_LONG("FRENCH_COLLATION", 
UCOL_FRENCH_COLLATION);
@@ -116,7 +116,7 @@
 }
 
 
-static zend_object_value collator_object_new(zend_class_entry *class_type 
TSRMLS_DC)
+static zend_object_value collator_object_create(zend_class_entry *ce TSRMLS_DC)
 {
        php_collator_obj *intern;
        zend_object_value retval;
@@ -124,11 +124,9 @@
 
        intern = emalloc(sizeof(php_collator_obj));
        memset(intern, 0, sizeof(php_collator_obj));
-       intern->std.ce = class_type;
-       
-       ALLOC_HASHTABLE(intern->std.properties);
-       zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-       zend_hash_copy(intern->std.properties, &class_type->default_properties, 
(copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+
+       zend_object_std_init(&intern->std, ce TSRMLS_CC);
+       zend_hash_copy(intern->std.properties, &ce->default_properties, 
(copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
        
        retval.handle = zend_objects_store_put(intern, 
(zend_objects_store_dtor_t)zend_objects_destroy_object, 
(zend_objects_free_object_storage_t) collator_object_free_storage, NULL 
TSRMLS_CC);
        retval.handlers = &unicode_object_handlers_collator;
@@ -144,29 +142,22 @@
                zend_collator_destroy(intern->zcoll);
        }
 
-       if (intern->std.properties) {
-               zend_hash_destroy(intern->std.properties);
-               efree(intern->std.properties);
-               intern->std.properties = NULL;
-       }
+       zend_object_std_dtor(&intern->std TSRMLS_CC);
        
        efree(object);
 }
 
-static zval* collator_instantiate(zend_class_entry *pce, zval *object 
TSRMLS_DC)
+static zval* collator_set_wrapper(zval *object, zend_collator *zcoll TSRMLS_DC)
 {
-       /* FIXME
-        * not sure what what this is for but moved here so it doesn't break 
stuff
-        * below
-        */
-       if (!object) {
-               ALLOC_ZVAL(object);
-               object->refcount = 1;
-               object->is_ref = 1;
+       php_collator_obj *coll_obj;
+
+       if (Z_TYPE_P(object) != IS_OBJECT) {
+               object_init_ex(object, unicode_collator_ce);
        }
 
-       Z_TYPE_P(object) = IS_OBJECT;
-       object_init_ex(object, pce);
+       coll_obj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
+       coll_obj->zcoll = zcoll;
+
        return object;
 }
 
@@ -177,7 +168,6 @@
 
 PHP_FUNCTION(collator_create)
 {
-       php_collator_obj *collatorobj;
        UErrorCode        status = U_ZERO_ERROR;
        char             *collator_name;
        int               collator_name_len;
@@ -191,15 +181,13 @@
        if ((object = getThis()) == NULL) {
                object = return_value;
        }
-       collator_instantiate(unicode_ce_collator, object TSRMLS_CC);
-       collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
        ucoll = ucol_open(collator_name, &status);
        if (U_FAILURE(status)) {
                /* UTODO handle error case properly */
                zend_error(E_ERROR, "Could not open collator for locale %s", 
UG(default_locale));
                return;
        }
-       collatorobj->zcoll = zend_collator_create(ucoll);
+       collator_set_wrapper(object, zend_collator_create(ucoll) TSRMLS_CC);
 }
 
 PHP_FUNCTION(collator_compare)
@@ -209,7 +197,7 @@
        UChar            *string1, *string2;
        int               string1_len, string2_len;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Ouu", &object, unicode_ce_collator, &string1, &string1_len, &string2, 
&string2_len) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Ouu", &object, unicode_collator_ce, &string1, &string1_len, &string2, 
&string2_len) == FAILURE) {
                RETURN_FALSE;
        }
        collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
@@ -224,7 +212,7 @@
        HashTable        *target_hash;
        zend_collator    *orig_collator;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Oa/", &object, unicode_ce_collator, &array) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Oa/", &object, unicode_collator_ce, &array) == FAILURE) {
                RETURN_FALSE;
        }
        collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
@@ -247,7 +235,7 @@
        php_collator_obj *collatorobj;
        long              strength;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Ol", &object, unicode_ce_collator, &strength) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Ol", &object, unicode_collator_ce, &strength) == FAILURE) {
                RETURN_FALSE;
        }
        collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
@@ -259,7 +247,7 @@
        zval             *object;
        php_collator_obj *collatorobj;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &object, unicode_ce_collator) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &object, unicode_collator_ce) == FAILURE) {
                RETURN_FALSE;
        }
        collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
@@ -273,7 +261,7 @@
        long              attribute, value;
        UErrorCode        error;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Oll", &object, unicode_ce_collator, &attribute, &value) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Oll", &object, unicode_collator_ce, &attribute, &value) == FAILURE) {
                RETURN_FALSE;
        }
        collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
@@ -289,7 +277,7 @@
        long              attribute, value;
        UErrorCode        error;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Ol", &object, unicode_ce_collator, &attribute) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Ol", &object, unicode_collator_ce, &attribute) == FAILURE) {
                RETURN_FALSE;
        }
        collatorobj = (php_collator_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
@@ -301,12 +289,14 @@
        RETURN_LONG(value);
 }
 
-PHP_FUNCTION(i18n_coll_get_default)
+PHP_FUNCTION(collator_get_default)
 {
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
                return;
        }
 
+       UG(default_collator)->refcount++;
+       collator_set_wrapper(return_value, UG(default_collator) TSRMLS_CC);
 }
 
 /*
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/php_unicode.h?r1=1.8&r2=1.9&diff_format=u
Index: php-src/ext/unicode/php_unicode.h
diff -u php-src/ext/unicode/php_unicode.h:1.8 
php-src/ext/unicode/php_unicode.h:1.9
--- php-src/ext/unicode/php_unicode.h:1.8       Thu Apr 20 21:56:43 2006
+++ php-src/ext/unicode/php_unicode.h   Fri Apr 21 18:25:16 2006
@@ -14,7 +14,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_unicode.h,v 1.8 2006/04/20 21:56:43 andrei Exp $ */ 
+/* $Id: php_unicode.h,v 1.9 2006/04/21 18:25:16 andrei Exp $ */ 
 
 #ifndef PHP_UNICODE_H
 #define PHP_UNICODE_H
@@ -57,7 +57,7 @@
 
 PHP_FUNCTION(i18n_loc_get_default);
 PHP_FUNCTION(i18n_loc_set_default);
-PHP_FUNCTION(i18n_coll_get_default);
+PHP_FUNCTION(collator_get_default);
 PHP_FUNCTION(collator_create);
 PHP_FUNCTION(collator_compare);
 PHP_FUNCTION(collator_sort);
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/unicode.c?r1=1.20&r2=1.21&diff_format=u
Index: php-src/ext/unicode/unicode.c
diff -u php-src/ext/unicode/unicode.c:1.20 php-src/ext/unicode/unicode.c:1.21
--- php-src/ext/unicode/unicode.c:1.20  Thu Apr 20 21:56:43 2006
+++ php-src/ext/unicode/unicode.c       Fri Apr 21 18:25:16 2006
@@ -15,7 +15,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: unicode.c,v 1.20 2006/04/20 21:56:43 andrei Exp $ */ 
+/* $Id: unicode.c,v 1.21 2006/04/21 18:25:16 andrei Exp $ */ 
 
 #include "php_unicode.h"
 #include "zend_unicode.h"
@@ -235,7 +235,7 @@
 zend_function_entry unicode_functions[] = {
        PHP_FE(i18n_loc_get_default, NULL)
        PHP_FE(i18n_loc_set_default, NULL)
-       PHP_FE(i18n_coll_get_default, NULL)
+       PHP_FE(collator_get_default, NULL)
        PHP_FE(unicode_decode, NULL)
        PHP_FE(unicode_semantics, NULL)
        PHP_FE(unicode_encode, NULL)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to