1#ifndef CPPAD_CG_MODEL_C_SOURCE_GEN_LOOPS_FOR0_INCLUDED
2#define CPPAD_CG_MODEL_C_SOURCE_GEN_LOOPS_FOR0_INCLUDED
26std::vector<CG<Base> > prepareGraphForward0WithLoops(CodeHandler<Base>&
handler,
28 const std::vector<CG<Base>>& x,
30 const std::set<LoopModel<Base>*>&
loopTapes) {
32 using namespace loops;
34 using CGBase = CG<Base>;
36 std::vector<CGBase>
y(m);
39 std::vector<CGBase>
tmps;
50 for (
size_t e = 0;
e <
origEq.size();
e++) {
67 const std::vector<std::vector<LoopPosition> >& dependents =
lModel.getDependentIndexes();
75 std::set<IndexOperationNode<Base>*>
indexesOps;
78 std::vector<IfElseInfo<Base> > ifElses;
89 std::vector<CGBase>
yl =
lModel.getTape().Forward(0,
xl);
96 const std::vector<IndexPattern*>&
depPatterns =
lModel.getDependentIndexPatterns();
98 for (
size_t i = 0;
i <
yl.size();
i++) {
102 if (dependents[
i][
it].original < m) {
109 *iterationIndexOp, ifElses);
114 for (
size_t i = 0;
i < dependents.size();
i++) {
117 size_t e = dependents[
i][
it].original;
119 y[
e] =
handler.createCG(*
handler.makeNode(CGOpCode::DependentRefRhs,{e}, {*loopEnd}));
127 moveNonIndexedOutsideLoop(
handler, *loopStart, *loopEnd);
135 const std::vector<CGBase>& x) {
136 return prepareGraphForward0WithLoops(
handler, _fun.Range(), x, _funNoLoops, _loopTapes);
virtual std::vector< CGBase > prepareForward0WithLoops(CodeHandler< Base > &handler, const std::vector< CGBase > &x)
bool GreaterThanZero(const cg::CG< Base > &x)