Changeset 1086 for branches


Ignore:
Timestamp:
Aug 18, 2007 8:20:50 PM (12 years ago)
Author:
andreasw
Message:

unded [1085]

Location:
branches/BSP/trunk/Clp/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/BSP/trunk/Clp/src/CbcOrClpParam.cpp

    r1085 r1086  
    44// Turn off compiler warning about long names
    55#  pragma warning(disable:4786)
    6 #endif
    7 
    8 #ifdef USE_CBCCONFIG
    9 # include "CbcConfig.h"
    10 #else
    11 # include "ClpConfig.h"
    126#endif
    137
     
    3327#include <readline/history.h>
    3428#endif
     29#ifdef COIN_HAS_CBC
     30// from CoinSolve
     31static char coin_prompt[]="Coin:";
     32#else
     33static char coin_prompt[]="Clp:";
     34#endif
    3535static bool doPrinting=true;
     36std::string afterEquals="";
    3637void setCbcOrClpPrinting(bool yesNo)
    3738{
     
    905906{
    906907  stringValue_=value;
     908}
     909static char line[1000];
     910static char * where=NULL;
     911extern int CbcOrClpRead_mode;
     912extern FILE * CbcOrClpReadCommand;
     913// Simple read stuff
     914std::string
     915CoinReadNextField()
     916{
     917  std::string field;
     918  if (!where) {
     919    // need new line
     920#ifdef COIN_HAS_READLINE     
     921    if (CbcOrClpReadCommand==stdin) {
     922      // Get a line from the user.
     923      where = readline (coin_prompt);
     924     
     925      // If the line has any text in it, save it on the history.
     926      if (where) {
     927        if ( *where)
     928          add_history (where);
     929        strcpy(line,where);
     930        free(where);
     931      }
     932    } else {
     933      where = fgets(line,1000,CbcOrClpReadCommand);
     934    }
     935#else
     936    if (CbcOrClpReadCommand==stdin) {
     937      fprintf(stdout,coin_prompt);
     938      fflush(stdout);
     939    }
     940    where = fgets(line,1000,CbcOrClpReadCommand);
     941#endif
     942    if (!where)
     943      return field; // EOF
     944    where = line;
     945    // clean image
     946    char * lastNonBlank = line-1;
     947    while ( *where != '\0' ) {
     948      if ( *where != '\t' && *where < ' ' ) {
     949        break;
     950      } else if ( *where != '\t' && *where != ' ') {
     951        lastNonBlank = where;
     952      }
     953      where++;
     954    }
     955    where=line;
     956    *(lastNonBlank+1)='\0';
     957  }
     958  // munch white space
     959  while(*where==' '||*where=='\t')
     960    where++;
     961  char * saveWhere = where;
     962  while (*where!=' '&&*where!='\t'&&*where!='\0')
     963    where++;
     964  if (where!=saveWhere) {
     965    char save = *where;
     966    *where='\0';
     967    //convert to string
     968    field=saveWhere;
     969    *where=save;
     970  } else {
     971    where=NULL;
     972    field="EOL";
     973  }
     974  return field;
     975}
     976
     977std::string
     978CoinReadGetCommand(int argc, const char *argv[])
     979{
     980  std::string field="EOL";
     981  // say no =
     982  afterEquals="";
     983  while (field=="EOL") {
     984    if (CbcOrClpRead_mode>0) {
     985      if (CbcOrClpRead_mode<argc) {
     986        field = argv[CbcOrClpRead_mode++];
     987        if (field=="-") {
     988          std::cout<<"Switching to line mode"<<std::endl;
     989          CbcOrClpRead_mode=-1;
     990          field=CoinReadNextField();
     991        } else if (field[0]!='-') {
     992          if (CbcOrClpRead_mode!=2) {
     993            // now allow std::cout<<"skipping non-command "<<field<<std::endl;
     994            // field="EOL"; // skip
     995          } else {
     996            // special dispensation - taken as -import name
     997            CbcOrClpRead_mode--;
     998            field="import";
     999          }
     1000        } else {
     1001          if (field!="--") {
     1002            // take off -
     1003            field = field.substr(1);
     1004          } else {
     1005            // special dispensation - taken as -import --
     1006            CbcOrClpRead_mode--;
     1007            field="import";
     1008          }
     1009        }
     1010      } else {
     1011        field="";
     1012      }
     1013    } else {
     1014      field=CoinReadNextField();
     1015    }
     1016  }
     1017  // if = then modify and save
     1018  std::string::size_type found = field.find('=');
     1019  if (found!=std::string::npos) {
     1020    afterEquals = field.substr(found+1);
     1021    field = field.substr(0,found);
     1022  }
     1023  //std::cout<<field<<std::endl;
     1024  return field;
     1025}
     1026std::string
     1027CoinReadGetString(int argc, const char *argv[])
     1028{
     1029  std::string field="EOL";
     1030  if (afterEquals=="") {
     1031    if (CbcOrClpRead_mode>0) {
     1032      if (CbcOrClpRead_mode<argc) {
     1033        if (argv[CbcOrClpRead_mode][0]!='-') {
     1034          field = argv[CbcOrClpRead_mode++];
     1035        } else if (!strcmp(argv[CbcOrClpRead_mode],"--")) {
     1036          field = argv[CbcOrClpRead_mode++];
     1037          // -- means import from stdin
     1038          field = "-";
     1039        }
     1040      }
     1041    } else {
     1042      field=CoinReadNextField();
     1043    }
     1044  } else {
     1045    field=afterEquals;
     1046    afterEquals = "";
     1047  }
     1048  //std::cout<<field<<std::endl;
     1049  return field;
     1050}
     1051// valid 0 - okay, 1 bad, 2 not there
     1052int
     1053CoinReadGetIntField(int argc, const char *argv[],int * valid)
     1054{
     1055  std::string field="EOL";
     1056  if (afterEquals=="") {
     1057    if (CbcOrClpRead_mode>0) {
     1058      if (CbcOrClpRead_mode<argc) {
     1059        // may be negative value so do not check for -
     1060        field = argv[CbcOrClpRead_mode++];
     1061      }
     1062    } else {
     1063      field=CoinReadNextField();
     1064    }
     1065  } else {
     1066    field=afterEquals;
     1067    afterEquals = "";
     1068  }
     1069  int value=0;
     1070  //std::cout<<field<<std::endl;
     1071  if (field!="EOL") {
     1072    // how do I check valid
     1073    value =  atoi(field.c_str());
     1074    *valid=0;
     1075  } else {
     1076    *valid=2;
     1077  }
     1078  return value;
     1079}
     1080double
     1081CoinReadGetDoubleField(int argc, const char *argv[],int * valid)
     1082{
     1083  std::string field="EOL";
     1084  if (afterEquals=="") {
     1085    if (CbcOrClpRead_mode>0) {
     1086      if (CbcOrClpRead_mode<argc) {
     1087        // may be negative value so do not check for -
     1088        field = argv[CbcOrClpRead_mode++];
     1089      }
     1090    } else {
     1091      field=CoinReadNextField();
     1092    }
     1093  } else {
     1094    field=afterEquals;
     1095    afterEquals = "";
     1096  }
     1097  double value=0.0;
     1098  //std::cout<<field<<std::endl;
     1099  if (field!="EOL") {
     1100    // how do I check valid
     1101    value = atof(field.c_str());
     1102    *valid=0;
     1103  } else {
     1104    *valid=2;
     1105  }
     1106  return value;
    9071107}
    9081108/*
  • branches/BSP/trunk/Clp/src/CbcOrClpParam.hpp

    r1085 r1086  
    261261  //@}
    262262};
     263/// Simple read stuff
     264std::string CoinReadNextField();
     265
     266std::string CoinReadGetCommand(int argc, const char *argv[]);
     267std::string CoinReadGetString(int argc, const char *argv[]);
     268// valid 0 - okay, 1 bad, 2 not there
     269int CoinReadGetIntField(int argc, const char *argv[],int * valid);
     270double CoinReadGetDoubleField(int argc, const char *argv[],int * valid);
     271void CoinReadPrintit(const char * input);
    263272void setCbcOrClpPrinting(bool yesNo);
    264273#define CBCMAXPARAMETERS 200
  • branches/BSP/trunk/Clp/src/ClpMain.cpp

    r1085 r1086  
    33   
    44#include "CoinPragma.hpp"
    5 #include "CoinRead.hpp"
    65
    76#include <cassert>
     
    6867static void generateCode(const char * fileName,int type);
    6968// Returns next valid field
    70 int ReadMode=1;
    71 FILE * ReadCommand=stdin;
     69int CbcOrClpRead_mode=1;
     70FILE * CbcOrClpReadCommand=stdin;
    7271int main (int argc, const char *argv[])
    7372{
     
    194193    while (1) {
    195194      // next command
    196       field=CoinReadGetCommand(argc,argv,ReadCommand,ReadMode);
     195      field=CoinReadGetCommand(argc,argv);
    197196     
    198197      // exit if null or similar
     
    346345        } else if (type<101) {
    347346          // get next field as double
    348           double value = CoinReadGetDoubleField(argc,argv,&valid,ReadCommand,
    349                                                 ReadMode);
     347          double value = CoinReadGetDoubleField(argc,argv,&valid);
    350348          if (!valid) {
    351349            parameters[iParam].setDoubleParameter(models+iModel,value);
     
    358356        } else if (type<201) {
    359357          // get next field as int
    360           int value = CoinReadGetIntField(argc,argv,&valid,ReadCommand,
    361                                           ReadMode);
     358          int value = CoinReadGetIntField(argc,argv,&valid);
    362359          if (!valid) {
    363360            if (parameters[iParam].type()==PRESOLVEPASS)
     
    392389        } else if (type<301) {
    393390          // one of several strings
    394           std::string value = CoinReadGetString(argc,argv,ReadCommand,
    395                                                 ReadMode);
     391          std::string value = CoinReadGetString(argc,argv);
    396392          int action = parameters[iParam].parameterOption(value);
    397393          if (action<0) {
     
    799795            {
    800796              // get next field
    801               field = CoinReadGetString(argc,argv,ReadCommand,
    802                                         ReadMode);
     797              field = CoinReadGetString(argc,argv);
    803798              if (field=="$") {
    804799                field = parameters[iParam].stringValue();
     
    901896                  time1=time2;
    902897                  // Go to canned file if just input file
    903                   if (ReadMode==2&&argc==2) {
     898                  if (CbcOrClpRead_mode==2&&argc==2) {
    904899                    // only if ends .mps
    905900                    char * find = (char *)strstr(fileName.c_str(),".mps");
     
    908903                      FILE *fp=fopen(fileName.c_str(),"r");
    909904                      if (fp) {
    910                         ReadCommand=fp; // Read from that file
    911                         ReadMode=-1;
     905                        CbcOrClpReadCommand=fp; // Read from that file
     906                        CbcOrClpRead_mode=-1;
    912907                      }
    913908                    }
     
    947942              }
    948943              // get next field
    949               field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
     944              field = CoinReadGetString(argc,argv);
    950945              if (field=="$") {
    951946                field = parameters[iParam].stringValue();
     
    11001095            if (goodModels[iModel]) {
    11011096              // get next field
    1102               field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
     1097              field = CoinReadGetString(argc,argv);
    11031098              if (field=="$") {
    11041099                field = parameters[iParam].stringValue();
     
    11531148            // get next field
    11541149            {
    1155               std::string name = CoinReadGetString(argc,argv,ReadCommand,
    1156                                                    ReadMode);
     1150              std::string name = CoinReadGetString(argc,argv);
    11571151              if (name!="EOL") {
    11581152                parameters[iParam].setStringValue(name);
     
    11661160            if (goodModels[iModel]) {
    11671161              // get next field
    1168               field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
     1162              field = CoinReadGetString(argc,argv);
    11691163              if (field=="$") {
    11701164                field = parameters[iParam].stringValue();
     
    12131207            {
    12141208              // get next field
    1215               field = CoinReadGetString(argc, argv, ReadCommand, ReadMode);
     1209              field = CoinReadGetString(argc,argv);
    12161210              if (field=="$") {
    12171211                field = parameters[iParam].stringValue();
     
    12911285            {
    12921286              // get next field
    1293               field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
     1287              field = CoinReadGetString(argc,argv);
    12941288              if (field=="$") {
    12951289                field = parameters[iParam].stringValue();
     
    13721366          case DIRECTORY:
    13731367            {
    1374               std::string name = CoinReadGetString(argc,argv,ReadCommand,
    1375                                                    ReadMode);
     1368              std::string name = CoinReadGetString(argc,argv);
    13761369              if (name!="EOL") {
    13771370                int length=name.length();
     
    13881381          case DIRSAMPLE:
    13891382            {
    1390               std::string name = CoinReadGetString(argc,argv,ReadCommand,
    1391                                                    ReadMode);
     1383              std::string name = CoinReadGetString(argc,argv);
    13921384              if (name!="EOL") {
    13931385                int length=name.length();
     
    14041396          case DIRNETLIB:
    14051397            {
    1406               std::string name = CoinReadGetString(argc,argv,ReadCommand,
    1407                                                    ReadMode);
     1398              std::string name = CoinReadGetString(argc,argv);
    14081399              if (name!="EOL") {
    14091400                int length=name.length();
     
    14201411          case DIRMIPLIB:
    14211412            {
    1422                std::string name = CoinReadGetString(argc,argv,ReadCommand,
    1423                                                    ReadMode);
     1413              std::string name = CoinReadGetString(argc,argv);
    14241414              if (name!="EOL") {
    14251415                int length=name.length();
     
    14351425            break;
    14361426          case STDIN:
    1437             ReadMode=-1;
     1427            CbcOrClpRead_mode=-1;
    14381428            break;
    14391429          case NETLIB_DUAL:
     
    14991489            if (goodModels[iModel]) {
    15001490              // get bound
    1501               double value = CoinReadGetDoubleField(argc,argv,&valid,
    1502                                                     ReadCommand,ReadMode);
     1491              double value = CoinReadGetDoubleField(argc,argv,&valid);
    15031492              if (!valid) {
    15041493                std::cout<<"Setting "<<parameters[iParam].name()<<
     
    15711560            if (goodModels[iModel]) {
    15721561              // get next field
    1573               field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
     1562              field = CoinReadGetString(argc,argv);
    15741563              if (field=="$") {
    15751564                field = parameters[iParam].stringValue();
     
    18011790            if (goodModels[iModel]) {
    18021791              // get next field
    1803               field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
     1792              field = CoinReadGetString(argc,argv);
    18041793              if (field=="$") {
    18051794                field = parameters[iParam].stringValue();
Note: See TracChangeset for help on using the changeset viewer.