* Implementation of GiNaC's products of expressions. */
/*
- * GiNaC Copyright (C) 1999-2009 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2010 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
case info_flags::integer_polynomial:
case info_flags::cinteger_polynomial:
case info_flags::rational_polynomial:
+ case info_flags::real:
+ case info_flags::rational:
+ case info_flags::integer:
+ case info_flags::crational:
+ case info_flags::cinteger:
+ case info_flags::positive:
+ case info_flags::nonnegative:
+ case info_flags::posint:
+ case info_flags::nonnegint:
+ case info_flags::even:
case info_flags::crational_polynomial:
case info_flags::rational_function: {
epvector::const_iterator i = seq.begin(), end = seq.end();
return false;
++i;
}
+ if (overall_coeff.is_equal(*_num1_p) && inf == info_flags::even)
+ return true;
return overall_coeff.info(inf);
}
case info_flags::algebraic: {
}
return false;
}
+ case info_flags::negative: {
+ bool neg = false;
+ epvector::const_iterator i = seq.begin(), end = seq.end();
+ while (i != end) {
+ const ex& factor = recombine_pair_to_ex(*i++);
+ if (factor.info(info_flags::positive))
+ continue;
+ else if (factor.info(info_flags::negative))
+ neg = !neg;
+ else
+ return false;
+ }
+ if (overall_coeff.info(info_flags::negative))
+ neg = !neg;
+ return neg;
+ }
+ case info_flags::negint: {
+ bool neg = false;
+ epvector::const_iterator i = seq.begin(), end = seq.end();
+ while (i != end) {
+ const ex& factor = recombine_pair_to_ex(*i++);
+ if (factor.info(info_flags::posint))
+ continue;
+ else if (factor.info(info_flags::negint))
+ neg = !neg;
+ else
+ return false;
+ }
+ if (overall_coeff.info(info_flags::negint))
+ neg = !neg;
+ else if (!overall_coeff.info(info_flags::posint))
+ return false;
+ return neg;
+ }
}
return inherited::info(inf);
}