/home/coin/Smi-0.5.1/Smi/src/SmiSmpsIO.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2003, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 
00004 #ifndef SmiSmpsIO_HPP
00005 #define SmiSmpsIO_HPP
00006 
00007 #if defined(_MSC_VER)
00008 // Turn off compiler warning about long names
00009 #  pragma warning(disable:4786)
00010 #endif
00011 
00012 #include "CoinMpsIO.hpp"
00013 #include "CoinFileIO.hpp"
00014 #include "SmiScnModel.hpp"
00015 #include "SmiScnData.hpp"
00016 #include "SmiScenarioTree.hpp"
00017 
00018 #include <vector>
00019 #include <map>
00020 #include <string>
00021 
00022 using namespace std;
00023 
00024 
00025 // sections
00026 enum SmiSectionType { SMI_NO_SECTION, SMI_NAME_SECTION,
00027                                           SMI_ENDATA_SECTION, 
00028                                         SMI_EOF_SECTION, 
00029                                           SMI_TIME_SECTION, 
00030                                         SMI_SCENARIOS_SECTION, 
00031                                         SMI_INDEPENDENT_SECTION,
00032                                           SMI_UNKNOWN_SECTION
00033 };
00034 
00035 enum SmiSmpsType { SMI_SC_CARD, SMI_COLUMN_CARD, SMI_DISCRETE_DIST, SMI_SMPS_COMBINE_ADD, 
00036         SMI_SMPS_COMBINE_REPLACE, SMI_SMPS_COMBINE_UNKNOWN, SMI_UNKNOWN_MPS_TYPE,
00037         SMI_TIME_UNORDERED_CORE_TYPE, SMI_TIME_ORDERED_CORE_TYPE
00038 };
00039 
00040 class SmiSmpsCardReader:
00041 public CoinMpsCardReader
00042 {
00043 public:
00044           SmiSectionType nextSmpsField (  );
00045           SmiSectionType whichSmpsSection(){return smiSection_;}
00046             
00047           SmiSmpsType whichSmpsType() {return smiSmpsType_;}
00048         
00049           inline const char *periodName (  ) const {return periodName_;};
00050           inline const char *scenarioNew (  ) const {return columnName_;};
00051           inline const char *scenarioAnc (  ) const {return rowName_;};
00052 
00053           inline void setCoreCombineRule(SmiCoreCombineRule *r){combineRule_=r;combineRuleSet=true;}
00054           inline SmiCoreCombineRule *getCoreCombineRule() { return combineRule_;}
00055 
00058           SmiSmpsCardReader( CoinFileInput *input, CoinMpsIO * reader ):CoinMpsCardReader (input,reader ),
00059                 combineRuleSet(false){}
00060 
00061           ~SmiSmpsCardReader(){}
00062 private:
00064         char periodName_[COIN_MAX_FIELD_LENGTH];
00065         float fvalue_;
00066         SmiSectionType smiSection_;
00067         SmiSmpsType smiSmpsType_;
00068         SmiCoreCombineRule *combineRule_;
00069         bool combineRuleSet;
00070 };
00071 
00072 class SmiSmpsIO: 
00073 public CoinMpsIO
00074 {
00075 public:
00076         SmiCoreData * readTimeFile(SmiScnModel *smi,const char *c,const char *ext="time");
00077         int readStochFile(SmiScnModel *smi,SmiCoreData *core, const char *c,const char *ext="stoch");
00078     
00079         inline void setCoreCombineRule(SmiCoreCombineRule *r){combineRule_=r; combineRuleSet=true;}
00080     inline SmiCoreCombineRule *getCoreCombineRule() { return combineRule_;}
00081         inline int getNumStages(){ return nstag_;}
00082         inline int *getColumnStages(){ return cstag_;}
00083         inline int *getRowStages(){ return rstag_;}     
00084 public:
00085         SmiSmpsIO():CoinMpsIO(),nstag_(0),cstag_(NULL),rstag_(NULL),iftime(false),combineRuleSet(false){}
00086         ~SmiSmpsIO(){delete [] cstag_;delete[] rstag_;}
00087 private:
00088         int nstag_;
00089         int *cstag_;
00090         int *rstag_;
00091         typedef         std::map<string,int> StringIntMap;
00092         StringIntMap periodMap_;
00093         StringIntMap scenarioMap_;
00094         bool iftime,ifstoch;
00095         SmiSmpsCardReader *smpsCardReader_;
00096         SmiCoreCombineRule *combineRule_;
00097         bool combineRuleSet;
00098         
00099 };
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108 
00109 #endif //#define SmiSmpsIO_HPP

Generated on Wed Aug 22 06:52:36 2007 by  doxygen 1.4.7