int main( int argc, char *argv[]) { Environment::initialize("calculator.log", AXIS2_LOG_LEVEL_TRACE); string endpointUri = "http://localhost:9090/axis2/services/Calculator"; string clientHome = AXIS2_GETENV("WSFCPP_HOME"); if(clientHome.empty()) { cout<<"Please set the WSFCPP_HOME environment variable"<<endl; } CalculatorStub *stub = new CalculatorStub(clientHome, endpointUri); Add *addIn = new Add(); addIn->setA(10); addIn->setB(10); AddResponse *addResponse = stub->add(addIn); if(addResponse) { cout<<"Calculation, 10 + 10 result is "<<addResponse->getAddReturn()<<endl; } Sub *subIn = new Sub(); subIn->setA(20); subIn->setB(10); SubResponse *subResponse = stub->sub(subIn); if(subResponse) { cout<<"Calculation, 20 - 10 result is "<<subResponse->getSubReturn()<<endl; } Mul *mulIn = new Mul(); mulIn->setA(15); mulIn->setB(15); MulResponse *mulResponse = stub->mul(mulIn); if(mulResponse) { cout<<"Calculation, 15 * 15 result is "<<mulResponse->getMulReturn() <<endl; } Div *divIn = new Div(); divIn->setA(100); divIn->setB(10); DivResponse *divResponse = stub->div(divIn); if(divResponse) { cout<<"Calculation, 100/10 result is "<<divResponse->getDivReturn()<<endl; } delete stub; }
void bvisit(const Mul &x) { RCP<const Basic> curr_num = one; RCP<const Basic> curr_den = one; RCP<const Basic> arg_num, arg_den, t; for (const auto &arg : x.get_args()) { as_numer_denom(arg, outArg(arg_num), outArg(arg_den)); // TODO: This is naive and slow. Fix it t = div(curr_num, arg_den); if (neq(*t, x)) { as_numer_denom(t, outArg(curr_num), outArg(arg_den)); } t = div(curr_den, arg_num); if (neq(*t, x)) { as_numer_denom(t, outArg(curr_den), outArg(arg_num)); } curr_num = mul(curr_num, arg_num); curr_den = mul(curr_den, arg_den); } *numer_ = curr_num; *denom_ = curr_den; }
void bvisit(const Mul &x) { mpfr_class t(mpfr_get_prec(result_)); auto d = x.get_args(); auto p = d.begin(); apply(result_, *(*p)); p++; for (; p != d.end(); p++) { apply(t.get_mpfr_t(), *(*p)); mpfr_mul(result_, result_, t.get_mpfr_t(), rnd_); } }