1 : /*
2 : +----------------------------------------------------------------------+
3 : | PHP Version 5 |
4 : +----------------------------------------------------------------------+
5 : | Copyright (c) 1997-2009 The PHP Group |
6 : +----------------------------------------------------------------------+
7 : | This source file is subject to version 3.01 of the PHP license, |
8 : | that is bundled with this package in the file LICENSE, and is |
9 : | available through the world-wide-web at the following url: |
10 : | http://www.php.net/license/3_01.txt |
11 : | If you did not receive a copy of the PHP license and are unable to |
12 : | obtain it through the world-wide-web, please send a note to |
13 : | license@php.net so we can mail you a copy immediately. |
14 : +----------------------------------------------------------------------+
15 : | Author: Stig Bakken <ssb@php.net> |
16 : +----------------------------------------------------------------------+
17 : */
18 :
19 : /* $Id: php_ticks.c 272374 2008-12-31 11:17:49Z sebastian $ */
20 :
21 : #include "php.h"
22 : #include "php_ticks.h"
23 :
24 : int php_startup_ticks(TSRMLS_D)
25 13565 : {
26 13565 : zend_llist_init(&PG(tick_functions), sizeof(void(*)(int)), NULL, 1);
27 13565 : return SUCCESS;
28 : }
29 :
30 : void php_deactivate_ticks(TSRMLS_D)
31 13584 : {
32 13584 : zend_llist_clean(&PG(tick_functions));
33 13584 : }
34 :
35 : void php_shutdown_ticks(TSRMLS_D)
36 13598 : {
37 13598 : zend_llist_destroy(&PG(tick_functions));
38 13598 : }
39 :
40 : static int php_compare_tick_functions(void *elem1, void *elem2)
41 0 : {
42 : void(*func1)(int);
43 : void(*func2)(int);
44 0 : memcpy(&func1, elem1, sizeof(void(*)(int)));
45 0 : memcpy(&func2, elem2, sizeof(void(*)(int)));
46 0 : return (func1 == func2);
47 : }
48 :
49 : PHPAPI void php_add_tick_function(void (*func)(int))
50 13566 : {
51 : TSRMLS_FETCH();
52 :
53 13566 : zend_llist_add_element(&PG(tick_functions), (void *)&func);
54 13566 : }
55 :
56 : PHPAPI void php_remove_tick_function(void (*func)(int))
57 0 : {
58 : TSRMLS_FETCH();
59 :
60 0 : zend_llist_del_element(&PG(tick_functions), (void *)func,
61 : (int(*)(void*, void*))php_compare_tick_functions);
62 0 : }
63 :
64 : static void php_tick_iterator(void *data, void *arg TSRMLS_DC)
65 8 : {
66 : void (*func)(int);
67 :
68 8 : memcpy(&func, data, sizeof(void(*)(int)));
69 8 : func(*((int *)arg));
70 8 : }
71 :
72 : void php_run_ticks(int count)
73 5 : {
74 : TSRMLS_FETCH();
75 :
76 5 : zend_llist_apply_with_argument(&PG(tick_functions), (llist_apply_with_arg_func_t) php_tick_iterator, &count TSRMLS_CC);
77 5 : }
78 :
79 : /*
80 : * Local variables:
81 : * tab-width: 4
82 : * c-basic-offset: 4
83 : * End:
84 : * vim600: sw=4 ts=4 fdm=marker
85 : * vim<600: sw=4 ts=4
86 : */
|