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

Generated on Sat Mar 29 22:38:01 2008 by  doxygen 1.5.3