1#ifndef CPPAD_CG_COND_EXP_OP_INCLUDED
2#define CPPAD_CG_COND_EXP_OP_INCLUDED
41 const cg::CG<Base>&
right,
46 cg::CodeHandler<Base>*
lh =
left.getCodeHandler();
47 cg::CodeHandler<Base>*
rh =
right.getCodeHandler();
48 cg::CodeHandler<Base>*
th =
trueCase.getCodeHandler();
49 cg::CodeHandler<Base>*
fh =
falseCase.getCodeHandler();
51 if (!
left.isParameter()) {
53 }
else if (!
right.isParameter()) {
55 }
else if (!
trueCase.isParameter()) {
67 throw cg::CGException(
"Attempting to use different source code generation handlers in the same source code generation");
85 bool (*compare)(
const Base&,
const Base&)) {
86 using namespace CppAD::cg;
88 if (
left.isParameter() &&
right.isParameter()) {
89 if (compare(
left.getValue(),
right.getValue()))
101 CG<Base> result(*
handler->makeNode(
op,{left.argument(), right.argument(), trueCase.argument(), falseCase.argument()}));
103 if (
left.isValueDefined() &&
right.isValueDefined()) {
104 if (compare(
left.getValue(),
right.getValue())) {
128 bool (*compare)(
const Base&,
const Base&) = [](
const Base& l,
const Base &
r) {
132 return CondExp(cg::CGOpCode::ComLt,
146 bool (*
comp)(
const Base&,
const Base&) = [](
const Base& l,
const Base &
r) {
150 return CondExp(cg::CGOpCode::ComLe,
164 bool (*
comp)(
const Base&,
const Base&) = [](
const Base& l,
const Base &
r) {
168 return CondExp(cg::CGOpCode::ComEq,
182 bool (*
comp)(
const Base&,
const Base&) = [](
const Base& l,
const Base &
r) {
186 return CondExp(cg::CGOpCode::ComGe,
200 bool (*
comp)(
const Base&,
const Base&) = [](
const Base& l,
const Base &
r) {
204 return CondExp(cg::CGOpCode::ComGt,
cg::CG< Base > CondExpLt(const cg::CG< Base > &left, const cg::CG< Base > &right, const cg::CG< Base > &trueCase, const cg::CG< Base > &falseCase)
bool GreaterThanZero(const cg::CG< Base > &x)
cg::CG< Base > CondExpEq(const cg::CG< Base > &left, const cg::CG< Base > &right, const cg::CG< Base > &trueCase, const cg::CG< Base > &falseCase)
cg::CG< Base > CondExpGt(const cg::CG< Base > &left, const cg::CG< Base > &right, const cg::CG< Base > &trueCase, const cg::CG< Base > &falseCase)
cg::CG< Base > CondExpGe(const cg::CG< Base > &left, const cg::CG< Base > &right, const cg::CG< Base > &trueCase, const cg::CG< Base > &falseCase)
cg::CG< Base > CondExp(cg::CGOpCode op, const cg::CG< Base > &left, const cg::CG< Base > &right, const cg::CG< Base > &trueCase, const cg::CG< Base > &falseCase, bool(*compare)(const Base &, const Base &))
cg::CG< Base > CondExpLe(const cg::CG< Base > &left, const cg::CG< Base > &right, const cg::CG< Base > &trueCase, const cg::CG< Base > &falseCase)