This commit is contained in:
Evan Klinger 1999-12-21 06:11:52 +00:00
parent 06ab44337f
commit 8306501e48

View file

@ -67,34 +67,34 @@ PHP_RSHUTDOWN_FUNCTION(bcmath)
Returns the sum of two arbitrary precision numbers */ Returns the sum of two arbitrary precision numbers */
PHP_FUNCTION(bcadd) PHP_FUNCTION(bcadd)
{ {
pval *left, *right,*scale_param; pval **left, **right,**scale_param;
bc_num first, second, result; bc_num first, second, result;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &left, &right, &scale_param) == FAILURE) { if (zend_get_parameters_ex(3, &left,&right, &scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
init_num(&result); init_num(&result);
str2num(&first,left->value.str.val,scale); str2num(&first,(*left)->value.str.val,scale);
str2num(&second,right->value.str.val,scale); str2num(&second,(*right)->value.str.val,scale);
bc_add (first,second,&result, scale); bc_add (first,second,&result, scale);
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
return_value->value.str.len = strlen(return_value->value.str.val); return_value->value.str.len = strlen(return_value->value.str.val);
@ -110,34 +110,34 @@ PHP_FUNCTION(bcadd)
Returns the difference between two arbitrary precision numbers (subtration) */ Returns the difference between two arbitrary precision numbers (subtration) */
PHP_FUNCTION(bcsub) PHP_FUNCTION(bcsub)
{ {
pval *left, *right,*scale_param; pval **left, **right,**scale_param;
bc_num first, second, result; bc_num first, second, result;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &left, &right, &scale_param) == FAILURE) { if (zend_get_parameters_ex(3, &left,&right, &scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
init_num(&result); init_num(&result);
str2num(&first,left->value.str.val,scale); str2num(&first,(*left)->value.str.val,scale);
str2num(&second,right->value.str.val,scale); str2num(&second,(*right)->value.str.val,scale);
bc_sub (first,second,&result, scale); bc_sub (first,second,&result, scale);
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
return_value->value.str.len = strlen(return_value->value.str.val); return_value->value.str.len = strlen(return_value->value.str.val);
@ -153,34 +153,34 @@ PHP_FUNCTION(bcsub)
Returns the multiplication of two arbitrary precision numbers */ Returns the multiplication of two arbitrary precision numbers */
PHP_FUNCTION(bcmul) PHP_FUNCTION(bcmul)
{ {
pval *left, *right,*scale_param; pval **left, **right,**scale_param;
bc_num first, second, result; bc_num first, second, result;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &left, &right, &scale_param) == FAILURE) { if (zend_get_parameters_ex(3, &left,&right, &scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
init_num(&result); init_num(&result);
str2num(&first,left->value.str.val,scale); str2num(&first,(*left)->value.str.val,scale);
str2num(&second,right->value.str.val,scale); str2num(&second,(*right)->value.str.val,scale);
bc_multiply (first,second,&result, scale); bc_multiply (first,second,&result, scale);
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
return_value->value.str.len = strlen(return_value->value.str.val); return_value->value.str.len = strlen(return_value->value.str.val);
@ -196,34 +196,34 @@ PHP_FUNCTION(bcmul)
Returns the quotient of two arbitrary precision numbers (division) */ Returns the quotient of two arbitrary precision numbers (division) */
PHP_FUNCTION(bcdiv) PHP_FUNCTION(bcdiv)
{ {
pval *left, *right,*scale_param; pval **left, **right,**scale_param;
bc_num first, second, result; bc_num first, second, result;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &left, &right, &scale_param) == FAILURE) { if (zend_get_parameters_ex(3, &left,&right, &scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
init_num(&result); init_num(&result);
str2num(&first,left->value.str.val,scale); str2num(&first,(*left)->value.str.val,scale);
str2num(&second,right->value.str.val,scale); str2num(&second,(*right)->value.str.val,scale);
switch (bc_divide (first,second,&result, scale)) { switch (bc_divide (first,second,&result, scale)) {
case 0: /* OK */ case 0: /* OK */
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
@ -245,12 +245,12 @@ PHP_FUNCTION(bcdiv)
Returns the modulus of the two arbitrary precision operands */ Returns the modulus of the two arbitrary precision operands */
PHP_FUNCTION(bcmod) PHP_FUNCTION(bcmod)
{ {
pval *left, *right; pval **left, **right;
bc_num first, second, result; bc_num first, second, result;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
@ -258,13 +258,13 @@ PHP_FUNCTION(bcmod)
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
init_num(&result); init_num(&result);
str2num(&first,left->value.str.val,0); str2num(&first,(*left)->value.str.val,0);
str2num(&second,right->value.str.val,0); str2num(&second,(*right)->value.str.val,0);
switch (bc_modulo(first,second,&result, 0)) { switch (bc_modulo(first,second,&result, 0)) {
case 0: case 0:
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
@ -286,34 +286,34 @@ PHP_FUNCTION(bcmod)
Returns the value of an arbitrary precision number raised to the power of another */ Returns the value of an arbitrary precision number raised to the power of another */
PHP_FUNCTION(bcpow) PHP_FUNCTION(bcpow)
{ {
pval *left, *right,*scale_param; pval **left, **right,**scale_param;
bc_num first, second, result; bc_num first, second, result;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &left, &right, &scale_param) == FAILURE) { if (zend_get_parameters_ex(3, &left,&right, &scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
init_num(&result); init_num(&result);
str2num(&first,left->value.str.val,scale); str2num(&first,(*left)->value.str.val,scale);
str2num(&second,right->value.str.val,scale); str2num(&second,(*right)->value.str.val,scale);
bc_raise (first,second,&result, scale); bc_raise (first,second,&result, scale);
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
return_value->value.str.len = strlen(return_value->value.str.val); return_value->value.str.len = strlen(return_value->value.str.val);
@ -329,30 +329,30 @@ PHP_FUNCTION(bcpow)
Returns the square root of an arbitray precision number */ Returns the square root of an arbitray precision number */
PHP_FUNCTION(bcsqrt) PHP_FUNCTION(bcsqrt)
{ {
pval *left,*scale_param; pval **left,**scale_param;
bc_num result; bc_num result;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 1: case 1:
if (zend_get_parameters(ht, 1, &left) == FAILURE) { if (zend_get_parameters_ex(1, &left)== FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &scale_param) == FAILURE) { if (zend_get_parameters_ex(2, &left,&scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
init_num(&result); init_num(&result);
str2num(&result,left->value.str.val,scale); str2num(&result,(*left)->value.str.val,scale);
if (bc_sqrt (&result, scale) != 0) { if (bc_sqrt (&result, scale) != 0) {
return_value->value.str.val = num2str(result); return_value->value.str.val = num2str(result);
return_value->value.str.len = strlen(return_value->value.str.val); return_value->value.str.len = strlen(return_value->value.str.val);
@ -369,35 +369,35 @@ PHP_FUNCTION(bcsqrt)
Compares two arbitrary precision numbers */ Compares two arbitrary precision numbers */
PHP_FUNCTION(bccomp) PHP_FUNCTION(bccomp)
{ {
pval *left, *right, *scale_param; pval **left, **right, **scale_param;
bc_num first, second; bc_num first, second;
int scale=bc_precision; int scale=bc_precision;
switch (ARG_COUNT(ht)) { switch (ARG_COUNT(ht)) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &left, &right) == FAILURE) { if (zend_get_parameters_ex(2, &left,&right) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &left, &right, &scale_param) == FAILURE) { if (zend_get_parameters_ex(3, &left,&right, &scale_param) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(scale_param); convert_to_long_ex(scale_param);
scale = (int) scale_param->value.lval; scale = (int) (*scale_param)->value.lval;
break; break;
default: default:
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
break; break;
} }
convert_to_string(left); convert_to_string_ex(left);
convert_to_string(right); convert_to_string_ex(right);
init_num(&first); init_num(&first);
init_num(&second); init_num(&second);
str2num(&first,left->value.str.val,scale); str2num(&first,(*left)->value.str.val,scale);
str2num(&second,right->value.str.val,scale); str2num(&second,(*right)->value.str.val,scale);
return_value->value.lval = bc_compare(first,second); return_value->value.lval = bc_compare(first,second);
return_value->type = IS_LONG; return_value->type = IS_LONG;
@ -411,14 +411,14 @@ PHP_FUNCTION(bccomp)
Sets default scale parameter for all bc math functions */ Sets default scale parameter for all bc math functions */
PHP_FUNCTION(bcscale) PHP_FUNCTION(bcscale)
{ {
pval *new_scale; pval **new_scale;
if (ARG_COUNT(ht)!=1 || zend_get_parameters(ht, 1, &new_scale)==FAILURE) { if (ARG_COUNT(ht)!=1 || zend_get_parameters_ex(1,&new_scale)==FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(new_scale); convert_to_long_ex(new_scale);
bc_precision = new_scale->value.lval; bc_precision = (*new_scale)->value.lval;
RETURN_TRUE; RETURN_TRUE;
} }
/* }}} */ /* }}} */