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");
|
MOO_DEBUG0 (moo, "COMPILE OK. STARTING EXECUTION...\n");
|
||||||
xret = 0;
|
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_oow_t len;
|
||||||
moo_liw_t buf[MOO_SIZEOF_INTMAX_T / MOO_SIZEOF_LIW_T];
|
moo_liw_t buf[MOO_SIZEOF_INTMAX_T / MOO_SIZEOF_LIW_T];
|
||||||
moo_uintmax_t ui;
|
moo_uintmax_t ui;
|
||||||
|
moo_oop_class_t _class;
|
||||||
|
|
||||||
/*TODO: enhance to support MOO_TYPE_MIN(moo_intmax_t) */
|
if (v >= 0)
|
||||||
/* this is not a generic function. it can't handle v
|
{
|
||||||
* if it's MOO_TYPE_MIN(moo_intmax_t) */
|
ui = v;
|
||||||
MOO_ASSERT (moo, v > MOO_TYPE_MIN(moo_intmax_t));
|
_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;
|
len = 0;
|
||||||
do
|
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);
|
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)
|
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)
|
static MOO_INLINE moo_oop_t expand_bigint (moo_t* moo, moo_oop_t oop, moo_oow_t inc)
|
||||||
{
|
{
|
||||||
moo_oop_t z;
|
moo_oop_t z;
|
||||||
|
@ -2221,10 +2221,10 @@ MOO_EXPORT moo_oop_t moo_intmaxtoint (
|
|||||||
moo_intmax_t i
|
moo_intmax_t i
|
||||||
);
|
);
|
||||||
|
|
||||||
/*MOO_EXPORT moo_oop_t moo_uintmaxtoint (
|
MOO_EXPORT moo_oop_t moo_uintmaxtoint (
|
||||||
moo_t* moo,
|
moo_t* moo,
|
||||||
moo_uintmax_t i
|
moo_uintmax_t i
|
||||||
);*/
|
);
|
||||||
|
|
||||||
MOO_EXPORT int moo_inttouintmax (
|
MOO_EXPORT int moo_inttouintmax (
|
||||||
moo_t* moo,
|
moo_t* moo,
|
||||||
|
Loading…
Reference in New Issue
Block a user