added a build option to use qse_intmax_t for integers in awk.
made relevant changes to support the option
This commit is contained in:
@ -49,7 +49,9 @@ public:
|
||||
|
||||
// redefine flt_t. To access Types::flt_t, use the fully qualified
|
||||
// name as it's overriding Types::flt_t.
|
||||
typedef qse_awk_flt_t flt_t;
|
||||
typedef qse_awk_flt_t flt_t;
|
||||
typedef qse_awk_int_t int_t;
|
||||
typedef qse_awk_uint_t uint_t;
|
||||
|
||||
typedef qse_awk_loc_t loc_t;
|
||||
typedef qse_awk_errnum_t errnum_t;
|
||||
@ -490,7 +492,7 @@ public:
|
||||
Mode getMode () const;
|
||||
|
||||
int setFileName (const char_t* name);
|
||||
int setFNR (long_t fnr);
|
||||
int setFNR (int_t fnr);
|
||||
|
||||
protected:
|
||||
char_t* filename;
|
||||
@ -583,7 +585,7 @@ public:
|
||||
class QSE_EXPORT IntIndex: public Index
|
||||
{
|
||||
public:
|
||||
IntIndex (long_t num);
|
||||
IntIndex (int_t num);
|
||||
|
||||
protected:
|
||||
// 2^32: 4294967296
|
||||
@ -593,7 +595,7 @@ public:
|
||||
// -(2^64/2): -9223372036854775808
|
||||
// -(2^128/2): -170141183460469231731687303715884105728
|
||||
#if QSE_SIZEOF_LONG_T > 16
|
||||
# error SIZEOF(qse_long_t) TOO LARGE.
|
||||
# error SIZEOF(int_t) TOO LARGE.
|
||||
# error INCREASE THE BUFFER SIZE TO SUPPORT IT.
|
||||
#elif QSE_SIZEOF_LONG_T == 16
|
||||
char_t buf[41];
|
||||
@ -676,7 +678,7 @@ public:
|
||||
void clear ();
|
||||
|
||||
operator val_t* () const { return val; }
|
||||
operator long_t () const;
|
||||
operator int_t () const;
|
||||
operator flt_t () const;
|
||||
operator const char_t* () const;
|
||||
|
||||
@ -685,9 +687,9 @@ public:
|
||||
return operator val_t* ();
|
||||
}
|
||||
|
||||
long_t toInt () const
|
||||
int_t toInt () const
|
||||
{
|
||||
return operator long_t ();
|
||||
return operator int_t ();
|
||||
}
|
||||
|
||||
flt_t toFlt () const
|
||||
@ -710,16 +712,16 @@ public:
|
||||
return p;
|
||||
}
|
||||
|
||||
int getInt (long_t* v) const;
|
||||
int getInt (int_t* v) const;
|
||||
int getFlt (flt_t* v) const;
|
||||
int getNum (long_t* lv, flt_t* fv) const;
|
||||
int getNum (int_t* lv, flt_t* fv) const;
|
||||
int getStr (const char_t** str, size_t* len) const;
|
||||
|
||||
int setVal (val_t* v);
|
||||
int setVal (Run* r, val_t* v);
|
||||
|
||||
int setInt (long_t v);
|
||||
int setInt (Run* r, long_t v);
|
||||
int setInt (int_t v);
|
||||
int setInt (Run* r, int_t v);
|
||||
int setFlt (flt_t v);
|
||||
int setFlt (Run* r, flt_t v);
|
||||
int setStr (const char_t* str, size_t len, bool numeric = false);
|
||||
@ -740,13 +742,13 @@ public:
|
||||
|
||||
int setIndexedInt (
|
||||
const Index& idx,
|
||||
long_t v
|
||||
int_t v
|
||||
);
|
||||
|
||||
int setIndexedInt (
|
||||
Run* r,
|
||||
const Index& idx,
|
||||
long_t v);
|
||||
int_t v);
|
||||
|
||||
int setIndexedFlt (
|
||||
const Index& idx,
|
||||
@ -884,7 +886,7 @@ public:
|
||||
/// to @a v.
|
||||
/// @return 0 on success, -1 on failure
|
||||
///
|
||||
int setGlobal (int id, long_t v);
|
||||
int setGlobal (int id, int_t v);
|
||||
|
||||
///
|
||||
/// The setGlobal() function sets the value of a global
|
||||
|
@ -173,8 +173,8 @@ protected:
|
||||
void* modsym (void* handle, const char_t* name);
|
||||
|
||||
protected:
|
||||
qse_long_t seed;
|
||||
qse_ulong_t prand;
|
||||
int_t seed;
|
||||
uint_t prand;
|
||||
qse_htb_t cmgrtab;
|
||||
bool cmgrtab_inited;
|
||||
|
||||
|
@ -35,6 +35,14 @@
|
||||
* - consider something like ${1:3,5} => $1, $2, $3, and $5 concatenated
|
||||
*/
|
||||
|
||||
#if defined(QSE_USE_AWK_INTMAX)
|
||||
typedef qse_intmax_t qse_awk_int_t;
|
||||
typedef qse_uintmax_t qse_awk_uint_t;
|
||||
#else
|
||||
typedef qse_long_t qse_awk_int_t;
|
||||
typedef qse_ulong_t qse_awk_uint_t;
|
||||
#endif
|
||||
|
||||
#if defined(QSE_USE_AWK_FLTMAX)
|
||||
typedef qse_fltmax_t qse_awk_flt_t;
|
||||
#else
|
||||
@ -117,7 +125,7 @@ typedef struct qse_awk_loc_t qse_awk_loc_t;
|
||||
* - type - type of a value from #qse_awk_val_type_t
|
||||
* - ref - reference count
|
||||
* - stat - static value
|
||||
* - nstr - numeric string marker, 1 -> long, 2 -> real
|
||||
* - nstr - numeric string marker, 1 -> integer, 2 -> floating-point number
|
||||
*/
|
||||
/*
|
||||
#define QSE_AWK_VAL_HDR \
|
||||
@ -161,8 +169,8 @@ typedef struct qse_awk_val_nil_t qse_awk_val_nil_t;
|
||||
struct qse_awk_val_int_t
|
||||
{
|
||||
QSE_AWK_VAL_HDR;
|
||||
qse_long_t val;
|
||||
void* nde;
|
||||
qse_awk_int_t val;
|
||||
void* nde;
|
||||
};
|
||||
typedef struct qse_awk_val_int_t qse_awk_val_int_t;
|
||||
|
||||
@ -854,7 +862,7 @@ typedef struct qse_awk_mod_sym_flt_t qse_awk_mod_sym_flt_t;
|
||||
|
||||
struct qse_awk_mod_sym_int_t
|
||||
{
|
||||
qse_long_t val;
|
||||
qse_awk_int_t val;
|
||||
};
|
||||
|
||||
struct qse_awk_mod_sym_flt_t
|
||||
@ -1406,9 +1414,9 @@ typedef struct qse_awk_rtx_valtostr_out_t qse_awk_rtx_valtostr_out_t;
|
||||
/* record filter using NR */
|
||||
struct qse_awk_nrflt_t
|
||||
{
|
||||
qse_long_t limit;
|
||||
qse_long_t size;
|
||||
qse_long_t rank;
|
||||
qse_awk_int_t limit;
|
||||
qse_awk_int_t size;
|
||||
qse_awk_int_t rank;
|
||||
};
|
||||
typedef struct qse_awk_nrflt_t qse_awk_nrflt_t;
|
||||
|
||||
@ -1837,9 +1845,9 @@ QSE_EXPORT qse_char_t* qse_awk_cstrdup (
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_awk_strxtolong() function converts a string to an integer.
|
||||
* The qse_awk_strxtoint() function converts a string to an integer.
|
||||
*/
|
||||
QSE_EXPORT qse_long_t qse_awk_strxtolong (
|
||||
QSE_EXPORT qse_awk_int_t qse_awk_strxtoint (
|
||||
qse_awk_t* awk,
|
||||
const qse_char_t* str,
|
||||
qse_size_t len,
|
||||
@ -1859,11 +1867,11 @@ QSE_EXPORT qse_awk_flt_t qse_awk_strxtoflt (
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_awk_longtostr() functon convers an integer to a string.
|
||||
* The qse_awk_longtostr() functon converts an integer to a string.
|
||||
*/
|
||||
QSE_EXPORT qse_size_t qse_awk_longtostr (
|
||||
QSE_EXPORT qse_size_t qse_awk_inttostr (
|
||||
qse_awk_t* awk,
|
||||
qse_long_t value,
|
||||
qse_awk_int_t value,
|
||||
int radix,
|
||||
const qse_char_t* prefix,
|
||||
qse_char_t* buf,
|
||||
@ -2271,7 +2279,7 @@ QSE_EXPORT qse_awk_val_t* qse_awk_rtx_makenilval (
|
||||
*/
|
||||
QSE_EXPORT qse_awk_val_t* qse_awk_rtx_makeintval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_long_t v
|
||||
qse_awk_int_t v
|
||||
);
|
||||
|
||||
/**
|
||||
@ -2642,7 +2650,7 @@ QSE_EXPORT qse_wchar_t* qse_awk_rtx_valtowcsdup (
|
||||
|
||||
/**
|
||||
* The qse_awk_rtx_valtonum() function converts a value to a number.
|
||||
* If the value is converted to a long number, it is stored in the memory
|
||||
* If the value is converted to an integer, it is stored in the memory
|
||||
* pointed to by l and 0 is returned. If the value is converted to a real
|
||||
* number, it is stored in the memory pointed to by r and 1 is returned.
|
||||
* The function never fails as long as \a val points to a valid value.
|
||||
@ -2651,29 +2659,29 @@ QSE_EXPORT qse_wchar_t* qse_awk_rtx_valtowcsdup (
|
||||
* if it is an integer or a floating-point number.
|
||||
*
|
||||
* \code
|
||||
* qse_long_t l;
|
||||
* qse_awk_int_t l;
|
||||
* qse_awk_flt_t r;
|
||||
* int n;
|
||||
* n = qse_awk_rtx_valtonum (v, &l, &r);
|
||||
* if (n <= -1) error ();
|
||||
* else if (n == 0) print_long (l);
|
||||
* else if (n >= 1) print_real (r);
|
||||
* else if (n == 0) print_int (l);
|
||||
* else if (n >= 1) print_flt (r);
|
||||
* \endcode
|
||||
*
|
||||
* \return -1 on failure, 0 if converted to a long number, 1 if converted to
|
||||
* \return -1 on failure, 0 if converted to an integer, 1 if converted to
|
||||
* a floating-point number.
|
||||
*/
|
||||
QSE_EXPORT int qse_awk_rtx_valtonum (
|
||||
qse_awk_rtx_t* rtx,
|
||||
const qse_awk_val_t* val,
|
||||
qse_long_t* l,
|
||||
qse_awk_int_t* l,
|
||||
qse_awk_flt_t* r
|
||||
);
|
||||
|
||||
QSE_EXPORT int qse_awk_rtx_valtolong (
|
||||
QSE_EXPORT int qse_awk_rtx_valtoint (
|
||||
qse_awk_rtx_t* rtx,
|
||||
const qse_awk_val_t* val,
|
||||
qse_long_t* l
|
||||
qse_awk_int_t* l
|
||||
);
|
||||
|
||||
QSE_EXPORT int qse_awk_rtx_valtoflt (
|
||||
@ -2701,7 +2709,7 @@ QSE_EXPORT int qse_awk_rtx_strtonum (
|
||||
int strict, /**< determines to perform strict check */
|
||||
const qse_char_t* ptr, /**< points to a string to convert */
|
||||
qse_size_t len, /**< number of characters in a string */
|
||||
qse_long_t* l, /**< stores a converted integer */
|
||||
qse_awk_int_t* l, /**< stores a converted integer */
|
||||
qse_awk_flt_t* r /**< stores a converted floating-poing number */
|
||||
);
|
||||
|
||||
@ -2709,7 +2717,7 @@ QSE_EXPORT int qse_awk_rtx_strtonum (
|
||||
* The qse_awk_rtx_hashval() function hashes a simple value
|
||||
* to a positive integer. It returns -1 for a inhashable value.
|
||||
*/
|
||||
QSE_EXPORT qse_long_t qse_awk_rtx_hashval (
|
||||
QSE_EXPORT qse_awk_int_t qse_awk_rtx_hashval (
|
||||
qse_awk_rtx_t* rtx,
|
||||
qse_awk_val_t* v
|
||||
);
|
||||
|
@ -158,7 +158,19 @@ QSE_EXPORT qse_uint64_t qse_randxs64 (
|
||||
);
|
||||
#endif
|
||||
|
||||
#if (QSE_SIZEOF_ULONG_T == QSE_SIZEOF_UINT64_T)
|
||||
#if (QSE_SIZEOF_UINT128_T > 0)
|
||||
/**
|
||||
* The qse_randxs128() function implements the xorshift random number generator
|
||||
* by George Marsaglia.
|
||||
*/
|
||||
QSE_EXPORT qse_uint128_t qse_randxs128 (
|
||||
qse_uint128_t seed
|
||||
);
|
||||
#endif
|
||||
|
||||
#if (QSE_SIZEOF_ULONG_T == QSE_SIZEOF_UINT128_T)
|
||||
# define qse_randxsulong(seed) qse_randxs128(seed)
|
||||
#elif (QSE_SIZEOF_ULONG_T == QSE_SIZEOF_UINT64_T)
|
||||
# define qse_randxsulong(seed) qse_randxs64(seed)
|
||||
#elif (QSE_SIZEOF_ULONG_T == QSE_SIZEOF_UINT32_T)
|
||||
# define qse_randxsulong(seed) qse_randxs32(seed)
|
||||
@ -166,7 +178,9 @@ QSE_EXPORT qse_uint64_t qse_randxs64 (
|
||||
# error Unsupported
|
||||
#endif
|
||||
|
||||
#if (QSE_SIZEOF_UINT_T == QSE_SIZEOF_UINT64_T)
|
||||
#if (QSE_SIZEOF_UINT_T == QSE_SIZEOF_UINT128_T)
|
||||
# define qse_randxsuint(seed) qse_randxs128(seed)
|
||||
#elif (QSE_SIZEOF_UINT_T == QSE_SIZEOF_UINT64_T)
|
||||
# define qse_randxsuint(seed) qse_randxs64(seed)
|
||||
#elif (QSE_SIZEOF_UINT_T == QSE_SIZEOF_UINT32_T)
|
||||
# define qse_randxsuint(seed) qse_randxs32(seed)
|
||||
@ -174,6 +188,16 @@ QSE_EXPORT qse_uint64_t qse_randxs64 (
|
||||
# error Unsupported
|
||||
#endif
|
||||
|
||||
#if (QSE_SIZEOF_UINTMAX_T == QSE_SIZEOF_UINT128_T)
|
||||
# define qse_randxsuintmax(seed) qse_randxs128(seed)
|
||||
#elif (QSE_SIZEOF_UINTMAX_T == QSE_SIZEOF_UINT64_T)
|
||||
# define qse_randxsuintmax(seed) qse_randxs64(seed)
|
||||
#elif (QSE_SIZEOF_UINTMAX_T == QSE_SIZEOF_UINT32_T)
|
||||
# define qse_randxsuintmax(seed) qse_randxs32(seed)
|
||||
#else
|
||||
# error Unsupported
|
||||
#endif
|
||||
|
||||
QSE_EXPORT qse_size_t qse_enbase64 (
|
||||
const void* in,
|
||||
qse_size_t isz,
|
||||
|
@ -826,6 +826,9 @@
|
||||
/* use qse_fltmax_t for floating-point numbers in AWK */
|
||||
#undef QSE_USE_AWK_FLTMAX
|
||||
|
||||
/* use qse_intmax_t for integers in AWK */
|
||||
#undef QSE_USE_AWK_INTMAX
|
||||
|
||||
/* use the syscall() function to invoke a system call */
|
||||
#undef QSE_USE_SYSCALL
|
||||
|
||||
|
Reference in New Issue
Block a user