forked from lstrojny/php-nanotime
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nanotime.c
80 lines (64 loc) · 1.74 KB
/
nanotime.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "php_nanotime.h"
#include "nanotime/nanotime.h"
#if HAVE_NANOTIME
ZEND_BEGIN_ARG_INFO(arginfo_nanotime_time, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_nanotime_second, 0)
ZEND_END_ARG_INFO()
static const zend_function_entry nanotime_functions[] = {
ZEND_NS_FENTRY("nano", second, ZEND_FN(nanotime_second), arginfo_nanotime_second, 0)
ZEND_NS_FENTRY("nano", time, ZEND_FN(nanotime_time), arginfo_nanotime_time, 0)
{ NULL, NULL, NULL }
};
zend_module_entry nanotime_module_entry = {
STANDARD_MODULE_HEADER,
"nanotime",
nanotime_functions,
NULL,
NULL,
NULL,
NULL,
PHP_MINFO(nanotime),
PHP_NANOTIME_VERSION,
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_NANOTIME
ZEND_GET_MODULE(nanotime)
#endif
PHP_MINFO_FUNCTION(nanotime)
{
php_info_print_box_start(0);
php_printf("%s", PHP_NANOTIME_DESCRIPTION);
php_info_print_box_end();
php_info_print_table_start();
php_info_print_table_header(2, PHP_NANOTIME_NAME, "enabled");
php_info_print_table_row(2, "Author", PHP_NANOTIME_AUTHOR);
php_info_print_table_row(2, "Version", PHP_NANOTIME_VERSION);
php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__);
php_info_print_table_end();
}
PHP_FUNCTION(nanotime_second)
{
unsigned long ts;
if (zend_parse_parameters_none()) {
RETURN_NULL();
}
if (NANO_UNEXPECTED(nano_second(&ts))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not retrieve current system nanosecond");
RETURN_NULL();
}
RETURN_LONG(ts);
}
PHP_FUNCTION(nanotime_time)
{
long double ts;
if (zend_parse_parameters_none()) {
RETURN_NULL();
}
if (NANO_UNEXPECTED(nano_time(&ts))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not retrieve current system nanosecond");
RETURN_NULL();
}
RETURN_DOUBLE(ts);
}
#endif /* HAVE_NANOTIME */