andrei Thu Apr 20 21:56:43 2006 UTC
Modified files:
/ZendEngine2 zend.c zend_globals.h zend_operators.c zend_unicode.c
zend_unicode.h
/php-src/ext/unicode collator.c php_unicode.h unicode.c
Log:
Move to refcounted implementation of collators.
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend.c?r1=1.351&r2=1.352&diff_format=u
Index: ZendEngine2/zend.c
diff -u ZendEngine2/zend.c:1.351 ZendEngine2/zend.c:1.352
--- ZendEngine2/zend.c:1.351 Wed Apr 19 10:29:46 2006
+++ ZendEngine2/zend.c Thu Apr 20 21:56:43 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend.c,v 1.351 2006/04/19 10:29:46 dmitry Exp $ */
+/* $Id: zend.c,v 1.352 2006/04/20 21:56:43 andrei Exp $ */
#include "zend.h"
#include "zend_extensions.h"
@@ -1227,15 +1227,17 @@
ZEND_API void zend_reset_locale_deps(TSRMLS_D)
{
+ UCollator *coll;
UErrorCode status = U_ZERO_ERROR;
if (UG(default_collator)) {
- ucol_close(UG(default_collator));
+ zend_collator_destroy(UG(default_collator));
}
- UG(default_collator) = ucol_open(UG(default_locale), &status);
+ coll = ucol_open(UG(default_locale), &status);
if (U_FAILURE(status)) {
zend_error(E_ERROR, "Could not open collator for locale %s",
UG(default_locale));
}
+ UG(default_collator) = zend_collator_create(coll);
}
static void init_unicode_request_globals(TSRMLS_D)
@@ -1248,7 +1250,7 @@
static void shutdown_unicode_request_globals(TSRMLS_D)
{
- ucol_close(UG(default_collator));
+ zend_collator_destroy(UG(default_collator));
efree(UG(default_locale));
}
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_globals.h?r1=1.155&r2=1.156&diff_format=u
Index: ZendEngine2/zend_globals.h
diff -u ZendEngine2/zend_globals.h:1.155 ZendEngine2/zend_globals.h:1.156
--- ZendEngine2/zend_globals.h:1.155 Fri Mar 31 22:51:37 2006
+++ ZendEngine2/zend_globals.h Thu Apr 20 21:56:43 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_globals.h,v 1.155 2006/03/31 22:51:37 pollita Exp $ */
+/* $Id: zend_globals.h,v 1.156 2006/04/20 21:56:43 andrei Exp $ */
#ifndef ZEND_GLOBALS_H
#define ZEND_GLOBALS_H
@@ -307,9 +307,9 @@
uint16_t to_error_mode;
char *default_locale;
- UCollator *default_collator;
+ zend_collator *default_collator;
- HashTable flex_compatible;
+ HashTable flex_compatible; /* table of
flex-compatible encodings */
};
#endif /* ZEND_GLOBALS_H */
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_operators.c?r1=1.240&r2=1.241&diff_format=u
Index: ZendEngine2/zend_operators.c
diff -u ZendEngine2/zend_operators.c:1.240 ZendEngine2/zend_operators.c:1.241
--- ZendEngine2/zend_operators.c:1.240 Tue Mar 28 06:30:47 2006
+++ ZendEngine2/zend_operators.c Thu Apr 20 21:56:43 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_operators.c,v 1.240 2006/03/28 06:30:47 andrei Exp $ */
+/* $Id: zend_operators.c,v 1.241 2006/04/20 21:56:43 andrei Exp $ */
#include <ctype.h>
@@ -1443,7 +1443,7 @@
op2 = &op2_copy;
}
- Z_LVAL_P(result) = ucol_strcoll(UG(default_collator), Z_USTRVAL_P(op1),
Z_USTRLEN_P(op1), Z_USTRVAL_P(op2), Z_USTRLEN_P(op2));
+ Z_LVAL_P(result) = ucol_strcoll(UG(default_collator)->coll,
Z_USTRVAL_P(op1), Z_USTRLEN_P(op1), Z_USTRVAL_P(op2), Z_USTRLEN_P(op2));
Z_TYPE_P(result) = IS_LONG;
if (use_copy1) {
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_unicode.c?r1=1.20&r2=1.21&diff_format=u
Index: ZendEngine2/zend_unicode.c
diff -u ZendEngine2/zend_unicode.c:1.20 ZendEngine2/zend_unicode.c:1.21
--- ZendEngine2/zend_unicode.c:1.20 Mon Mar 27 19:15:58 2006
+++ ZendEngine2/zend_unicode.c Thu Apr 20 21:56:43 2006
@@ -677,6 +677,27 @@
}
/* }}} */
+zend_collator* zend_collator_create(UCollator *coll)
+{
+ zend_collator *zcoll = NULL;
+
+ zcoll = emalloc(sizeof(zend_collator));
+ zcoll->coll = coll;
+ zcoll->refcount = 1;
+
+ return zcoll;
+}
+
+void zend_collator_destroy(zend_collator *zcoll)
+{
+ zcoll->refcount--;
+ if (zcoll->refcount == 0) {
+ ucol_close(zcoll->coll);
+ efree(zcoll);
+ }
+}
+
+
/*
* Local variables:
* tab-width: 4
http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_unicode.h?r1=1.14&r2=1.15&diff_format=u
Index: ZendEngine2/zend_unicode.h
diff -u ZendEngine2/zend_unicode.h:1.14 ZendEngine2/zend_unicode.h:1.15
--- ZendEngine2/zend_unicode.h:1.14 Mon Mar 27 06:02:28 2006
+++ ZendEngine2/zend_unicode.h Thu Apr 20 21:56:43 2006
@@ -48,6 +48,12 @@
} zend_conv_direction;
+typedef struct _zend_collator {
+ UCollator *coll;
+ int refcount;
+} zend_collator;
+
+
extern ZEND_API zend_class_entry *unicodeConversionException;
@@ -58,6 +64,8 @@
void zend_set_converter_subst_char(UConverter *conv, UChar *subst_char);
void zend_register_unicode_exceptions(TSRMLS_D);
void zend_update_converters_error_behavior(TSRMLS_D);
+zend_collator* zend_collator_create(UCollator *coll);
+void zend_collator_destroy(zend_collator *zcoll);
/* API functions */
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/collator.c?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/unicode/collator.c
diff -u php-src/ext/unicode/collator.c:1.3 php-src/ext/unicode/collator.c:1.4
--- php-src/ext/unicode/collator.c:1.3 Tue Mar 28 04:33:29 2006
+++ php-src/ext/unicode/collator.c Thu Apr 20 21:56:43 2006
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: collator.c,v 1.3 2006/03/28 04:33:29 andrei Exp $ */
+/* $Id: collator.c,v 1.4 2006/04/20 21:56:43 andrei Exp $ */
#include "php.h"
#include "ext/standard/php_array.h"
@@ -42,8 +42,8 @@
typedef struct _php_collator_obj php_collator_obj;
struct _php_collator_obj {
- zend_object std;
- UCollator *col;
+ zend_object std;
+ zend_collator *zcoll;
};
#define COLLATOR_SET_CONTEXT \
@@ -140,8 +140,8 @@
{
php_collator_obj *intern = (php_collator_obj *)object;
- if (intern->col) {
- ucol_close(intern->col);
+ if (intern->zcoll) {
+ zend_collator_destroy(intern->zcoll);
}
if (intern->std.properties) {
@@ -178,10 +178,11 @@
PHP_FUNCTION(collator_create)
{
php_collator_obj *collatorobj;
- UErrorCode error;
+ UErrorCode status = U_ZERO_ERROR;
char *collator_name;
int collator_name_len;
zval *object;
+ UCollator *ucoll;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
&collator_name, &collator_name_len) == FAILURE) {
RETURN_FALSE;
@@ -192,8 +193,13 @@
}
collator_instantiate(unicode_ce_collator, object TSRMLS_CC);
collatorobj = (php_collator_obj *) zend_object_store_get_object(object
TSRMLS_CC);
- error = U_ZERO_ERROR;
- collatorobj->col = ucol_open(collator_name, &error);
+ 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);
}
PHP_FUNCTION(collator_compare)
@@ -207,7 +213,7 @@
RETURN_FALSE;
}
collatorobj = (php_collator_obj *) zend_object_store_get_object(object
TSRMLS_CC);
- RETURN_LONG(ucol_strcoll(collatorobj->col, string1, string1_len,
string2, string2_len));
+ RETURN_LONG(ucol_strcoll(collatorobj->zcoll->coll, string1,
string1_len, string2, string2_len));
}
PHP_FUNCTION(collator_sort)
@@ -216,7 +222,7 @@
php_collator_obj *collatorobj;
zval *array;
HashTable *target_hash;
- UCollator *orig_collator;
+ zend_collator *orig_collator;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),
"Oa/", &object, unicode_ce_collator, &array) == FAILURE) {
RETURN_FALSE;
@@ -226,7 +232,7 @@
target_hash = HASH_OF(array);
php_set_compare_func(SORT_LOCALE_STRING TSRMLS_CC);
orig_collator = UG(default_collator);
- UG(default_collator) = collatorobj->col;
+ UG(default_collator) = collatorobj->zcoll;
if (zend_hash_sort(target_hash, zend_qsort, php_array_data_compare, 1
TSRMLS_CC) == FAILURE) {
RETVAL_FALSE;
} else {
@@ -245,7 +251,7 @@
RETURN_FALSE;
}
collatorobj = (php_collator_obj *) zend_object_store_get_object(object
TSRMLS_CC);
- ucol_setStrength(collatorobj->col, strength);
+ ucol_setStrength(collatorobj->zcoll->coll, strength);
}
PHP_FUNCTION(collator_get_strength)
@@ -257,7 +263,7 @@
RETURN_FALSE;
}
collatorobj = (php_collator_obj *) zend_object_store_get_object(object
TSRMLS_CC);
- RETURN_LONG(ucol_getStrength(collatorobj->col));
+ RETURN_LONG(ucol_getStrength(collatorobj->zcoll->coll));
}
PHP_FUNCTION(collator_set_attribute)
@@ -272,7 +278,7 @@
}
collatorobj = (php_collator_obj *) zend_object_store_get_object(object
TSRMLS_CC);
error = U_ZERO_ERROR;
- ucol_setAttribute(collatorobj->col, attribute, value, &error);
+ ucol_setAttribute(collatorobj->zcoll->coll, attribute, value, &error);
RETURN_BOOL(error == U_ZERO_ERROR ? 1 : 0);
}
@@ -288,9 +294,26 @@
}
collatorobj = (php_collator_obj *) zend_object_store_get_object(object
TSRMLS_CC);
error = U_ZERO_ERROR;
- value = ucol_getAttribute(collatorobj->col, attribute, &error);
+ value = ucol_getAttribute(collatorobj->zcoll->coll, attribute, &error);
if (error != U_ZERO_ERROR) {
RETURN_FALSE;
}
RETURN_LONG(value);
}
+
+PHP_FUNCTION(i18n_coll_get_default)
+{
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
+ return;
+ }
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/php_unicode.h?r1=1.7&r2=1.8&diff_format=u
Index: php-src/ext/unicode/php_unicode.h
diff -u php-src/ext/unicode/php_unicode.h:1.7
php-src/ext/unicode/php_unicode.h:1.8
--- php-src/ext/unicode/php_unicode.h:1.7 Wed Mar 29 01:20:43 2006
+++ php-src/ext/unicode/php_unicode.h Thu Apr 20 21:56:43 2006
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_unicode.h,v 1.7 2006/03/29 01:20:43 pollita Exp $ */
+/* $Id: php_unicode.h,v 1.8 2006/04/20 21:56:43 andrei Exp $ */
#ifndef PHP_UNICODE_H
#define PHP_UNICODE_H
@@ -57,6 +57,7 @@
PHP_FUNCTION(i18n_loc_get_default);
PHP_FUNCTION(i18n_loc_set_default);
+PHP_FUNCTION(i18n_coll_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.19&r2=1.20&diff_format=u
Index: php-src/ext/unicode/unicode.c
diff -u php-src/ext/unicode/unicode.c:1.19 php-src/ext/unicode/unicode.c:1.20
--- php-src/ext/unicode/unicode.c:1.19 Wed Mar 29 01:20:43 2006
+++ php-src/ext/unicode/unicode.c Thu Apr 20 21:56:43 2006
@@ -15,10 +15,9 @@
+----------------------------------------------------------------------+
*/
-/* $Id: unicode.c,v 1.19 2006/03/29 01:20:43 pollita Exp $ */
+/* $Id: unicode.c,v 1.20 2006/04/20 21:56:43 andrei Exp $ */
#include "php_unicode.h"
-#if HAVE_UNICODE
#include "zend_unicode.h"
void php_register_unicode_iterators(TSRMLS_D);
@@ -236,6 +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(unicode_decode, NULL)
PHP_FE(unicode_semantics, NULL)
PHP_FE(unicode_encode, NULL)
@@ -318,8 +318,6 @@
/* }}} */
-#endif /* HAVE_UNICODE */
-
/*
* Local variables:
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php