1 : /*
2 : +----------------------------------------------------------------------+
3 : | PHP Version 6 |
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 276986 2009-03-10 23:40:06Z helly $ */
20 :
21 : #include "php.h"
22 : #include "php_ticks.h"
23 :
24 : int php_startup_ticks(TSRMLS_D)
25 17007 : {
26 17007 : zend_llist_init(&PG(tick_functions), sizeof(void(*)(int)), NULL, 1);
27 17007 : return SUCCESS;
28 : }
29 :
30 : void php_deactivate_ticks(TSRMLS_D)
31 17025 : {
32 17025 : zend_llist_clean(&PG(tick_functions));
33 17025 : }
34 :
35 : void php_shutdown_ticks(TSRMLS_D)
36 17039 : {
37 17039 : zend_llist_destroy(&PG(tick_functions));
38 17039 : }
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 17009 : {
51 : TSRMLS_FETCH();
52 :
53 17009 : zend_llist_add_element(&PG(tick_functions), (void *)&func);
54 17009 : }
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 57 : {
66 : void (*func)(int);
67 :
68 57 : memcpy(&func, data, sizeof(void(*)(int)));
69 57 : func(*((int *)arg));
70 57 : }
71 :
72 : void php_run_ticks(int count)
73 38 : {
74 : TSRMLS_FETCH();
75 :
76 38 : zend_llist_apply_with_argument(&PG(tick_functions), (llist_apply_with_arg_func_t) php_tick_iterator, &count TSRMLS_CC);
77 38 : }
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 : */
|