Changeset 1085 for branches


Ignore:
Timestamp:
Aug 18, 2007 5:55:46 PM (12 years ago)
Author:
tkr
Message:

Moving CoinRead? routines to CoinUtils?

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

Legend:

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

    r1077 r1085  
    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"
    612#endif
    713
     
    2733#include <readline/history.h>
    2834#endif
    29 #ifdef COIN_HAS_CBC
    30 // from CoinSolve
    31 static char coin_prompt[]="Coin:";
    32 #else
    33 static char coin_prompt[]="Clp:";
    34 #endif
    3535static bool doPrinting=true;
    36 std::string afterEquals="";
    3736void setCbcOrClpPrinting(bool yesNo)
    3837{
     
    906905{
    907906  stringValue_=value;
    908 }
    909 static char line[1000];
    910 static char * where=NULL;
    911 extern int CbcOrClpRead_mode;
    912 extern FILE * CbcOrClpReadCommand;
    913 // Simple read stuff
    914 std::string
    915 CoinReadNextField()
    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 
    977 std::string
    978 CoinReadGetCommand(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 }
    1026 std::string
    1027 CoinReadGetString(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
    1052 int
    1053 CoinReadGetIntField(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 }
    1080 double
    1081 CoinReadGetDoubleField(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;
    1107907}
    1108908/*
  • branches/BSP/trunk/Clp/src/CbcOrClpParam.hpp

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

    r1077 r1085  
    33   
    44#include "CoinPragma.hpp"
     5#include "CoinRead.hpp"
    56
    67#include <cassert>
     
    6768static void generateCode(const char * fileName,int type);
    6869// Returns next valid field
    69 int CbcOrClpRead_mode=1;
    70 FILE * CbcOrClpReadCommand=stdin;
     70int ReadMode=1;
     71FILE * ReadCommand=stdin;
    7172int main (int argc, const char *argv[])
    7273{
     
    193194    while (1) {
    194195      // next command
    195       field=CoinReadGetCommand(argc,argv);
     196      field=CoinReadGetCommand(argc,argv,ReadCommand,ReadMode);
    196197     
    197198      // exit if null or similar
     
    345346        } else if (type<101) {
    346347          // get next field as double
    347           double value = CoinReadGetDoubleField(argc,argv,&valid);
     348          double value = CoinReadGetDoubleField(argc,argv,&valid,ReadCommand,
     349                                                ReadMode);
    348350          if (!valid) {
    349351            parameters[iParam].setDoubleParameter(models+iModel,value);
     
    356358        } else if (type<201) {
    357359          // get next field as int
    358           int value = CoinReadGetIntField(argc,argv,&valid);
     360          int value = CoinReadGetIntField(argc,argv,&valid,ReadCommand,
     361                                          ReadMode);
    359362          if (!valid) {
    360363            if (parameters[iParam].type()==PRESOLVEPASS)
     
    389392        } else if (type<301) {
    390393          // one of several strings
    391           std::string value = CoinReadGetString(argc,argv);
     394          std::string value = CoinReadGetString(argc,argv,ReadCommand,
     395                                                ReadMode);
    392396          int action = parameters[iParam].parameterOption(value);
    393397          if (action<0) {
     
    795799            {
    796800              // get next field
    797               field = CoinReadGetString(argc,argv);
     801              field = CoinReadGetString(argc,argv,ReadCommand,
     802                                        ReadMode);
    798803              if (field=="$") {
    799804                field = parameters[iParam].stringValue();
     
    896901                  time1=time2;
    897902                  // Go to canned file if just input file
    898                   if (CbcOrClpRead_mode==2&&argc==2) {
     903                  if (ReadMode==2&&argc==2) {
    899904                    // only if ends .mps
    900905                    char * find = (char *)strstr(fileName.c_str(),".mps");
     
    903908                      FILE *fp=fopen(fileName.c_str(),"r");
    904909                      if (fp) {
    905                         CbcOrClpReadCommand=fp; // Read from that file
    906                         CbcOrClpRead_mode=-1;
     910                        ReadCommand=fp; // Read from that file
     911                        ReadMode=-1;
    907912                      }
    908913                    }
     
    942947              }
    943948              // get next field
    944               field = CoinReadGetString(argc,argv);
     949              field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
    945950              if (field=="$") {
    946951                field = parameters[iParam].stringValue();
     
    10951100            if (goodModels[iModel]) {
    10961101              // get next field
    1097               field = CoinReadGetString(argc,argv);
     1102              field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
    10981103              if (field=="$") {
    10991104                field = parameters[iParam].stringValue();
     
    11481153            // get next field
    11491154            {
    1150               std::string name = CoinReadGetString(argc,argv);
     1155              std::string name = CoinReadGetString(argc,argv,ReadCommand,
     1156                                                   ReadMode);
    11511157              if (name!="EOL") {
    11521158                parameters[iParam].setStringValue(name);
     
    11601166            if (goodModels[iModel]) {
    11611167              // get next field
    1162               field = CoinReadGetString(argc,argv);
     1168              field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
    11631169              if (field=="$") {
    11641170                field = parameters[iParam].stringValue();
     
    12071213            {
    12081214              // get next field
    1209               field = CoinReadGetString(argc,argv);
     1215              field = CoinReadGetString(argc, argv, ReadCommand, ReadMode);
    12101216              if (field=="$") {
    12111217                field = parameters[iParam].stringValue();
     
    12851291            {
    12861292              // get next field
    1287               field = CoinReadGetString(argc,argv);
     1293              field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
    12881294              if (field=="$") {
    12891295                field = parameters[iParam].stringValue();
     
    13661372          case DIRECTORY:
    13671373            {
    1368               std::string name = CoinReadGetString(argc,argv);
     1374              std::string name = CoinReadGetString(argc,argv,ReadCommand,
     1375                                                   ReadMode);
    13691376              if (name!="EOL") {
    13701377                int length=name.length();
     
    13811388          case DIRSAMPLE:
    13821389            {
    1383               std::string name = CoinReadGetString(argc,argv);
     1390              std::string name = CoinReadGetString(argc,argv,ReadCommand,
     1391                                                   ReadMode);
    13841392              if (name!="EOL") {
    13851393                int length=name.length();
     
    13961404          case DIRNETLIB:
    13971405            {
    1398               std::string name = CoinReadGetString(argc,argv);
     1406              std::string name = CoinReadGetString(argc,argv,ReadCommand,
     1407                                                   ReadMode);
    13991408              if (name!="EOL") {
    14001409                int length=name.length();
     
    14111420          case DIRMIPLIB:
    14121421            {
    1413               std::string name = CoinReadGetString(argc,argv);
     1422               std::string name = CoinReadGetString(argc,argv,ReadCommand,
     1423                                                   ReadMode);
    14141424              if (name!="EOL") {
    14151425                int length=name.length();
     
    14251435            break;
    14261436          case STDIN:
    1427             CbcOrClpRead_mode=-1;
     1437            ReadMode=-1;
    14281438            break;
    14291439          case NETLIB_DUAL:
     
    14891499            if (goodModels[iModel]) {
    14901500              // get bound
    1491               double value = CoinReadGetDoubleField(argc,argv,&valid);
     1501              double value = CoinReadGetDoubleField(argc,argv,&valid,
     1502                                                    ReadCommand,ReadMode);
    14921503              if (!valid) {
    14931504                std::cout<<"Setting "<<parameters[iParam].name()<<
     
    15601571            if (goodModels[iModel]) {
    15611572              // get next field
    1562               field = CoinReadGetString(argc,argv);
     1573              field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
    15631574              if (field=="$") {
    15641575                field = parameters[iParam].stringValue();
     
    17901801            if (goodModels[iModel]) {
    17911802              // get next field
    1792               field = CoinReadGetString(argc,argv);
     1803              field = CoinReadGetString(argc,argv,ReadCommand,ReadMode);
    17931804              if (field=="$") {
    17941805                field = parameters[iParam].stringValue();
Note: See TracChangeset for help on using the changeset viewer.