added hcl_genums(), hcl_gtnums(), hcl_lenums(), hcl_ltnums(), hcl_eqnums(), hcl_nenums()
This commit is contained in:
		| @ -3819,7 +3819,7 @@ hcl_oop_t hcl_eqints (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| 	} | ||||
|  | ||||
| oops_einval: | ||||
| 	hcl_seterrnum (hcl, HCL_EINVAL); | ||||
| 	hcl_seterrbfmt (hcl, HCL_EINVAL, "parameter not integer - %O, %O", x, y); | ||||
| 	return HCL_NULL; | ||||
| } | ||||
|  | ||||
| @ -3840,7 +3840,7 @@ hcl_oop_t hcl_neints (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| 	} | ||||
|  | ||||
| oops_einval: | ||||
| 	hcl_seterrnum (hcl, HCL_EINVAL); | ||||
| 	hcl_seterrbfmt (hcl, HCL_EINVAL, "parameter not integer - %O, %O", x, y); | ||||
| 	return HCL_NULL; | ||||
| } | ||||
|  | ||||
| @ -3867,7 +3867,7 @@ hcl_oop_t hcl_gtints (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| 	} | ||||
|  | ||||
| oops_einval: | ||||
| 	hcl_seterrnum (hcl, HCL_EINVAL); | ||||
| 	hcl_seterrbfmt (hcl, HCL_EINVAL, "parameter not integer - %O, %O", x, y); | ||||
| 	return HCL_NULL; | ||||
| } | ||||
|  | ||||
| @ -3894,7 +3894,7 @@ hcl_oop_t hcl_geints (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| 	} | ||||
|  | ||||
| oops_einval: | ||||
| 	hcl_seterrnum (hcl, HCL_EINVAL); | ||||
| 	hcl_seterrbfmt (hcl, HCL_EINVAL, "parameter not integer - %O, %O", x, y); | ||||
| 	return HCL_NULL; | ||||
| } | ||||
|  | ||||
| @ -3948,7 +3948,7 @@ hcl_oop_t hcl_leints (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| 	} | ||||
|  | ||||
| oops_einval: | ||||
| 	hcl_seterrnum (hcl, HCL_EINVAL); | ||||
| 	hcl_seterrbfmt (hcl, HCL_EINVAL, "parameter not integer - %O, %O", x, y); | ||||
| 	return HCL_NULL; | ||||
| } | ||||
|  | ||||
| @ -3983,7 +3983,11 @@ hcl_oop_t hcl_inttostr (hcl_t* hcl, hcl_oop_t num, int radix, int ngc) | ||||
| 	} | ||||
| 	HCL_ASSERT (hcl, radix >= 2 && radix <= 36); | ||||
|  | ||||
| 	if (!hcl_isint(hcl,num)) goto oops_einval; | ||||
| 	if (!hcl_isint(hcl,num))  | ||||
| 	{ | ||||
| 		hcl_seterrbfmt (hcl, HCL_EINVAL, "parameter not integer - %O", num); | ||||
| 		return HCL_NULL; | ||||
| 	} | ||||
| 	v = integer_to_oow(hcl, num, &w); | ||||
|  | ||||
| 	if (v) | ||||
| @ -4195,8 +4199,4 @@ hcl_oop_t hcl_inttostr (hcl_t* hcl, hcl_oop_t num, int radix, int ngc) | ||||
| 	} | ||||
|  | ||||
| 	return hcl_makestring(hcl, xbuf, xlen, ngc); | ||||
|  | ||||
| oops_einval: | ||||
| 	hcl_seterrnum (hcl, HCL_EINVAL); | ||||
| 	return HCL_NULL; | ||||
| } | ||||
|  | ||||
| @ -997,6 +997,41 @@ hcl_oop_t hcl_truncfpdecval ( | ||||
| 	hcl_ooi_t    ns  /* new scale */ | ||||
| ); | ||||
|  | ||||
| hcl_oop_t hcl_gtnums ( | ||||
| 	hcl_t*       hcl, | ||||
| 	hcl_oop_t    x, | ||||
| 	hcl_oop_t    y | ||||
| ); | ||||
|  | ||||
| hcl_oop_t hcl_genums ( | ||||
| 	hcl_t*       hcl, | ||||
| 	hcl_oop_t    x, | ||||
| 	hcl_oop_t    y | ||||
| ); | ||||
|  | ||||
| hcl_oop_t hcl_ltnums ( | ||||
| 	hcl_t*       hcl, | ||||
| 	hcl_oop_t    x, | ||||
| 	hcl_oop_t    y | ||||
| ); | ||||
|  | ||||
| hcl_oop_t hcl_lenums ( | ||||
| 	hcl_t*       hcl, | ||||
| 	hcl_oop_t    x, | ||||
| 	hcl_oop_t    y | ||||
| ); | ||||
|  | ||||
| hcl_oop_t hcl_eqnums ( | ||||
| 	hcl_t*       hcl, | ||||
| 	hcl_oop_t    x, | ||||
| 	hcl_oop_t    y | ||||
| ); | ||||
|  | ||||
| hcl_oop_t hcl_nenums ( | ||||
| 	hcl_t*       hcl, | ||||
| 	hcl_oop_t    x, | ||||
| 	hcl_oop_t    y | ||||
| ); | ||||
| /* ========================================================================= */ | ||||
| /* comp.c                                                                    */ | ||||
| /* ========================================================================= */ | ||||
|  | ||||
| @ -275,3 +275,60 @@ hcl_oop_t hcl_divnums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
|  | ||||
| 	return hcl_makefpdec(hcl, nv, xs); | ||||
| } | ||||
|  | ||||
| static hcl_oop_t comp_nums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y, hcl_oop_t (*comper) (hcl_t*, hcl_oop_t, hcl_oop_t)) | ||||
| { | ||||
| 	if (!HCL_IS_FPDEC(hcl, x) && !HCL_IS_FPDEC(hcl, y)) | ||||
| 	{ | ||||
| 		/* both are probably integers */ | ||||
| 		return comper(hcl, x, y); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		hcl_oop_t v; | ||||
| 		hcl_ooi_t scale; | ||||
|  | ||||
| 		hcl_pushtmp (hcl, &x); | ||||
| 		hcl_pushtmp (hcl, &y); | ||||
|  | ||||
| 		scale = equalize_scale(hcl, &x, &y); | ||||
| 		if (scale <= -1)  | ||||
| 		{ | ||||
| 			hcl_poptmps (hcl, 2); | ||||
| 			return HCL_NULL; | ||||
| 		} | ||||
| 		v = comper(hcl, ((hcl_oop_fpdec_t)x)->value, ((hcl_oop_fpdec_t)y)->value); | ||||
| 		hcl_poptmps (hcl, 2); | ||||
| 		return v; | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
| hcl_oop_t hcl_gtnums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| { | ||||
| 	return comp_nums(hcl, x, y, hcl_gtints); | ||||
| } | ||||
| hcl_oop_t hcl_genums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| { | ||||
| 	return comp_nums(hcl, x, y, hcl_geints); | ||||
| } | ||||
|  | ||||
|  | ||||
| hcl_oop_t hcl_ltnums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| { | ||||
| 	return comp_nums(hcl, x, y, hcl_ltints); | ||||
| } | ||||
| hcl_oop_t hcl_lenums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| { | ||||
| 	return comp_nums(hcl, x, y, hcl_leints); | ||||
| } | ||||
|  | ||||
|  | ||||
| hcl_oop_t hcl_eqnums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| { | ||||
| 	return comp_nums(hcl, x, y, hcl_eqints); | ||||
| } | ||||
| hcl_oop_t hcl_nenums (hcl_t* hcl, hcl_oop_t x, hcl_oop_t y) | ||||
| { | ||||
| 	return comp_nums(hcl, x, y, hcl_neints); | ||||
| } | ||||
|  | ||||
| @ -485,7 +485,7 @@ static hcl_pfrc_t pf_integer_rem (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| static hcl_pfrc_t pf_integer_gt (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| { | ||||
| 	hcl_oop_t ret; | ||||
| 	ret = hcl_gtints(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	ret = hcl_gtnums(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	if (!ret) return HCL_PF_FAILURE; | ||||
|  | ||||
| 	HCL_STACK_SETRET (hcl, nargs, ret); | ||||
| @ -496,7 +496,7 @@ static hcl_pfrc_t pf_integer_gt (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| static hcl_pfrc_t pf_integer_ge (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| { | ||||
| 	hcl_oop_t ret; | ||||
| 	ret = hcl_geints(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	ret = hcl_genums(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	if (!ret) return HCL_PF_FAILURE; | ||||
|  | ||||
| 	HCL_STACK_SETRET (hcl, nargs, ret); | ||||
| @ -506,7 +506,7 @@ static hcl_pfrc_t pf_integer_ge (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| static hcl_pfrc_t pf_integer_lt (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| { | ||||
| 	hcl_oop_t ret; | ||||
| 	ret = hcl_ltints(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	ret = hcl_ltnums(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	if (!ret) return HCL_PF_FAILURE; | ||||
|  | ||||
| 	HCL_STACK_SETRET (hcl, nargs, ret); | ||||
| @ -515,7 +515,7 @@ static hcl_pfrc_t pf_integer_lt (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| static hcl_pfrc_t pf_integer_le (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| { | ||||
| 	hcl_oop_t ret; | ||||
| 	ret = hcl_leints(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	ret = hcl_lenums(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	if (!ret) return HCL_PF_FAILURE; | ||||
|  | ||||
| 	HCL_STACK_SETRET (hcl, nargs, ret); | ||||
| @ -524,7 +524,7 @@ static hcl_pfrc_t pf_integer_le (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| static hcl_pfrc_t pf_integer_eq (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| { | ||||
| 	hcl_oop_t ret; | ||||
| 	ret = hcl_eqints(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	ret = hcl_eqnums(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	if (!ret) return HCL_PF_FAILURE; | ||||
|  | ||||
| 	HCL_STACK_SETRET (hcl, nargs, ret); | ||||
| @ -533,7 +533,7 @@ static hcl_pfrc_t pf_integer_eq (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| static hcl_pfrc_t pf_integer_ne (hcl_t* hcl, hcl_mod_t* mod, hcl_ooi_t nargs) | ||||
| { | ||||
| 	hcl_oop_t ret; | ||||
| 	ret = hcl_neints(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	ret = hcl_nenums(hcl, HCL_STACK_GETARG(hcl, nargs, 0), HCL_STACK_GETARG(hcl, nargs, 1)); | ||||
| 	if (!ret) return HCL_PF_FAILURE; | ||||
|  | ||||
| 	HCL_STACK_SETRET (hcl, nargs, ret); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user