Annotation of embedaddon/php/ext/intl/dateformat/dateformat_class.c, revision 1.1.1.2

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
                      5:    | This source file is subject to version 3.01 of the PHP license,      |
                      6:    | that is bundled with this package in the file LICENSE, and is        |
                      7:    | available through the world-wide-web at the following url:           |
                      8:    | http://www.php.net/license/3_01.txt                                  |
                      9:    | If you did not receive a copy of the PHP license and are unable to   |
                     10:    | obtain it through the world-wide-web, please send a note to          |
                     11:    | license@php.net so we can mail you a copy immediately.               |
                     12:    +----------------------------------------------------------------------+
                     13:    | Authors: Kirti Velankar <kirtig@yahoo-inc.com>                       |
                     14:    +----------------------------------------------------------------------+
                     15: */
                     16: #include <unicode/unum.h>
                     17: 
                     18: #include "dateformat_class.h"
                     19: #include "php_intl.h"
                     20: #include "dateformat_data.h"
                     21: #include "dateformat_format.h"
                     22: #include "dateformat_parse.h"
                     23: #include "dateformat.h"
                     24: #include "dateformat_attr.h"
                     25: 
                     26: zend_class_entry *IntlDateFormatter_ce_ptr = NULL;
                     27: static zend_object_handlers IntlDateFormatter_handlers;
                     28: 
                     29: /*
                     30:  * Auxiliary functions needed by objects of 'IntlDateFormatter' class
                     31:  */
                     32: 
                     33: /* {{{ IntlDateFormatter_objects_dtor */
                     34: static void IntlDateFormatter_object_dtor(void *object, zend_object_handle handle TSRMLS_DC )
                     35: {
                     36:        zend_objects_destroy_object( object, handle TSRMLS_CC );
                     37: }
                     38: /* }}} */
                     39: 
                     40: /* {{{ IntlDateFormatter_objects_free */
                     41: void IntlDateFormatter_object_free( zend_object *object TSRMLS_DC )
                     42: {
                     43:        IntlDateFormatter_object* dfo = (IntlDateFormatter_object*)object;
                     44: 
                     45:        zend_object_std_dtor( &dfo->zo TSRMLS_CC );
                     46: 
                     47:        dateformat_data_free( &dfo->datef_data TSRMLS_CC );
                     48:        
                     49:        if( dfo->timezone_id ){
                     50:                efree(dfo->timezone_id);
                     51:        }
                     52: 
                     53:        efree( dfo );
                     54: }
                     55: /* }}} */
                     56: 
                     57: /* {{{ IntlDateFormatter_object_create */
                     58: zend_object_value IntlDateFormatter_object_create(zend_class_entry *ce TSRMLS_DC)
                     59: {
                     60:        zend_object_value    retval;
                     61:        IntlDateFormatter_object*     intern;
                     62: 
                     63:        intern = ecalloc( 1, sizeof(IntlDateFormatter_object) );
                     64:        dateformat_data_init( &intern->datef_data TSRMLS_CC );
                     65:        zend_object_std_init( &intern->zo, ce TSRMLS_CC );
                     66:        intern->date_type = 0;
                     67:        intern->time_type = 0;
                     68:        intern->calendar  = 1;          /* Gregorian calendar */
                     69:        intern->timezone_id =  NULL;
                     70: 
                     71:        retval.handle = zend_objects_store_put(
                     72:                intern,
                     73:                IntlDateFormatter_object_dtor,
                     74:                (zend_objects_free_object_storage_t)IntlDateFormatter_object_free,
                     75:                NULL TSRMLS_CC );
                     76: 
                     77:        retval.handlers = &IntlDateFormatter_handlers;
                     78: 
                     79:        return retval;
                     80: }
                     81: /* }}} */
                     82: 
                     83: /* {{{ IntlDateFormatter_object_clone */
                     84: zend_object_value IntlDateFormatter_object_clone(zval *object TSRMLS_DC)
                     85: {
                     86:        zend_object_value new_obj_val;
                     87:        zend_object_handle handle = Z_OBJ_HANDLE_P(object);
                     88:        IntlDateFormatter_object *dfo, *new_dfo;
                     89: 
                     90:        DATE_FORMAT_METHOD_FETCH_OBJECT;
                     91:        new_obj_val = IntlDateFormatter_ce_ptr->create_object(IntlDateFormatter_ce_ptr TSRMLS_CC);
                     92:        new_dfo = (IntlDateFormatter_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
                     93:        /* clone standard parts */      
                     94:        zend_objects_clone_members(&new_dfo->zo, new_obj_val, &dfo->zo, handle TSRMLS_CC);
                     95:        /* clone formatter object */
                     96:        DATE_FORMAT_OBJECT(new_dfo) = udat_clone(DATE_FORMAT_OBJECT(dfo),  &INTL_DATA_ERROR_CODE(new_dfo));
                     97:        if(U_FAILURE(INTL_DATA_ERROR_CODE(new_dfo))) {
                     98:                /* set up error in case error handler is interested */
                     99:                intl_error_set( NULL, INTL_DATA_ERROR_CODE(new_dfo), "Failed to clone IntlDateFormatter object", 0 TSRMLS_CC );
                    100:                IntlDateFormatter_object_dtor(new_dfo, new_obj_val.handle TSRMLS_CC); /* free new object */
                    101:                zend_error(E_ERROR, "Failed to clone IntlDateFormatter object");
                    102:        }
                    103:        return new_obj_val;
                    104: }
                    105: /* }}} */
                    106: 
                    107: /* 
                    108:  * 'IntlDateFormatter' class registration structures & functions
                    109:  */
                    110: 
                    111: /* {{{ arginfo */
                    112: ZEND_BEGIN_ARG_INFO_EX(datefmt_parse_args, 0, 0, 1)
                    113:                ZEND_ARG_INFO(0, string)
                    114:                ZEND_ARG_INFO(1, position)
                    115: ZEND_END_ARG_INFO()
                    116: 
                    117: ZEND_BEGIN_ARG_INFO_EX(arginfo_intldateformatter_format, 0, 0, 0)
                    118:        ZEND_ARG_INFO(0, args)
                    119:        ZEND_ARG_INFO(0, array)
                    120: ZEND_END_ARG_INFO()
                    121: 
                    122: ZEND_BEGIN_ARG_INFO(arginfo_intldateformatter_getdatetype, 0)
                    123: ZEND_END_ARG_INFO()
                    124: 
                    125: ZEND_BEGIN_ARG_INFO_EX(arginfo_intldateformatter_settimezoneid, 0, 0, 1)
                    126:        ZEND_ARG_INFO(0, zone)
                    127: ZEND_END_ARG_INFO()
                    128: 
                    129: ZEND_BEGIN_ARG_INFO_EX(arginfo_intldateformatter_setpattern, 0, 0, 1)
                    130:        ZEND_ARG_INFO(0, pattern)
                    131: ZEND_END_ARG_INFO()
                    132: 
                    133: ZEND_BEGIN_ARG_INFO_EX(arginfo_intldateformatter_setlenient, 0, 0, 1)
                    134:        ZEND_ARG_INFO(0, lenient)
                    135: ZEND_END_ARG_INFO()
                    136: 
                    137: ZEND_BEGIN_ARG_INFO_EX(arginfo_intldateformatter_setcalendar, 0, 0, 1)
                    138:        ZEND_ARG_INFO(0, which)
                    139: ZEND_END_ARG_INFO()
                    140: 
                    141: ZEND_BEGIN_ARG_INFO_EX(arginfo_intldateformatter___construct, 0, 0, 3)
                    142:        ZEND_ARG_INFO(0, locale)
                    143:        ZEND_ARG_INFO(0, datetype)
                    144:        ZEND_ARG_INFO(0, timetype)
                    145:        ZEND_ARG_INFO(0, timezone)
                    146:        ZEND_ARG_INFO(0, calendar)
                    147:        ZEND_ARG_INFO(0, pattern)
                    148: ZEND_END_ARG_INFO()
                    149: /* }}} */
                    150: 
                    151: /* {{{ IntlDateFormatter_class_functions
                    152:  * Every 'IntlDateFormatter' class method has an entry in this table
                    153:  */
1.1.1.2 ! misho     154: static zend_function_entry IntlDateFormatter_class_functions[] = {
1.1       misho     155:        PHP_ME( IntlDateFormatter, __construct, arginfo_intldateformatter___construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR )
                    156:        ZEND_FENTRY(  create, ZEND_FN( datefmt_create ), arginfo_intldateformatter___construct, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC )
                    157:        PHP_NAMED_FE( getDateType, ZEND_FN( datefmt_get_datetype ), arginfo_intldateformatter_getdatetype )
                    158:        PHP_NAMED_FE( getTimeType, ZEND_FN( datefmt_get_timetype ), arginfo_intldateformatter_getdatetype )
                    159:        PHP_NAMED_FE( getCalendar, ZEND_FN( datefmt_get_calendar ), arginfo_intldateformatter_getdatetype )
                    160:        PHP_NAMED_FE( setCalendar, ZEND_FN( datefmt_set_calendar ), arginfo_intldateformatter_setcalendar )
                    161:        PHP_NAMED_FE( getTimeZoneId, ZEND_FN( datefmt_get_timezone_id ), arginfo_intldateformatter_getdatetype )
                    162:        PHP_NAMED_FE( setTimeZoneId, ZEND_FN( datefmt_set_timezone_id ), arginfo_intldateformatter_settimezoneid )
                    163:        PHP_NAMED_FE( setPattern, ZEND_FN( datefmt_set_pattern ), arginfo_intldateformatter_setpattern )
                    164:        PHP_NAMED_FE( getPattern, ZEND_FN( datefmt_get_pattern ), arginfo_intldateformatter_getdatetype )
                    165:        PHP_NAMED_FE( getLocale, ZEND_FN( datefmt_get_locale ), arginfo_intldateformatter_getdatetype )
                    166:        PHP_NAMED_FE( setLenient, ZEND_FN( datefmt_set_lenient ), arginfo_intldateformatter_setlenient )
                    167:        PHP_NAMED_FE( isLenient, ZEND_FN( datefmt_is_lenient ), arginfo_intldateformatter_getdatetype )
                    168:        PHP_NAMED_FE( format, ZEND_FN( datefmt_format ), arginfo_intldateformatter_format )
                    169:        PHP_NAMED_FE( parse, ZEND_FN( datefmt_parse), datefmt_parse_args )
                    170:        PHP_NAMED_FE( localtime, ZEND_FN( datefmt_localtime ), datefmt_parse_args )
                    171:        PHP_NAMED_FE( getErrorCode, ZEND_FN( datefmt_get_error_code ), arginfo_intldateformatter_getdatetype )
                    172:        PHP_NAMED_FE( getErrorMessage, ZEND_FN( datefmt_get_error_message ), arginfo_intldateformatter_getdatetype )
                    173:        PHP_FE_END
                    174: };
                    175: /* }}} */
                    176: 
                    177: /* {{{ dateformat_register_class
                    178:  * Initialize 'IntlDateFormatter' class
                    179:  */
                    180: void dateformat_register_IntlDateFormatter_class( TSRMLS_D )
                    181: {
                    182:        zend_class_entry ce;
                    183: 
                    184:        /* Create and register 'IntlDateFormatter' class. */
                    185:        INIT_CLASS_ENTRY( ce, "IntlDateFormatter", IntlDateFormatter_class_functions );
                    186:        ce.create_object = IntlDateFormatter_object_create;
                    187:        IntlDateFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
                    188: 
                    189:        memcpy(&IntlDateFormatter_handlers, zend_get_std_object_handlers(),
                    190:                sizeof IntlDateFormatter_handlers);
                    191:        IntlDateFormatter_handlers.clone_obj = IntlDateFormatter_object_clone;
                    192: 
                    193:        /* Declare 'IntlDateFormatter' class properties. */
                    194:        if( !IntlDateFormatter_ce_ptr )
                    195:        {
                    196:                zend_error(E_ERROR, "Failed to register IntlDateFormatter class");
                    197:                return;
                    198:        }
                    199: }
                    200: /* }}} */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>