Ignore:
Timestamp:
Jan 4, 2011 5:17:43 AM (9 years ago)
Author:
forrest
Message:

for user hooks and ranging/parametrics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/ClpPresolve.cpp

    r1643 r1660  
    612612#endif
    613613
    614 
    615                     // set up for next pass
    616                     // later do faster if many changes i.e. memset and memcpy
    617                     prob->numberRowsToDo_ = prob->numberNextRowsToDo_;
    618                     //int kcheck;
    619                     //bool found=false;
    620                     //kcheck=-1;
    621                     for (i = 0; i < prob->numberNextRowsToDo_; i++) {
    622                          int index = prob->nextRowsToDo_[i];
    623                          prob->unsetRowChanged(index);
    624                          prob->rowsToDo_[i] = index;
    625                          //if (index==kcheck) {
    626                          //printf("row %d on list after pass %d\n",kcheck,
    627                          //   whichPass);
    628                          //found=true;
    629                          //}
    630                     }
    631                     //if (!found&&kcheck>=0)
    632                     //prob->rowsToDo_[prob->numberRowsToDo_++]=kcheck;
    633                     prob->numberNextRowsToDo_ = 0;
    634                     prob->numberColsToDo_ = prob->numberNextColsToDo_;
    635                     //kcheck=-1;
    636                     //found=false;
    637                     for (i = 0; i < prob->numberNextColsToDo_; i++) {
    638                          int index = prob->nextColsToDo_[i];
    639                          prob->unsetColChanged(index);
    640                          prob->colsToDo_[i] = index;
    641                          //if (index==kcheck) {
    642                          //printf("col %d on list after pass %d\n",kcheck,
    643                          //   whichPass);
    644                          //found=true;
    645                          //}
    646                     }
    647                     //if (!found&&kcheck>=0)
    648                     //prob->colsToDo_[prob->numberColsToDo_++]=kcheck;
    649                     prob->numberNextColsToDo_ = 0;
     614                    {
     615                      // set up for next pass
     616                      // later do faster if many changes i.e. memset and memcpy
     617                      const int * count = prob->hinrow_;
     618                      const int * nextToDo = prob->nextRowsToDo_;
     619                      int * toDo = prob->rowsToDo_;
     620                      int nNext = prob->numberNextRowsToDo_;
     621                      int n = 0;
     622                      for (int i = 0; i < nNext; i++) {
     623                        int index = nextToDo[i];
     624                        prob->unsetRowChanged(index);
     625                        if (count[index])
     626                          toDo[n++] = index;
     627                      }
     628                      prob->numberRowsToDo_ = n;
     629                      prob->numberNextRowsToDo_ = 0;
     630                      count = prob->hincol_;
     631                      nextToDo = prob->nextColsToDo_;
     632                      toDo = prob->colsToDo_;
     633                      nNext = prob->numberNextColsToDo_;
     634                      n = 0;
     635                      for (int i = 0; i < nNext; i++) {
     636                        int index = nextToDo[i];
     637                        prob->unsetColChanged(index);
     638                        if (count[index])
     639                          toDo[n++] = index;
     640                      }
     641                      prob->numberColsToDo_ = n;
     642                      prob->numberNextColsToDo_ = 0;
     643                    }
    650644                    if (paction_ == paction1 && fill_level > 0)
    651645                         break;
     
    654648               int i;
    655649               if (!prob->anyProhibited()) {
    656                     for (i = 0; i < nrows_; i++)
    657                          prob->rowsToDo_[i] = i;
    658                     prob->numberRowsToDo_ = nrows_;
    659                     for (i = 0; i < ncols_; i++)
    660                          prob->colsToDo_[i] = i;
    661                     prob->numberColsToDo_ = ncols_;
     650                 const int * count = prob->hinrow_;
     651                 int * toDo = prob->rowsToDo_;
     652                 int n = 0;
     653                 for (int i = 0; i < nrows_; i++) {
     654                   prob->unsetRowChanged(i);
     655                   if (count[i])
     656                     toDo[n++] = i;
     657                 }
     658                 prob->numberRowsToDo_ = n;
     659                 prob->numberNextRowsToDo_ = 0;
     660                 count = prob->hincol_;
     661                 toDo = prob->colsToDo_;
     662                 n = 0;
     663                 for (int i = 0; i < ncols_; i++) {
     664                   prob->unsetColChanged(i);
     665                   if (count[i])
     666                     toDo[n++] = i;
     667                 }
     668                 prob->numberColsToDo_ = n;
     669                 prob->numberNextColsToDo_ = 0;
    662670               } else {
    663671                    // some stuff must be left alone
Note: See TracChangeset for help on using the changeset viewer.