mirror of
https://github.com/php/php-src.git
synced 2026-10-28 17:56:50 +08:00
date: Add php_date_time_duration_create() in a new time_duration.h (#24072)
This commit is contained in:
1 parent
b527e1b34e
commit
1d397fcd57
5 files changed
+65
-34
No files matched your search
@@ -62,6 +62,10 @@ PHP 8.7 INTERNALS UPGRADE NOTES
|
||||
3. Module changes
|
||||
========================
|
||||
|
||||
- Date:
|
||||
. Added php_date_time_duration_create() to create Time\Duration objects
|
||||
without going through the userland API.
|
||||
|
||||
- MySQLi:
|
||||
. Removed the reverse API. The mysqlnd_reverse_api.h header, the
|
||||
MYSQLND_REVERSE_API struct and the functions zval_to_mysqlnd(),
|
||||
|
||||
+4
-25
@@ -17,32 +17,11 @@
|
||||
# define PHP_DATE_TIME_H
|
||||
|
||||
# include "php.h"
|
||||
# include "lib/timelib.h"
|
||||
|
||||
typedef struct php_date_time_duration {
|
||||
timelib_duration duration;
|
||||
zend_object std;
|
||||
} php_date_time_duration;
|
||||
|
||||
# define php_date_time_duration_from_obj(obj) ZEND_CONTAINER_OF(obj, php_date_time_duration, std)
|
||||
|
||||
# define Z_DATE_TIME_DURATION_P(zv) php_date_time_duration_from_obj(Z_OBJ_P((zv)))
|
||||
|
||||
# define Z_PARAM_DATE_TIME_DURATION(d) { \
|
||||
zend_object *__##d; \
|
||||
Z_PARAM_OBJ_OF_CLASS(__##d, php_date_ce_time_duration); \
|
||||
d = php_date_time_duration_from_obj(__##d); \
|
||||
}
|
||||
|
||||
# define Z_PARAM_DATE_TIME_DURATION_OR_NULL(d) { \
|
||||
zend_object *__##d; \
|
||||
Z_PARAM_OBJ_OF_CLASS_OR_NULL(__##d, php_date_ce_time_duration); \
|
||||
d = __##d ? php_date_time_duration_from_obj(__##d) : NULL; \
|
||||
}
|
||||
|
||||
PHPAPI extern zend_class_entry *php_date_ce_time_duration;
|
||||
PHPAPI extern zend_class_entry *php_date_ce_time_timeexception;
|
||||
|
||||
PHP_MINIT_FUNCTION(date_time);
|
||||
|
||||
PHPAPI extern zend_class_entry *php_date_ce_time_timeexception;
|
||||
|
||||
# include "time_duration.h"
|
||||
|
||||
#endif /* PHP_DATE_TIME_H */
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "php_date.h"
|
||||
#include "php_time.h"
|
||||
#include "time_duration.h"
|
||||
|
||||
#define NANOS_IN_SEC 1000000000
|
||||
#define NANOS_IN_MICRO 1000
|
||||
@@ -113,7 +114,7 @@ ZEND_ATTRIBUTE_NODISCARD static inline zend_result sync_properties(php_date_time
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_ATTRIBUTE_NODISCARD static zend_result create_duration(zval *target, zend_ulong seconds, zend_ulong nanoseconds)
|
||||
ZEND_ATTRIBUTE_NODISCARD PHPAPI zend_result php_date_time_duration_create(zval *target, zend_ulong seconds, zend_ulong nanoseconds)
|
||||
{
|
||||
ZEND_ASSERT(nanoseconds < NANOS_IN_SEC);
|
||||
|
||||
@@ -217,7 +218,7 @@ PHP_METHOD(Time_Duration, fromSeconds)
|
||||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
if (create_duration(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
@@ -233,7 +234,7 @@ PHP_METHOD(Time_Duration, fromNanoseconds)
|
||||
zend_ulong seconds = nanoseconds / NANOS_IN_SEC;
|
||||
nanoseconds %= NANOS_IN_SEC;
|
||||
|
||||
if (create_duration(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
@@ -249,7 +250,7 @@ PHP_METHOD(Time_Duration, fromMicroseconds)
|
||||
zend_ulong seconds = microseconds / MICROS_IN_SEC;
|
||||
zend_ulong nanoseconds = (microseconds % MICROS_IN_SEC) * NANOS_IN_MICRO;
|
||||
|
||||
if (create_duration(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
@@ -265,7 +266,7 @@ PHP_METHOD(Time_Duration, fromMilliseconds)
|
||||
zend_ulong seconds = milliseconds / MILLIS_IN_SEC;
|
||||
zend_ulong nanoseconds = (milliseconds % MILLIS_IN_SEC) * NANOS_IN_MILLI;
|
||||
|
||||
if (create_duration(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, seconds, nanoseconds) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
@@ -283,7 +284,7 @@ PHP_METHOD(Time_Duration, fromMinutes)
|
||||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
if (create_duration(return_value, minutes * 60, /* nanoseconds */ 0) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, minutes * 60, /* nanoseconds */ 0) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
@@ -301,7 +302,7 @@ PHP_METHOD(Time_Duration, fromHours)
|
||||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
if (create_duration(return_value, hours * 3600, /* nanoseconds */ 0) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, hours * 3600, /* nanoseconds */ 0) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
@@ -359,7 +360,7 @@ PHP_METHOD(Time_Duration, absolute)
|
||||
RETURN_COPY(ZEND_THIS);
|
||||
}
|
||||
|
||||
if (create_duration(return_value, original->duration.seconds, original->duration.nanoseconds) == FAILURE) {
|
||||
if (php_date_time_duration_create(return_value, original->duration.seconds, original->duration.nanoseconds) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright © The PHP Group and Contributors. |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to the Modified BSD License that is |
|
||||
| bundled with this package in the file LICENSE, and is available |
|
||||
| through the World Wide Web at <https://www.php.net/license/>. |
|
||||
| |
|
||||
| SPDX-License-Identifier: BSD-3-Clause |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Derick Rethans <derick@derickrethans.nl> |
|
||||
| Tim Düsterhus <timwolla@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
#ifndef PHP_DATE_TIME_DURATION_H
|
||||
# define PHP_DATE_TIME_DURATION_H
|
||||
|
||||
# include "php.h"
|
||||
# include "lib/timelib.h"
|
||||
|
||||
PHPAPI extern zend_class_entry *php_date_ce_time_duration;
|
||||
|
||||
typedef struct php_date_time_duration {
|
||||
timelib_duration duration;
|
||||
zend_object std;
|
||||
} php_date_time_duration;
|
||||
|
||||
# define php_date_time_duration_from_obj(obj) ZEND_CONTAINER_OF(obj, php_date_time_duration, std)
|
||||
|
||||
# define Z_DATE_TIME_DURATION_P(zv) php_date_time_duration_from_obj(Z_OBJ_P((zv)))
|
||||
|
||||
# define Z_PARAM_DATE_TIME_DURATION(d) { \
|
||||
zend_object *__##d; \
|
||||
Z_PARAM_OBJ_OF_CLASS(__##d, php_date_ce_time_duration); \
|
||||
d = php_date_time_duration_from_obj(__##d); \
|
||||
}
|
||||
|
||||
# define Z_PARAM_DATE_TIME_DURATION_OR_NULL(d) { \
|
||||
zend_object *__##d; \
|
||||
Z_PARAM_OBJ_OF_CLASS_OR_NULL(__##d, php_date_ce_time_duration); \
|
||||
d = __##d ? php_date_time_duration_from_obj(__##d) : NULL; \
|
||||
}
|
||||
|
||||
ZEND_ATTRIBUTE_NODISCARD PHPAPI zend_result php_date_time_duration_create(zval *target, zend_ulong seconds, zend_ulong nanoseconds);
|
||||
|
||||
#endif /* PHP_DATE_TIME_DURATION_H */
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "io_poll.h"
|
||||
#include "io_poll_arginfo.h"
|
||||
#include "io_poll_decl.h"
|
||||
#include "ext/date/php_time.h"
|
||||
#include "ext/date/time_duration.h"
|
||||
|
||||
/* Class entries */
|
||||
static zend_class_entry *php_io_poll_backend_class_entry;
|
||||
|
||||
Reference in new issue
Block a user