1 #ifndef CPPAD_CG_CODE_HANDLER_LOOPS_INCLUDED 2 #define CPPAD_CG_CODE_HANDLER_LOOPS_INCLUDED 22 const std::map<size_t, LoopModel<Base>*>& CodeHandler<Base>::getLoops()
const {
23 return _loops.loopModels;
27 inline LoopModel<Base>* CodeHandler<Base>::getLoop(
size_t loopId)
const {
28 return _loops.getLoop(loopId);
32 inline size_t CodeHandler<Base>::addLoopDependentIndexPattern(IndexPattern& jacPattern) {
33 return _loops.addDependentIndexPattern(jacPattern);
37 inline void CodeHandler<Base>::manageLoopDependentIndexPattern(
const IndexPattern* pattern) {
38 _loops.manageDependentIndexPattern(pattern);
42 inline size_t CodeHandler<Base>::addLoopIndependentIndexPattern(IndexPattern& pattern,
44 return _loops.addIndependentIndexPattern(pattern, hint);
48 inline void CodeHandler<Base>::LoopData::prepare4NewSourceGen() {
50 indexRandomPatterns.clear();
53 startEvalOrder.clear();
56 endNodes.reserve(loopModels.size());
60 inline void CodeHandler<Base>::LoopData::reset() {
63 indexRandomPatterns.clear();
64 dependentIndexPatterns.clear();
65 independentIndexPatterns.clear();
68 for (
const IndexPattern* itip : dependentIndexPatternManaged) {
71 dependentIndexPatternManaged.clear();
76 typename std::map<size_t, LoopModel<Base>*>::const_iterator it;
77 it = loopModels.find(
id);
78 if (it != loopModels.end())
79 return &(it->second->atomic_name());
91 typename std::map<size_t, LoopModel<Base>*>::const_iterator it = loopModels.find(loopId);
92 if (it != loopModels.end()) {
101 size_t size = dependentIndexPatterns.size();
102 if (dependentIndexPatterns.capacity() == size) {
103 dependentIndexPatterns.reserve((size * 3) / 2 + 1);
105 dependentIndexPatterns.push_back(&pattern);
112 size_t sizeM = dependentIndexPatternManaged.size();
113 if (dependentIndexPatternManaged.capacity() == sizeM) {
114 dependentIndexPatternManaged.reserve((sizeM * 3) / 2 + 1);
116 dependentIndexPatternManaged.push_back(pattern);
121 size_t size = independentIndexPatterns.size();
122 if (hint < size && independentIndexPatterns[hint] == &pattern) {
125 if (independentIndexPatterns.capacity() == size) {
126 independentIndexPatterns.reserve((size * 3) / 2 + 1);
128 independentIndexPatterns.push_back(&pattern);
137 endNodes.push_back(&loopEnd);
const std::string * getLoopName(size_t id) const
CGOpCode getOperationType() const