/home/coin/SVN-release/OS-1.0.0/OS/src/OSCommonInterfaces/OSiLWriter.cpp

Go to the documentation of this file.
00001 
00017 #include "OSiLWriter.h"
00018 #include "OSInstance.h"
00019 #include "OSParameters.h" 
00020 #include "CommonUtil.h"
00021 #include "Base64.h"
00022 
00023 #include <sstream>  
00024 
00025 using std::cout;
00026 using std::endl;
00027 using std::ostringstream; 
00028 
00029 OSiLWriter::OSiLWriter( ) {     
00030         m_bWriteBase64 = false;
00031         m_bWhiteSpace = false;
00032 }
00033 
00034 OSiLWriter::~OSiLWriter(){
00035 }
00036 
00037 std::string OSiLWriter::writeOSiL( OSInstance *theosinstance){
00038         m_OSInstance = theosinstance;
00039         ostringstream outStr;
00040         int i, j;
00041         if(m_OSInstance == NULL)  return outStr.str();
00042         outStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ;
00043         outStr << "<osil xmlns=\"os.optimizationservices.org\"   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/OSiL.xsd\" >" ;
00044         outStr << "<instanceHeader>" ;
00045         if( m_bWhiteSpace == true) outStr << endl;
00046         if(m_OSInstance->instanceHeader != NULL){
00047                 if(m_OSInstance->instanceHeader->name.length() > 0){
00048                         outStr << "<name>" + m_OSInstance->instanceHeader->name + "</name>"  ;
00049                 }
00050 
00051                 if(m_OSInstance->instanceHeader->source.length() > 0){
00052                         outStr << "<source>" + m_OSInstance->instanceHeader->source + "</source>"  ;
00053                 }
00054                 if(m_OSInstance->instanceHeader->description.length() > 0){
00055                         outStr << "<description>" + m_OSInstance->instanceHeader->description  + "</description>";
00056                 }
00057         }
00058         outStr << "</instanceHeader>" ;
00059         if( m_bWhiteSpace == true) outStr << endl;
00060         if(m_OSInstance->instanceData != NULL){
00061                 outStr << "<instanceData>" ;
00062                 if( m_bWhiteSpace == true) outStr << endl;
00063                 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0){
00064                         outStr << "<variables " ;
00065                         outStr << "numberOfVariables=\"";
00066                         outStr << m_OSInstance->instanceData->variables->numberOfVariables ;
00067                         outStr << "\"" ;
00068                         outStr << ">" ;
00069                         if( m_bWhiteSpace == true) outStr << endl;
00070                         // get variable information
00071                         for(i = 0; i < m_OSInstance->instanceData->variables->numberOfVariables; i++){
00072                                 if(m_OSInstance->instanceData->variables->var[i] != NULL){
00073                                         outStr << "<var" ;
00074                                         if(m_OSInstance->instanceData->variables->var[i]->name.length() > 0){
00075                                                 outStr << " name=\"" ;
00076                                                 outStr << m_OSInstance->instanceData->variables->var[i]->name ;
00077                                                 outStr <<  "\"";
00078                                         }
00079                                         if( m_OSInstance->instanceData->variables->var[i]->type != 'C'){
00080                                                 outStr << " type=\"" ;
00081                                                 outStr << m_OSInstance->instanceData->variables->var[i]->type ;
00082                                                 outStr <<  "\"";
00083                                         }
00084                                         if( m_OSInstance->instanceData->variables->var[i]->lb != 0.0){
00085                                                 outStr << " lb=\"" ;
00086                                                 outStr << m_OSInstance->instanceData->variables->var[i]->lb ;
00087                                                 outStr <<  "\"";  
00088                                         }
00089                                         if( m_OSInstance->instanceData->variables->var[i]->ub != OSINFINITY
00090                                                 && m_OSInstance->instanceData->variables->var[i]->ub != OSNAN
00091                                                 && m_OSInstance->instanceData->variables->var[i]->ub != OSDBL_MAX) {
00092                                                 outStr << " ub=\"" ;
00093                                                 outStr << m_OSInstance->instanceData->variables->var[i]->ub ;
00094                                                 outStr <<  "\"";
00095                                         }
00096                                         if(CommonUtil::ISOSNAN(m_OSInstance->instanceData->variables->var[i]->init) == false){
00097                                                 outStr << " init=\"" ;
00098                                                 outStr << m_OSInstance->instanceData->variables->var[i]->init ;
00099                                                 outStr <<  "\"";
00100                                         }
00101                                         if(m_OSInstance->instanceData->variables->var[i]->initString != ""){
00102                                                 outStr << " initstring=\"" ;
00103                                                 outStr << m_OSInstance->instanceData->variables->var[i]->initString ;
00104                                                 outStr <<  "\"";
00105                                         }
00106                                         outStr << "/>" ;
00107                                         if( m_bWhiteSpace == true) outStr << endl;
00108                                 }
00109                         } // end the for loop
00110                         outStr << "</variables>" ;
00111                         if( m_bWhiteSpace == true) outStr << endl;
00112                 }
00113                 if(m_OSInstance->instanceData->objectives != NULL && m_OSInstance->instanceData->objectives->numberOfObjectives > 0){
00114                         outStr << "<objectives " ; 
00115                         outStr << "numberOfObjectives=\"";
00116                         outStr << m_OSInstance->instanceData->objectives->numberOfObjectives ;
00117                         outStr << "\"" ;
00118                         outStr << ">" ;
00119                         if( m_bWhiteSpace == true) outStr << endl;
00120                         for (j = 0; j < m_OSInstance->instanceData->objectives->numberOfObjectives; j++){
00121                                 if(m_OSInstance->instanceData->objectives->obj[j] != NULL){
00122                                         outStr << "<obj" ;
00123                                         if(m_OSInstance->instanceData->objectives->obj[j]->maxOrMin.length() > 0){
00124                                                 outStr << " maxOrMin=\"" ;
00125                                                 outStr << m_OSInstance->instanceData->objectives->obj[j]->maxOrMin  ;
00126                                                 outStr <<  "\"";
00127                                         }
00128                                         if(m_OSInstance->instanceData->objectives->obj[j]->constant != 0.0){
00129                                                 outStr << " constant=\"" ;
00130                                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->constant  ;
00131                                                 outStr <<  "\"";
00132                                         }
00133                                         if(m_OSInstance->instanceData->objectives->obj[j]->weight != 1.0){
00134                                                 outStr << " weight=\"" ;
00135                                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->weight  ;
00136                                                 outStr <<  "\"";
00137                                         }
00138                                         if(m_OSInstance->instanceData->objectives->obj[j]->name.length() > 0){
00139                                                 outStr << " name=\"" ;
00140                                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->name  ;
00141                                                 outStr <<  "\"";
00142                                         }
00143                                         outStr << " numberOfObjCoef=\"" ;
00144                                         outStr <<  m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef  ;
00145                                         outStr <<  "\"";
00146                                         outStr << ">" ;
00147                                         if( m_bWhiteSpace == true) outStr << endl;
00148                                         if(m_OSInstance->instanceData->objectives->obj[j]->coef != NULL){
00149                                                 for (i = 0; i < m_OSInstance->instanceData->objectives->obj[ j]->numberOfObjCoef; i++){
00150                                                         if(m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx > -1 ){
00151                                                                 outStr << "<coef" ;
00152                                                                 outStr << " idx=\"" ;
00153                                                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx ;
00154                                                                 outStr <<  "\"";
00155                                                                 outStr << ">";
00156                                                                 outStr << m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value ;
00157                                                                 outStr << "</coef>" ;
00158                                                                 if( m_bWhiteSpace == true) outStr << endl;
00159                                                         }
00160                                                 }
00161                                         }
00162                                         outStr << "</obj>" ;
00163                                         if( m_bWhiteSpace == true) outStr << endl;
00164                                 }
00165                         }
00166                         outStr << "</objectives>" ;
00167                         if( m_bWhiteSpace == true) outStr << endl;
00168                 }
00169                 // Now the constraints
00170                 if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0){
00171                         outStr << "<constraints " ;
00172                         outStr << "numberOfConstraints=\"";
00173                         outStr << m_OSInstance->instanceData->constraints->numberOfConstraints ;
00174                         outStr << "\"" ;
00175                         outStr << ">" ;
00176                         if( m_bWhiteSpace == true) outStr << endl;
00177                         for (i = 0; i < m_OSInstance->instanceData->constraints->numberOfConstraints; i++){
00178                                 if(m_OSInstance->instanceData->constraints->con[i] != NULL){
00179                                         outStr << "<con" ; 
00180                                         if(m_OSInstance->instanceData->constraints->con[i]->name.length()){
00181                                                 outStr << " name=\"" ;
00182                                                 outStr << m_OSInstance->instanceData->constraints->con[i]->name ;
00183                                                 outStr <<  "\"";
00184                                         }
00185                                         if(m_OSInstance->instanceData->constraints->con[i]->constant != 0){
00186                                                 outStr << " constant=\"" ;
00187                                                 outStr << m_OSInstance->instanceData->constraints->con[i]->constant ;
00188                                                 outStr <<  "\"";
00189                                         }
00190                                         if(m_OSInstance->instanceData->constraints->con[i]->lb != -OSDBL_MAX
00191                                         && m_OSInstance->instanceData->constraints->con[i]->lb != -OSINFINITY){
00192                                                 outStr << " lb=\"" ;
00193                                                 outStr << m_OSInstance->instanceData->constraints->con[i]->lb ;
00194                                                 outStr <<  "\"";
00195                                         }
00196                                         if(m_OSInstance->instanceData->constraints->con[i]->ub != OSINFINITY
00197                                         && m_OSInstance->instanceData->constraints->con[i]->ub != OSDBL_MAX){
00198                                                 outStr << " ub=\"" ;
00199                                                 outStr << m_OSInstance->instanceData->constraints->con[i]->ub ;
00200                                                 outStr <<  "\"";
00201                                         }
00202                                         outStr << "/>" ;
00203                                         if( m_bWhiteSpace == true) outStr << endl;
00204                                 }
00205                         }
00206                 outStr << "</constraints>" ;
00207                 if( m_bWhiteSpace == true) outStr << endl;
00208                 }
00209                 // now the linearConstraintsCoefficients
00210                 if(m_OSInstance->instanceData->linearConstraintCoefficients != NULL && m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues > 0){
00211                         outStr << "<linearConstraintCoefficients " ;
00212                         outStr << "numberOfValues=\"";
00213                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues ;
00214                         outStr << "\"" ;
00215                         outStr << ">" ;
00216                         if( m_bWhiteSpace == true) outStr << endl;
00217                         if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL){
00218                                 outStr << "<start>" ;
00219                                 if( m_bWhiteSpace == true) outStr << endl;
00220                                 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0){
00221                                         if(m_bWriteBase64 == false){
00222                                                 for(i = 0; i <= m_OSInstance->instanceData->variables->numberOfVariables; i++){
00223                                                         outStr << "<el>" ;
00224                                                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00225                                                         outStr << "</el>" ;
00226                                                         if( m_bWhiteSpace == true) outStr << endl;
00227                                                 }
00228                                         }
00229                                         else{
00230                                                 //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00231                                                 outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00232                                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el, 
00233                                                         (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00234                                                 outStr<< "</base64BinaryData>" ;
00235                                                 if( m_bWhiteSpace == true) outStr << endl;
00236                                         }
00237                                 }
00238                                 outStr << "</start>" ;
00239                                 if( m_bWhiteSpace == true) outStr << endl;
00240                         }
00241                         if( (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx != NULL) &&
00242                                 (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el != NULL) ){
00243                                         outStr << "<rowIdx>" ;
00244                                         if( m_bWhiteSpace == true) outStr << endl;
00245                                         if(m_bWriteBase64 == false){            
00246                                                 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues; i++){
00247                                                         outStr << "<el>" ;
00248                                                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i] ;
00249                                                         outStr << "</el>"  ;
00250                                                         if( m_bWhiteSpace == true) outStr << endl;
00251                                                 }
00252                                         }
00253                                         else{
00254                                                 //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00255                                                 outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00256                                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el, 
00257                                                         m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00258                                                 outStr<< "</base64BinaryData>" ;
00259                                                 if( m_bWhiteSpace == true) outStr << endl;
00260                                         }
00261                                         outStr << "</rowIdx>" ;
00262                                         if( m_bWhiteSpace == true) outStr << endl;
00263                         }
00264                         else{
00265                                 if( (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx != NULL)  &&
00266                                         (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el != NULL) ){
00267                                                 outStr << "<colIdx>";
00268                                                 if( m_bWhiteSpace == true) outStr << endl;
00269                                                 if(m_bWriteBase64 == false){
00270                                                         for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues; i++){
00271                                                                 outStr << "<el>" ;
00272                                                                 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i] ;
00273                                                                 outStr << "</el>"  ;
00274                                                                 if( m_bWhiteSpace == true) outStr << endl;
00275                                                         }
00276                                                 }
00277                                                 else{
00278                                                         //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00279                                                         outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00280                                                         outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el, 
00281                                                                 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00282                                                         outStr<< "</base64BinaryData>" ;
00283                                                         if( m_bWhiteSpace == true) outStr << endl;
00284                                                 }
00285                                                 outStr << "</colIdx>" ;
00286                                                 if( m_bWhiteSpace == true) outStr << endl;
00287                                         }
00288                         }
00289                         if(m_OSInstance->instanceData->linearConstraintCoefficients->value != NULL){
00290                                 outStr << "<value>" ;
00291                                 if( m_bWhiteSpace == true) outStr << endl;
00292                                 if(m_OSInstance->instanceData->linearConstraintCoefficients->value->el != NULL){
00293                                         if(m_bWriteBase64 == false){
00294                                                 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues; i++){
00295                                                         outStr << "<el>";
00296                                                         outStr <<   m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i] ;
00297                                                         outStr << "</el>" ;
00298                                                         if( m_bWhiteSpace == true) outStr << endl;              
00299                                                 }
00300                                         }
00301                                         else{
00302                                                 //outStr << "<base64BinaryData sizeOf=\"8\" numericType=\"double\" >" ;
00303                                                 outStr << "<base64BinaryData sizeOf=\"8\"  >" ;
00304                                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->value->el, 
00305                                                         m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof( double) );
00306                                                 outStr<< "</base64BinaryData>" ;
00307                                                 if( m_bWhiteSpace == true) outStr << endl;
00308                                         }
00309                                 }
00310                                 outStr << "</value>" ;
00311                                 if( m_bWhiteSpace == true) outStr << endl;
00312                         }
00313                         outStr << "</linearConstraintCoefficients>" ;
00314                         if( m_bWhiteSpace == true) outStr << endl;
00315                 }
00316                 if(m_OSInstance->instanceData->quadraticCoefficients != NULL && m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms > 0){
00317                         outStr << "<quadraticCoefficients";
00318                         outStr << "  numberOfQuadraticTerms=\"";
00319                         outStr << m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms;
00320                         outStr << "\" >"  ;
00321                         if( m_bWhiteSpace == true) outStr << endl;
00322                         for(i = 0; i < m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms; i++){
00323                                 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]){
00324                                         outStr << "<qTerm" ;
00325                                         // the following attributes are required 
00326                                         outStr << "  idx=\"";
00327                                         outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idx;
00328                                         outStr << "\"";
00329                                         outStr << "  idxOne=\"";
00330                                         outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxOne;
00331                                         outStr << "\"";
00332                                         outStr << "  idxTwo=\"";
00333                                         outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxTwo;
00334                                         outStr << "\"";
00335                                         if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef != 0){
00336                                                 outStr << "  coef=\"";
00337                                                 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef;
00338                                                 outStr << "\"";
00339                                         }
00340                                         outStr << "/>" ;
00341                                         if( m_bWhiteSpace == true) outStr << endl;
00342                                 }
00343                         } 
00344                         outStr << "</quadraticCoefficients>";
00345                         if( m_bWhiteSpace == true) outStr << endl;
00346                 }
00347                 if(m_OSInstance->instanceData->nonlinearExpressions != NULL && m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions > 0){     
00348                         outStr << "<nonlinearExpressions";
00349                         outStr << "  numberOfNonlinearExpressions=\"";
00350                         outStr << m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions;
00351                         outStr << "\" >"  ;
00352                         if( m_bWhiteSpace == true) outStr << endl;
00353                         for(i = 0; i < m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions; i++){
00354                                 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i] != NULL){
00355                                         outStr << "<nl" ;
00356                                         // the following attribute is required 
00357                                         outStr << "  idx=\"";
00358                                         outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->idx;
00359                                         outStr << "\">";
00360                                         if(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot != NULL)
00361                                         outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
00362                                         outStr << "</nl>";
00363                                 }
00364                         }
00365                         outStr << "</nonlinearExpressions>";
00366                         if( m_bWhiteSpace == true) outStr << endl;
00367                 }       
00368                 outStr << "</instanceData>"  ;
00369                 if( m_bWhiteSpace == true) outStr << endl;
00370         } // end instanceData if
00371         outStr << "</osil>" ;
00372         if( m_bWhiteSpace == true) outStr << endl;
00373         outStr << endl;
00374         return outStr.str();
00375 } // end writeOSiL

Generated on Thu May 15 22:15:04 2008 by  doxygen 1.4.7