meta: rename to fx
This commit is contained in:
194
ds/datetime.c
194
ds/datetime.c
@@ -1,10 +1,10 @@
|
||||
#include <blue/core/stream.h>
|
||||
#include <blue/ds/datetime.h>
|
||||
#include <blue/ds/string.h>
|
||||
#include <fx/core/stream.h>
|
||||
#include <fx/ds/datetime.h>
|
||||
#include <fx/ds/string.h>
|
||||
|
||||
/*** PRIVATE DATA *************************************************************/
|
||||
|
||||
struct b_datetime_p {
|
||||
struct fx_datetime_p {
|
||||
unsigned int dt_year, dt_month, dt_day;
|
||||
unsigned short dt_hour, dt_min, dt_sec;
|
||||
unsigned int dt_msec;
|
||||
@@ -16,7 +16,7 @@ struct b_datetime_p {
|
||||
|
||||
/*** PRIVATE FUNCTIONS ********************************************************/
|
||||
|
||||
static bool is_leap_year(const struct b_datetime_p *dt)
|
||||
static bool is_leap_year(const struct fx_datetime_p *dt)
|
||||
{
|
||||
if ((dt->dt_year % 400) == 0) {
|
||||
return true;
|
||||
@@ -29,17 +29,17 @@ static bool is_leap_year(const struct b_datetime_p *dt)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool is_year_valid(const struct b_datetime_p *dt)
|
||||
static bool is_year_valid(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_year >= 0;
|
||||
}
|
||||
|
||||
static bool is_month_valid(const struct b_datetime_p *dt)
|
||||
static bool is_month_valid(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_month >= 1 && dt->dt_month <= 12;
|
||||
}
|
||||
|
||||
static bool is_day_valid(const struct b_datetime_p *dt)
|
||||
static bool is_day_valid(const struct fx_datetime_p *dt)
|
||||
{
|
||||
if (dt->dt_day < 1) {
|
||||
return false;
|
||||
@@ -66,7 +66,7 @@ static bool is_day_valid(const struct b_datetime_p *dt)
|
||||
}
|
||||
}
|
||||
|
||||
static bool is_time_valid(const struct b_datetime_p *dt)
|
||||
static bool is_time_valid(const struct fx_datetime_p *dt)
|
||||
{
|
||||
if (!(dt->dt_hour >= 0 && dt->dt_hour <= 23)) {
|
||||
return false;
|
||||
@@ -83,7 +83,7 @@ static bool is_time_valid(const struct b_datetime_p *dt)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool is_zone_valid(const struct b_datetime_p *dt)
|
||||
static bool is_zone_valid(const struct fx_datetime_p *dt)
|
||||
{
|
||||
if (!(dt->dt_zone_offset_hour >= 0 && dt->dt_zone_offset_hour <= 23)) {
|
||||
return false;
|
||||
@@ -96,7 +96,7 @@ static bool is_zone_valid(const struct b_datetime_p *dt)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool validate(const struct b_datetime_p *dt)
|
||||
static bool validate(const struct fx_datetime_p *dt)
|
||||
{
|
||||
if (dt->dt_has_date) {
|
||||
if (!is_year_valid(dt)) {
|
||||
@@ -125,14 +125,14 @@ static bool validate(const struct b_datetime_p *dt)
|
||||
return true;
|
||||
}
|
||||
|
||||
static b_datetime *parse_rfc3339(const char *s)
|
||||
static fx_datetime *parse_rfc3339(const char *s)
|
||||
{
|
||||
b_datetime *d = b_datetime_create();
|
||||
fx_datetime *d = fx_datetime_create();
|
||||
if (!d) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct b_datetime_p *dt = b_object_get_private(d, B_TYPE_DATETIME);
|
||||
struct fx_datetime_p *dt = fx_object_get_private(d, FX_TYPE_DATETIME);
|
||||
|
||||
size_t len = strlen(s);
|
||||
|
||||
@@ -305,37 +305,37 @@ static b_datetime *parse_rfc3339(const char *s)
|
||||
dt->dt_has_time = has_time;
|
||||
return d;
|
||||
fail:
|
||||
b_datetime_unref(d);
|
||||
fx_datetime_unref(d);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static enum b_status encode_rfc3339(const struct b_datetime_p *dt, b_stream *out)
|
||||
static enum fx_status encode_rfc3339(const struct fx_datetime_p *dt, fx_stream *out)
|
||||
{
|
||||
if (dt->dt_has_date) {
|
||||
b_stream_write_fmt(
|
||||
fx_stream_write_fmt(
|
||||
out, NULL, "%04ld-%02ld-%02ld", dt->dt_year,
|
||||
dt->dt_month, dt->dt_day);
|
||||
}
|
||||
|
||||
if (dt->dt_has_date && dt->dt_has_time) {
|
||||
b_stream_write_char(out, 'T');
|
||||
fx_stream_write_char(out, 'T');
|
||||
}
|
||||
|
||||
if (dt->dt_has_time) {
|
||||
b_stream_write_fmt(
|
||||
fx_stream_write_fmt(
|
||||
out, NULL, "%02ld:%02ld:%02ld", dt->dt_hour, dt->dt_min,
|
||||
dt->dt_sec);
|
||||
|
||||
if (dt->dt_msec > 0) {
|
||||
b_stream_write_fmt(out, NULL, ".%04ld", dt->dt_msec);
|
||||
fx_stream_write_fmt(out, NULL, ".%04ld", dt->dt_msec);
|
||||
}
|
||||
|
||||
if (!dt->dt_localtime) {
|
||||
if (dt->dt_zone_offset_hour == 0
|
||||
&& dt->dt_zone_offset_minute == 0) {
|
||||
b_stream_write_char(out, 'Z');
|
||||
fx_stream_write_char(out, 'Z');
|
||||
} else {
|
||||
b_stream_write_fmt(
|
||||
fx_stream_write_fmt(
|
||||
out, NULL, "%c%02ld:%02ld",
|
||||
dt->dt_zone_offset_negative ? '-' : '+',
|
||||
dt->dt_zone_offset_hour,
|
||||
@@ -344,14 +344,14 @@ static enum b_status encode_rfc3339(const struct b_datetime_p *dt, b_stream *out
|
||||
}
|
||||
}
|
||||
|
||||
return B_SUCCESS;
|
||||
return FX_SUCCESS;
|
||||
}
|
||||
|
||||
static void datetime_to_string(
|
||||
const struct b_datetime_p *dt, b_datetime_format format, b_stream *dest)
|
||||
const struct fx_datetime_p *dt, fx_datetime_format format, fx_stream *dest)
|
||||
{
|
||||
switch (format) {
|
||||
case B_DATETIME_FORMAT_RFC3339:
|
||||
case FX_DATETIME_FORMAT_RFC3339:
|
||||
encode_rfc3339(dt, dest);
|
||||
break;
|
||||
default:
|
||||
@@ -359,79 +359,79 @@ static void datetime_to_string(
|
||||
}
|
||||
}
|
||||
|
||||
static bool datetime_is_localtime(const struct b_datetime_p *dt)
|
||||
static bool datetime_is_localtime(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_localtime;
|
||||
}
|
||||
|
||||
static bool datetime_has_date(const struct b_datetime_p *dt)
|
||||
static bool datetime_has_date(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_has_date;
|
||||
}
|
||||
|
||||
static bool datetime_has_time(const struct b_datetime_p *dt)
|
||||
static bool datetime_has_time(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_has_time;
|
||||
}
|
||||
|
||||
static long datetime_year(const struct b_datetime_p *dt)
|
||||
static long datetime_year(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_year;
|
||||
}
|
||||
|
||||
static long datetime_month(const struct b_datetime_p *dt)
|
||||
static long datetime_month(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_month;
|
||||
}
|
||||
|
||||
static long datetime_day(const struct b_datetime_p *dt)
|
||||
static long datetime_day(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_day;
|
||||
}
|
||||
|
||||
static long datetime_hour(const struct b_datetime_p *dt)
|
||||
static long datetime_hour(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_hour;
|
||||
}
|
||||
|
||||
static long datetime_minute(const struct b_datetime_p *dt)
|
||||
static long datetime_minute(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_min;
|
||||
}
|
||||
|
||||
static long datetime_second(const struct b_datetime_p *dt)
|
||||
static long datetime_second(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_sec;
|
||||
}
|
||||
|
||||
static long datetime_subsecond(const struct b_datetime_p *dt)
|
||||
static long datetime_subsecond(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_msec;
|
||||
}
|
||||
|
||||
static bool datetime_zone_offset_is_negative(const struct b_datetime_p *dt)
|
||||
static bool datetime_zone_offset_is_negative(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_zone_offset_negative;
|
||||
}
|
||||
|
||||
static long datetime_zone_offset_hour(const struct b_datetime_p *dt)
|
||||
static long datetime_zone_offset_hour(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_zone_offset_hour;
|
||||
}
|
||||
|
||||
static long datetime_zone_offset_minute(const struct b_datetime_p *dt)
|
||||
static long datetime_zone_offset_minute(const struct fx_datetime_p *dt)
|
||||
{
|
||||
return dt->dt_zone_offset_minute;
|
||||
}
|
||||
|
||||
/*** PUBLIC FUNCTIONS *********************************************************/
|
||||
|
||||
b_datetime *b_datetime_parse(enum b_datetime_format format, const char *s)
|
||||
fx_datetime *fx_datetime_parse(enum fx_datetime_format format, const char *s)
|
||||
{
|
||||
b_datetime *dt = NULL;
|
||||
fx_datetime *dt = NULL;
|
||||
|
||||
switch (format) {
|
||||
case B_DATETIME_FORMAT_RFC3339:
|
||||
case FX_DATETIME_FORMAT_RFC3339:
|
||||
dt = parse_rfc3339(s);
|
||||
break;
|
||||
default:
|
||||
@@ -442,126 +442,126 @@ b_datetime *b_datetime_parse(enum b_datetime_format format, const char *s)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct b_datetime_p *p = b_object_get_private(dt, B_TYPE_DATETIME);
|
||||
struct fx_datetime_p *p = fx_object_get_private(dt, FX_TYPE_DATETIME);
|
||||
|
||||
if (!validate(p)) {
|
||||
b_datetime_unref(dt);
|
||||
fx_datetime_unref(dt);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dt;
|
||||
}
|
||||
|
||||
void b_datetime_to_string(
|
||||
const b_datetime *dt, b_datetime_format format, b_stream *dest)
|
||||
void fx_datetime_to_string(
|
||||
const fx_datetime *dt, fx_datetime_format format, fx_stream *dest)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC(
|
||||
B_TYPE_DATETIME, datetime_to_string, dt, format, dest);
|
||||
FX_CLASS_DISPATCH_STATIC(
|
||||
FX_TYPE_DATETIME, datetime_to_string, dt, format, dest);
|
||||
}
|
||||
|
||||
bool b_datetime_is_localtime(const b_datetime *dt)
|
||||
bool fx_datetime_is_localtime(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_is_localtime, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_is_localtime, dt);
|
||||
}
|
||||
|
||||
bool b_datetime_has_date(const b_datetime *dt)
|
||||
bool fx_datetime_has_date(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_has_date, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_has_date, dt);
|
||||
}
|
||||
|
||||
bool b_datetime_has_time(const b_datetime *dt)
|
||||
bool fx_datetime_has_time(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_has_time, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_has_time, dt);
|
||||
}
|
||||
|
||||
long b_datetime_year(const b_datetime *dt)
|
||||
long fx_datetime_year(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_year, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_year, dt);
|
||||
}
|
||||
|
||||
long b_datetime_month(const b_datetime *dt)
|
||||
long fx_datetime_month(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_month, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_month, dt);
|
||||
}
|
||||
|
||||
long b_datetime_day(const b_datetime *dt)
|
||||
long fx_datetime_day(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_day, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_day, dt);
|
||||
}
|
||||
|
||||
long b_datetime_hour(const b_datetime *dt)
|
||||
long fx_datetime_hour(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_hour, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_hour, dt);
|
||||
}
|
||||
|
||||
long b_datetime_minute(const b_datetime *dt)
|
||||
long fx_datetime_minute(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_minute, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_minute, dt);
|
||||
}
|
||||
|
||||
long b_datetime_second(const b_datetime *dt)
|
||||
long fx_datetime_second(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_second, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_second, dt);
|
||||
}
|
||||
|
||||
long b_datetime_subsecond(const b_datetime *dt)
|
||||
long fx_datetime_subsecond(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_subsecond, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_subsecond, dt);
|
||||
}
|
||||
|
||||
bool b_datetime_zone_offset_is_negative(const b_datetime *dt)
|
||||
bool fx_datetime_zone_offset_is_negative(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(
|
||||
B_TYPE_DATETIME, datetime_zone_offset_is_negative, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(
|
||||
FX_TYPE_DATETIME, datetime_zone_offset_is_negative, dt);
|
||||
}
|
||||
|
||||
long b_datetime_zone_offset_hour(const b_datetime *dt)
|
||||
long fx_datetime_zone_offset_hour(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_zone_offset_hour, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_zone_offset_hour, dt);
|
||||
}
|
||||
|
||||
long b_datetime_zone_offset_minute(const b_datetime *dt)
|
||||
long fx_datetime_zone_offset_minute(const fx_datetime *dt)
|
||||
{
|
||||
B_CLASS_DISPATCH_STATIC_0(B_TYPE_DATETIME, datetime_zone_offset_minute, dt);
|
||||
FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_DATETIME, datetime_zone_offset_minute, dt);
|
||||
}
|
||||
|
||||
/*** VIRTUAL FUNCTIONS ********************************************************/
|
||||
|
||||
static void datetime_init(b_object *obj, void *priv)
|
||||
static void datetime_init(fx_object *obj, void *priv)
|
||||
{
|
||||
struct b_datetime_p *dt = priv;
|
||||
struct fx_datetime_p *dt = priv;
|
||||
}
|
||||
|
||||
static void datetime_fini(b_object *obj, void *priv)
|
||||
static void datetime_fini(fx_object *obj, void *priv)
|
||||
{
|
||||
struct b_datetime_p *dt = priv;
|
||||
struct fx_datetime_p *dt = priv;
|
||||
}
|
||||
|
||||
static void _datetime_to_string(const b_object *obj, b_stream *out)
|
||||
static void _datetime_to_string(const fx_object *obj, fx_stream *out)
|
||||
{
|
||||
struct b_datetime_p *dt = b_object_get_private(obj, B_TYPE_DATETIME);
|
||||
struct fx_datetime_p *dt = fx_object_get_private(obj, FX_TYPE_DATETIME);
|
||||
|
||||
if (dt->dt_has_date) {
|
||||
b_stream_write_fmt(
|
||||
fx_stream_write_fmt(
|
||||
out, NULL, "%04ld-%02ld-%02ld", dt->dt_year,
|
||||
dt->dt_month, dt->dt_day);
|
||||
}
|
||||
|
||||
if (dt->dt_has_date && dt->dt_has_time) {
|
||||
b_stream_write_char(out, ' ');
|
||||
fx_stream_write_char(out, ' ');
|
||||
}
|
||||
|
||||
if (dt->dt_has_time) {
|
||||
b_stream_write_fmt(
|
||||
fx_stream_write_fmt(
|
||||
out, NULL, "%02ld:%02ld:%02ld", dt->dt_hour, dt->dt_min,
|
||||
dt->dt_sec);
|
||||
|
||||
if (dt->dt_msec > 0) {
|
||||
b_stream_write_fmt(out, NULL, ".%04ld", dt->dt_msec);
|
||||
fx_stream_write_fmt(out, NULL, ".%04ld", dt->dt_msec);
|
||||
}
|
||||
|
||||
if (!dt->dt_localtime) {
|
||||
b_stream_write_fmt(
|
||||
fx_stream_write_fmt(
|
||||
out, NULL, " %c%02ld:%02ld",
|
||||
dt->dt_zone_offset_negative ? '-' : '+',
|
||||
dt->dt_zone_offset_hour,
|
||||
@@ -572,16 +572,16 @@ static void _datetime_to_string(const b_object *obj, b_stream *out)
|
||||
|
||||
/*** CLASS DEFINITION *********************************************************/
|
||||
|
||||
B_TYPE_CLASS_DEFINITION_BEGIN(b_datetime)
|
||||
B_TYPE_CLASS_INTERFACE_BEGIN(b_object, B_TYPE_OBJECT)
|
||||
B_INTERFACE_ENTRY(to_string) = _datetime_to_string;
|
||||
B_TYPE_CLASS_INTERFACE_END(b_object, B_TYPE_OBJECT)
|
||||
B_TYPE_CLASS_DEFINITION_END(b_datetime)
|
||||
FX_TYPE_CLASS_DEFINITION_BEGIN(fx_datetime)
|
||||
FX_TYPE_CLASS_INTERFACE_BEGIN(fx_object, FX_TYPE_OBJECT)
|
||||
FX_INTERFACE_ENTRY(to_string) = _datetime_to_string;
|
||||
FX_TYPE_CLASS_INTERFACE_END(fx_object, FX_TYPE_OBJECT)
|
||||
FX_TYPE_CLASS_DEFINITION_END(fx_datetime)
|
||||
|
||||
B_TYPE_DEFINITION_BEGIN(b_datetime)
|
||||
B_TYPE_ID(0x06a6030b, 0x1e3c, 0x4be2, 0xbd23, 0xf34f4a8e68be);
|
||||
B_TYPE_CLASS(b_datetime_class);
|
||||
B_TYPE_INSTANCE_PRIVATE(struct b_datetime_p);
|
||||
B_TYPE_INSTANCE_INIT(datetime_init);
|
||||
B_TYPE_INSTANCE_FINI(datetime_fini);
|
||||
B_TYPE_DEFINITION_END(b_datetime)
|
||||
FX_TYPE_DEFINITION_BEGIN(fx_datetime)
|
||||
FX_TYPE_ID(0x06a6030b, 0x1e3c, 0x4be2, 0xbd23, 0xf34f4a8e68be);
|
||||
FX_TYPE_CLASS(fx_datetime_class);
|
||||
FX_TYPE_INSTANCE_PRIVATE(struct fx_datetime_p);
|
||||
FX_TYPE_INSTANCE_INIT(datetime_init);
|
||||
FX_TYPE_INSTANCE_FINI(datetime_fini);
|
||||
FX_TYPE_DEFINITION_END(fx_datetime)
|
||||
|
||||
Reference in New Issue
Block a user