added moo_uintmaxtoint()
This commit is contained in:
parent
bd614c504b
commit
2cd60cbed8
@ -291,7 +291,11 @@ int main (int argc, char* argv[])
|
||||
}
|
||||
}
|
||||
|
||||
/*MOO_DEBUG2 (moo, "XXXXXXXXXXXXXXXXXXXXX %O %ld\n", moo_ooitoint(moo, MOO_TYPE_MIN(moo_ooi_t)), MOO_TYPE_MIN(moo_ooi_t));*/
|
||||
/*MOO_DEBUG2 (moo, "XXXXXXXXXXXXXXXXXXXXX %O %zd\n", moo_ooitoint(moo, MOO_TYPE_MIN(moo_ooi_t)), MOO_TYPE_MIN(moo_ooi_t));
|
||||
MOO_DEBUG2 (moo, "XXXXXXXXXXXXXXXXXXXXX %O %jd\n", moo_intmaxtoint(moo, MOO_TYPE_MIN(moo_intmax_t)), MOO_TYPE_MIN(moo_intmax_t));
|
||||
MOO_DEBUG2 (moo, "XXXXXXXXXXXXXXXXXXXXX %O %ju\n", moo_uintmaxtoint(moo, MOO_TYPE_MAX(moo_uintmax_t)), MOO_TYPE_MAX(moo_uintmax_t));
|
||||
MOO_DEBUG2 (moo, "XXXXXXXXXXXXXXXXXXXXX %O %zu\n", moo_oowtoint(moo, MOO_TYPE_MAX(moo_oow_t)), MOO_TYPE_MAX(moo_oow_t));*/
|
||||
|
||||
MOO_DEBUG0 (moo, "COMPILE OK. STARTING EXECUTION...\n");
|
||||
xret = 0;
|
||||
|
||||
|
@ -625,13 +625,19 @@ static MOO_INLINE moo_oop_t make_bigint_with_intmax (moo_t* moo, moo_intmax_t v)
|
||||
moo_oow_t len;
|
||||
moo_liw_t buf[MOO_SIZEOF_INTMAX_T / MOO_SIZEOF_LIW_T];
|
||||
moo_uintmax_t ui;
|
||||
moo_oop_class_t _class;
|
||||
|
||||
/*TODO: enhance to support MOO_TYPE_MIN(moo_intmax_t) */
|
||||
/* this is not a generic function. it can't handle v
|
||||
* if it's MOO_TYPE_MIN(moo_intmax_t) */
|
||||
MOO_ASSERT (moo, v > MOO_TYPE_MIN(moo_intmax_t));
|
||||
if (v >= 0)
|
||||
{
|
||||
ui = v;
|
||||
_class = moo->_large_positive_integer;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui = (v == MOO_TYPE_MIN(moo_intmax_t))? ((moo_uintmax_t)MOO_TYPE_MAX(moo_intmax_t) + 1): -v;
|
||||
_class = moo->_large_negative_integer;
|
||||
}
|
||||
|
||||
ui = (v >= 0)? v: -v;
|
||||
len = 0;
|
||||
do
|
||||
{
|
||||
@ -640,7 +646,23 @@ static MOO_INLINE moo_oop_t make_bigint_with_intmax (moo_t* moo, moo_intmax_t v)
|
||||
}
|
||||
while (ui > 0);
|
||||
|
||||
return moo_instantiate(moo, ((v >= 0)? moo->_large_positive_integer: moo->_large_negative_integer), buf, len);
|
||||
return moo_instantiate(moo, _class, buf, len);
|
||||
}
|
||||
|
||||
static MOO_INLINE moo_oop_t make_bigint_with_uintmax (moo_t* moo, moo_uintmax_t ui)
|
||||
{
|
||||
moo_oow_t len;
|
||||
moo_liw_t buf[MOO_SIZEOF_INTMAX_T / MOO_SIZEOF_LIW_T];
|
||||
|
||||
len = 0;
|
||||
do
|
||||
{
|
||||
buf[len++] = (moo_liw_t)ui;
|
||||
ui = ui >> MOO_LIW_BITS;
|
||||
}
|
||||
while (ui > 0);
|
||||
|
||||
return moo_instantiate(moo, moo->_large_positive_integer, buf, len);
|
||||
}
|
||||
|
||||
moo_oop_t moo_oowtoint (moo_t* moo, moo_oow_t w)
|
||||
@ -681,6 +703,18 @@ moo_oop_t moo_intmaxtoint (moo_t* moo, moo_intmax_t i)
|
||||
}
|
||||
}
|
||||
|
||||
moo_oop_t moo_uintmaxtoint (moo_t* moo, moo_uintmax_t i)
|
||||
{
|
||||
if (MOO_IN_SMOOI_RANGE(i))
|
||||
{
|
||||
return MOO_SMOOI_TO_OOP(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
return make_bigint_with_uintmax(moo, i);
|
||||
}
|
||||
}
|
||||
|
||||
static MOO_INLINE moo_oop_t expand_bigint (moo_t* moo, moo_oop_t oop, moo_oow_t inc)
|
||||
{
|
||||
moo_oop_t z;
|
||||
|
@ -2221,10 +2221,10 @@ MOO_EXPORT moo_oop_t moo_intmaxtoint (
|
||||
moo_intmax_t i
|
||||
);
|
||||
|
||||
/*MOO_EXPORT moo_oop_t moo_uintmaxtoint (
|
||||
MOO_EXPORT moo_oop_t moo_uintmaxtoint (
|
||||
moo_t* moo,
|
||||
moo_uintmax_t i
|
||||
);*/
|
||||
);
|
||||
|
||||
MOO_EXPORT int moo_inttouintmax (
|
||||
moo_t* moo,
|
||||
|
Loading…
Reference in New Issue
Block a user