1#ifndef CPPAD_CG_RANGE_INCLUDED
2#define CPPAD_CG_RANGE_INCLUDED
27inline void combineNonOverlapingIterationRanges(std::vector<size_t>&
iterRegions,
40 std::vector<size_t>::const_iterator
itNew;
54 CPPADCG_ASSERT_UNKNOWN(
iterRegions.size() % 2 == 0);
63inline void combineOverlapingIterationRanges(std::vector<size_t>&
iterRegions,
72 std::vector<std::pair<size_t, size_t> >
sorted;
77 std::vector<std::pair<size_t, size_t> >::iterator begin =
sorted.begin();
80 begin = std::lower_bound(begin,
sorted.end(),
p);
81 begin =
sorted.insert(begin,
p);
85 std::vector<std::pair<size_t, size_t> >
result;
88 for (
size_t i = 1;
i <
sorted.size();
i++) {
90 std::pair<size_t, size_t>&
top =
result.back();
92 if (
top.second == (std::numeric_limits<size_t>::max)())
97 if (
top.second + 1 <
curr.first) {
99 }
else if (
top.second <
curr.second) {
107 for (
size_t i = 0;
i <
result.size();
i++) {
122inline std::vector<size_t> invertIterationRanges(
const std::vector<size_t>&
iterRegions) {
126 inverted[1] = (std::numeric_limits<size_t>::max)();
130 CPPADCG_ASSERT_UNKNOWN(
iterRegions.size() % 2 == 0);
144 if (
iterRegions.back() != (std::numeric_limits<size_t>::max)()) {
146 inverted.push_back((std::numeric_limits<size_t>::max)());
163 CGOpCode
bOp =
bScope->getOperationType();
165 if (
bOp == CGOpCode::StartIf ||
bOp == CGOpCode::ElseIf) {
167 CPPADCG_ASSERT_UNKNOWN(
cond->getOperationType() == CGOpCode::IndexCondExpr);
168 CPPADCG_ASSERT_UNKNOWN(
cond->getArguments().size() == 1);
169 CPPADCG_ASSERT_UNKNOWN(
cond->getArguments()[0].getOperation() !=
nullptr);
170 CPPADCG_ASSERT_UNKNOWN(
cond->getArguments()[0].getOperation()->getOperationType() == CGOpCode::Index);
172 return cond->getInfo();
176 CPPADCG_ASSERT_UNKNOWN(
bOp == CGOpCode::Else);
183 CPPADCG_ASSERT_UNKNOWN(
cond->getOperationType() == CGOpCode::IndexCondExpr);
184 CPPADCG_ASSERT_UNKNOWN(
cond->getArguments().size() == 1);
185 CPPADCG_ASSERT_UNKNOWN(
cond->getArguments()[0].getOperation() !=
nullptr);
186 CPPADCG_ASSERT_UNKNOWN(
cond->getArguments()[0].getOperation()->getOperationType() == CGOpCode::Index);
188 CPPADCG_ASSERT_UNKNOWN(iterationIndexOp ==
nullptr || iterationIndexOp ==
indexOp);
194 }
while (
ifBranch->getOperationType() == CGOpCode::ElseIf);
196 CPPADCG_ASSERT_UNKNOWN(iterationIndexOp !=
nullptr);
bool GreaterThanZero(const cg::CG< Base > &x)