diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /main/php_ticks.c | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'main/php_ticks.c')
-rw-r--r-- | main/php_ticks.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/main/php_ticks.c b/main/php_ticks.c new file mode 100644 index 0000000..17ffb9c --- /dev/null +++ b/main/php_ticks.c @@ -0,0 +1,86 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Stig Bakken <ssb@php.net> | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include "php.h" +#include "php_ticks.h" + +int php_startup_ticks(TSRMLS_D) +{ + zend_llist_init(&PG(tick_functions), sizeof(void(*)(int)), NULL, 1); + return SUCCESS; +} + +void php_deactivate_ticks(TSRMLS_D) +{ + zend_llist_clean(&PG(tick_functions)); +} + +void php_shutdown_ticks(TSRMLS_D) +{ + zend_llist_destroy(&PG(tick_functions)); +} + +static int php_compare_tick_functions(void *elem1, void *elem2) +{ + void(*func1)(int); + void(*func2)(int); + memcpy(&func1, elem1, sizeof(void(*)(int))); + memcpy(&func2, elem2, sizeof(void(*)(int))); + return (func1 == func2); +} + +PHPAPI void php_add_tick_function(void (*func)(int)) +{ + TSRMLS_FETCH(); + + zend_llist_add_element(&PG(tick_functions), (void *)&func); +} + +PHPAPI void php_remove_tick_function(void (*func)(int)) +{ + TSRMLS_FETCH(); + + zend_llist_del_element(&PG(tick_functions), (void *)func, + (int(*)(void*, void*))php_compare_tick_functions); +} + +static void php_tick_iterator(void *data, void *arg TSRMLS_DC) +{ + void (*func)(int); + + memcpy(&func, data, sizeof(void(*)(int))); + func(*((int *)arg)); +} + +void php_run_ticks(int count) +{ + TSRMLS_FETCH(); + + zend_llist_apply_with_argument(&PG(tick_functions), (llist_apply_with_arg_func_t) php_tick_iterator, &count TSRMLS_CC); +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ |