added qse_str_to_ntime() and similar functions.
relocated cli error codes into the new enum type qse_cli_error_code_t
This commit is contained in:
parent
80ceed7bb2
commit
2915a591f0
@ -69,11 +69,15 @@ struct qse_opt_t
|
|||||||
#define QSE_CLI_OPTNAME (1 << 0)
|
#define QSE_CLI_OPTNAME (1 << 0)
|
||||||
#define QSE_CLI_OPTVAL (1 << 1)
|
#define QSE_CLI_OPTVAL (1 << 1)
|
||||||
|
|
||||||
#define QSE_CLI_ERROR_INVALID_OPTNAME 1
|
enum qse_cli_error_code_t
|
||||||
#define QSE_CLI_ERROR_MISSING_OPTNAME 2
|
{
|
||||||
#define QSE_CLI_ERROR_REDUNDANT_OPTVAL 3
|
QSE_CLI_ERROR_INVALID_OPTNAME = 1,
|
||||||
#define QSE_CLI_ERROR_MISSING_OPTVAL 4
|
QSE_CLI_ERROR_MISSING_OPTNAME = 2,
|
||||||
#define QSE_CLI_ERROR_MEMORY 5
|
QSE_CLI_ERROR_REDUNDANT_OPTVAL = 3,
|
||||||
|
QSE_CLI_ERROR_MISSING_OPTVAL = 4,
|
||||||
|
QSE_CLI_ERROR_MEMORY = 5
|
||||||
|
};
|
||||||
|
typedef enum qse_cli_error_code_t qse_cli_error_code_t;
|
||||||
|
|
||||||
typedef struct qse_cli_opt_t qse_cli_opt_t;
|
typedef struct qse_cli_opt_t qse_cli_opt_t;
|
||||||
typedef struct qse_cli_t qse_cli_t;
|
typedef struct qse_cli_t qse_cli_t;
|
||||||
@ -90,7 +94,7 @@ struct qse_cli_opt_t
|
|||||||
|
|
||||||
typedef int (*qse_cli_errcb_t) (
|
typedef int (*qse_cli_errcb_t) (
|
||||||
qse_cli_t* cli,
|
qse_cli_t* cli,
|
||||||
int code,
|
qse_cli_error_code_t code,
|
||||||
const qse_char_t* qname,
|
const qse_char_t* qname,
|
||||||
const qse_char_t* qval
|
const qse_char_t* qval
|
||||||
);
|
);
|
||||||
|
@ -221,6 +221,28 @@ QSE_EXPORT void qse_subtime (
|
|||||||
qse_ntime_t* z
|
qse_ntime_t* z
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The qse_strtontime() function converts a numeric text to the numeric time.
|
||||||
|
* seconds.nanoseconds
|
||||||
|
* 10.231
|
||||||
|
*/
|
||||||
|
QSE_EXPORT int qse_mbs_to_ntime (
|
||||||
|
const qse_mchar_t* text,
|
||||||
|
qse_ntime_t* ntime
|
||||||
|
);
|
||||||
|
|
||||||
|
QSE_EXPORT int qse_wcs_to_ntime (
|
||||||
|
const qse_wchar_t* text,
|
||||||
|
qse_ntime_t* ntime
|
||||||
|
);
|
||||||
|
|
||||||
|
#if defined(QSE_CHAR_IS_MCHAR)
|
||||||
|
# define qse_str_to_ntime(text,ntime) qse_mbs_to_ntime(text,ntime)
|
||||||
|
#else
|
||||||
|
# define qse_str_to_ntime(text,ntime) qse_wcs_to_ntime(text,ntime)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <qse/cmn/time.h>
|
#include <qse/cmn/time.h>
|
||||||
|
|
||||||
|
#include <qse/cmn/chr.h>
|
||||||
#include "mem-prv.h"
|
#include "mem-prv.h"
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@ -613,3 +615,103 @@ void qse_subtime (const qse_ntime_t* x, const qse_ntime_t* y, qse_ntime_t* z)
|
|||||||
z->nsec = z->nsec + QSE_NSECS_PER_SEC;
|
z->nsec = z->nsec + QSE_NSECS_PER_SEC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int qse_mbs_to_ntime (const qse_mchar_t* text, qse_ntime_t* ntime)
|
||||||
|
{
|
||||||
|
const qse_mchar_t* p = text, * cp;
|
||||||
|
qse_ntime_t tv = { 0, 0 };
|
||||||
|
int neg = 0;
|
||||||
|
|
||||||
|
if (*p == QSE_MT('-'))
|
||||||
|
{
|
||||||
|
neg = 1;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
else if (*p == QSE_MT('+'))
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
cp = p;
|
||||||
|
while (QSE_ISMDIGIT(*p))
|
||||||
|
{
|
||||||
|
qse_long_t oldsec = tv.sec;
|
||||||
|
tv.sec = tv.sec * 10 + (*p - QSE_MT('0'));
|
||||||
|
if (tv.sec < oldsec) return -1; /* overflow? */
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
if (cp == p) return -1;
|
||||||
|
|
||||||
|
if (*p == QSE_MT('.'))
|
||||||
|
{
|
||||||
|
qse_int32_t base = QSE_SEC_TO_NSEC(1); /* 1000000000 */
|
||||||
|
|
||||||
|
p++;
|
||||||
|
base /= 10; /* the max value is 999999999. 9 digits ony */
|
||||||
|
|
||||||
|
while (*p && QSE_ISMDIGIT(*p) && base > 0)
|
||||||
|
{
|
||||||
|
tv.nsec += (*p - QSE_MT('0')) * base;
|
||||||
|
base /= 10;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*p != QSE_MT('\0')) return -1;
|
||||||
|
|
||||||
|
if (neg) tv.sec *= -1;
|
||||||
|
*ntime = tv;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int qse_wcs_to_ntime (const qse_wchar_t* text, qse_ntime_t* ntime)
|
||||||
|
{
|
||||||
|
const qse_wchar_t* p = text, * cp;
|
||||||
|
qse_ntime_t tv = { 0, 0 };
|
||||||
|
int neg = 0;
|
||||||
|
|
||||||
|
if (*p == QSE_WT('-'))
|
||||||
|
{
|
||||||
|
neg = 1;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
else if (*p == QSE_WT('+'))
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
cp = p;
|
||||||
|
while (QSE_ISWDIGIT(*p))
|
||||||
|
{
|
||||||
|
qse_long_t oldsec = tv.sec;
|
||||||
|
tv.sec = tv.sec * 10 + (*p - QSE_WT('0'));
|
||||||
|
if (tv.sec < oldsec) return -1; /* overflow? */
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
if (cp == p) return -1;
|
||||||
|
|
||||||
|
if (*p == QSE_WT('.'))
|
||||||
|
{
|
||||||
|
qse_int32_t base = QSE_SEC_TO_NSEC(1); /* 1000000000 */
|
||||||
|
|
||||||
|
p++;
|
||||||
|
base /= 10; /* the max value is 999999999. 9 digits ony */
|
||||||
|
|
||||||
|
while (*p && QSE_ISWDIGIT(*p) && base > 0)
|
||||||
|
{
|
||||||
|
tv.nsec += (*p - QSE_WT('0')) * base;
|
||||||
|
base /= 10;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*p != QSE_WT('\0')) return -1;
|
||||||
|
|
||||||
|
if (neg) tv.sec *= -1;
|
||||||
|
*ntime = tv;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user