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

Go to the documentation of this file.
00001 /* $Id: OSiLWriter.cpp 4292 2011-09-21 05:47:18Z kmartin $ */
00016 #include "OSiLWriter.h"
00017 #include "OSStringUtil.h"
00018 #include "OSInstance.h"
00019 #include "OSParameters.h"
00020 #include "OSBase64.h"
00021 #include "OSMathUtil.h"
00022 #include "CoinFinite.hpp"
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 {
00035     m_bWriteBase64 = false;
00036     m_bWhiteSpace = false;
00037 }
00038 
00039 OSiLWriter::~OSiLWriter()
00040 {
00041 }
00042 
00043 std::string OSiLWriter::writeOSiL( const OSInstance *theosinstance)
00044 {
00045 
00046     m_OSInstance = theosinstance;
00047     ostringstream outStr;
00048     int i, j, k, kk;
00049     int mult;
00050     int incr;
00051     std::string tmpname, tmpsense;
00052     double tmplb, tmpub, tmpconst, tmpweight;
00053     char tmptype;
00054     int tmpnum;
00055 
00056 
00057     if(m_OSInstance == NULL)  return outStr.str();
00058     outStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ;
00059     if( m_bWhiteSpace == true) outStr << endl;
00060     outStr << "<osil xmlns=\"os.optimizationservices.org\"   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
00061     outStr << "xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/";
00062     outStr << OS_SCHEMA_VERSION;
00063     outStr << "/OSiL.xsd\" >" ;
00064     if( m_bWhiteSpace == true) outStr << endl;
00065     outStr << "<instanceHeader>";
00066     if( m_bWhiteSpace == true) outStr << endl;
00067     if(m_OSInstance->instanceHeader != NULL)
00068     {
00069         if(m_OSInstance->instanceHeader->name.length() > 0)
00070         {
00071             outStr << "<name>" + m_OSInstance->instanceHeader->name + "</name>"  ;
00072             if( m_bWhiteSpace == true) outStr << endl;
00073         }
00074 
00075         if(m_OSInstance->instanceHeader->source.length() > 0)
00076         {
00077             outStr << "<source>" + m_OSInstance->instanceHeader->source + "</source>"  ;
00078             if( m_bWhiteSpace == true) outStr << endl;
00079         }
00080         if(m_OSInstance->instanceHeader->description.length() > 0)
00081         {
00082             outStr << "<description>" + m_OSInstance->instanceHeader->description  + "</description>";
00083             if( m_bWhiteSpace == true) outStr << endl;
00084         }
00085         if(m_OSInstance->instanceHeader->fileCreator.length() > 0)
00086         {
00087             outStr << "<fileCreator>" + m_OSInstance->instanceHeader->fileCreator  + "</fileCreator>";
00088             if( m_bWhiteSpace == true) outStr << endl;
00089         }
00090         if(m_OSInstance->instanceHeader->licence.length() > 0)
00091         {
00092             outStr << "<licence>" + m_OSInstance->instanceHeader->licence  + "</licence>";
00093             if( m_bWhiteSpace == true) outStr << endl;
00094         }
00095     }
00096     outStr << "</instanceHeader>" ;
00097     if( m_bWhiteSpace == true) outStr << endl;
00098     if(m_OSInstance->instanceData != NULL)
00099     {
00100         outStr << "<instanceData>" ;
00101         if( m_bWhiteSpace == true) outStr << endl;
00102         if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0)
00103         {
00104             outStr << "<variables " ;
00105             outStr << "numberOfVariables=\"";
00106             outStr << m_OSInstance->instanceData->variables->numberOfVariables ;
00107             outStr << "\"" ;
00108             outStr << ">" ;
00109             if (m_bWhiteSpace == true) outStr << endl;
00110             // get variable information
00111             for (i = 0; i < m_OSInstance->instanceData->variables->numberOfVariables;)
00112             {
00113                 mult = 1;
00114                 if (m_OSInstance->instanceData->variables->var[i] != NULL)
00115                 {
00116                     if (i < m_OSInstance->instanceData->variables->numberOfVariables - 1)
00117                     {
00118                         tmpname = m_OSInstance->instanceData->variables->var[i]->name;
00119                         tmptype = m_OSInstance->instanceData->variables->var[i]->type;
00120                         tmplb   = m_OSInstance->instanceData->variables->var[i]->lb;
00121                         tmpub   = m_OSInstance->instanceData->variables->var[i]->ub;
00122                         for (k=i+1; k < m_OSInstance->instanceData->variables->numberOfVariables; k++)
00123                         {
00124                             if (tmpname != m_OSInstance->instanceData->variables->var[k]->name) break;
00125                             if (tmptype != m_OSInstance->instanceData->variables->var[k]->type) break;
00126                             if (tmplb   != m_OSInstance->instanceData->variables->var[k]->lb) break;
00127                             if (tmpub   != m_OSInstance->instanceData->variables->var[k]->ub) break;
00128                             mult++;
00129                         }
00130                     }
00131                     outStr << "<var" ;
00132                     if (m_OSInstance->instanceData->variables->var[i]->name.length() > 0)
00133                     {
00134                         outStr << " name=" ;
00135                         outStr << writeStringData(m_OSInstance->instanceData->variables->var[i]->name);
00136                     }
00137                     if( m_OSInstance->instanceData->variables->var[i]->type != 'C')
00138                     {
00139                         outStr << " type=\"" ;
00140                         outStr << m_OSInstance->instanceData->variables->var[i]->type ;
00141                         outStr <<  "\"";
00142                     }
00143                     if( m_OSInstance->instanceData->variables->var[i]->lb != 0.0)
00144                     {
00145                         outStr << " lb=\"" ;
00146                         outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->lb) ;
00147                         outStr <<  "\"";
00148                     }
00149                     if( m_OSInstance->instanceData->variables->var[i]->ub != OSDBL_MAX
00150                             && m_OSInstance->instanceData->variables->var[i]->ub != OSNaN() )
00151                     {
00152                         outStr << " ub=\"" ;
00153                         outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->ub) ;
00154                         outStr <<  "\"";
00155                     }
00156                     if (mult > 1)
00157                         outStr << " mult=\"" << mult <<  "\"";
00158                     outStr << "/>" ;
00159                     if( m_bWhiteSpace == true) outStr << endl;
00160                 }
00161                 i += mult;
00162             } // end the for loop
00163             outStr << "</variables>" ;
00164             if( m_bWhiteSpace == true) outStr << endl;
00165         }
00166         if(m_OSInstance->instanceData->objectives != NULL && m_OSInstance->instanceData->objectives->numberOfObjectives > 0)
00167         {
00168             outStr << "<objectives " ;
00169             outStr << "numberOfObjectives=\"";
00170             outStr << m_OSInstance->instanceData->objectives->numberOfObjectives ;
00171             outStr << "\"" ;
00172             outStr << ">" ;
00173             if( m_bWhiteSpace == true) outStr << endl;
00174             for (j = 0; j < m_OSInstance->instanceData->objectives->numberOfObjectives;)
00175             {
00176                 mult = 1;
00177                 if(m_OSInstance->instanceData->objectives->obj[j] != NULL)
00178                 {
00179                     if (j < m_OSInstance->instanceData->objectives->numberOfObjectives - 1)
00180                     {
00181                         tmpname   = m_OSInstance->instanceData->objectives->obj[j]->name;
00182                         tmpsense  = m_OSInstance->instanceData->objectives->obj[j]->maxOrMin;
00183                         tmpconst  = m_OSInstance->instanceData->objectives->obj[j]->constant;
00184                         tmpweight = m_OSInstance->instanceData->objectives->obj[j]->weight;
00185                         tmpnum    = m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef;
00186                         for (k=j+1; k < m_OSInstance->instanceData->objectives->numberOfObjectives; k++)
00187                         {
00188                             if (tmpname   != m_OSInstance->instanceData->objectives->obj[j]->name) break;
00189                             if (tmpsense  != m_OSInstance->instanceData->objectives->obj[j]->maxOrMin) break;
00190                             if (tmpconst  != m_OSInstance->instanceData->objectives->obj[j]->constant) break;
00191                             if (tmpweight != m_OSInstance->instanceData->objectives->obj[j]->weight) break;
00192                             if (tmpnum    != m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef) break;
00193                             for (kk=0; kk < tmpnum; kk++)
00194                             {
00195                                 if (m_OSInstance->instanceData->objectives->obj[j]->coef[j]->idx !=
00196                                         m_OSInstance->instanceData->objectives->obj[j]->coef[j]->idx) break;
00197                                 if (m_OSInstance->instanceData->objectives->obj[j]->coef[j]->value !=
00198                                         m_OSInstance->instanceData->objectives->obj[j]->coef[j]->value) break;
00199                             }
00200                             if ( kk < tmpnum) break;
00201                             mult++;
00202                         }
00203                     }
00204                     outStr << "<obj" ;
00205                     if(m_OSInstance->instanceData->objectives->obj[j]->maxOrMin.length() > 0)
00206                     {
00207                         outStr << " maxOrMin=\"" ;
00208                         outStr << m_OSInstance->instanceData->objectives->obj[j]->maxOrMin  ;
00209                         outStr <<  "\"";
00210                     }
00211                     if(m_OSInstance->instanceData->objectives->obj[j]->constant != 0.0)
00212                     {
00213                         outStr << " constant=\"" ;
00214                         outStr <<  os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->constant)  ;
00215                         outStr <<  "\"";
00216                     }
00217                     if(m_OSInstance->instanceData->objectives->obj[j]->weight != 1.0)
00218                     {
00219                         outStr << " weight=\"" ;
00220                         outStr <<  os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->weight)  ;
00221                         outStr <<  "\"";
00222                     }
00223                     if(m_OSInstance->instanceData->objectives->obj[j]->name.length() > 0)
00224                     {
00225                         outStr << " name=" ;
00226                         outStr <<  writeStringData(m_OSInstance->instanceData->objectives->obj[j]->name);
00227                     }
00228                     outStr << " numberOfObjCoef=\"" ;
00229                     outStr <<  m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef  ;
00230                     outStr <<  "\"";
00231                     if (mult > 1)
00232                         outStr << " mult=\"" << mult <<  "\"";
00233                     outStr << ">" ;
00234                     if( m_bWhiteSpace == true) outStr << endl;
00235                     if(m_OSInstance->instanceData->objectives->obj[j]->coef != NULL)
00236                     {
00237                         for (i = 0; i < m_OSInstance->instanceData->objectives->obj[ j]->numberOfObjCoef; i++)
00238                         {
00239                             if(m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx > -1 )
00240                             {
00241                                 outStr << "<coef" ;
00242                                 outStr << " idx=\"" ;
00243                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx ;
00244                                 outStr <<  "\"";
00245                                 outStr << ">";
00246                                 //
00247                                 //
00248                                 outStr << os_dtoa_format( m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value) ;
00249                                 //outStr << m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value ;
00250                                 outStr << "</coef>" ;
00251                                 if( m_bWhiteSpace == true) outStr << endl;
00252                             }
00253                         }
00254                     }
00255                     outStr << "</obj>" ;
00256                     if( m_bWhiteSpace == true) outStr << endl;
00257                 }
00258                 j += mult;
00259             }
00260             outStr << "</objectives>" ;
00261             if( m_bWhiteSpace == true) outStr << endl;
00262         }
00263         // Now the constraints
00264         if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0)
00265         {
00266             outStr << "<constraints " ;
00267             outStr << "numberOfConstraints=\"";
00268             outStr << m_OSInstance->instanceData->constraints->numberOfConstraints ;
00269             outStr << "\"" ;
00270             outStr << ">" ;
00271             if( m_bWhiteSpace == true) outStr << endl;
00272             for (i = 0; i < m_OSInstance->instanceData->constraints->numberOfConstraints;)
00273             {
00274                 mult = 1;
00275                 if(m_OSInstance->instanceData->constraints->con[i] != NULL)
00276                 {
00277                     if (i < m_OSInstance->instanceData->constraints->numberOfConstraints - 1)
00278                     {
00279                         tmpname  = m_OSInstance->instanceData->constraints->con[i]->name;
00280                         tmpconst = m_OSInstance->instanceData->constraints->con[i]->constant;
00281                         tmplb    = m_OSInstance->instanceData->constraints->con[i]->lb;
00282                         tmpub    = m_OSInstance->instanceData->constraints->con[i]->ub;
00283                         for (k=i+1; k < m_OSInstance->instanceData->constraints->numberOfConstraints; k++)
00284                         {
00285                             if (tmpname  != m_OSInstance->instanceData->constraints->con[k]->name) break;
00286                             if (tmpconst != m_OSInstance->instanceData->constraints->con[k]->constant) break;
00287                             if (tmplb    != m_OSInstance->instanceData->constraints->con[k]->lb) break;
00288                             if (tmpub    != m_OSInstance->instanceData->constraints->con[k]->ub) break;
00289                             mult++;
00290                         }
00291                     }
00292                     outStr << "<con" ;
00293                     if(m_OSInstance->instanceData->constraints->con[i]->name.length())
00294                     {
00295                         outStr << " name=" ;
00296                         outStr << writeStringData(m_OSInstance->instanceData->constraints->con[i]->name);
00297                     }
00298                     if(m_OSInstance->instanceData->constraints->con[i]->constant != 0)
00299                     {
00300                         outStr << " constant=\"" ;
00301                         outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->constant) ;
00302                         outStr <<  "\"";
00303                     }
00304                     if(m_OSInstance->instanceData->constraints->con[i]->lb != -OSDBL_MAX )
00305                     {
00306                         outStr << " lb=\"" ;
00307                         outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->lb) ;
00308                         outStr <<  "\"";
00309                     }
00310                     if(m_OSInstance->instanceData->constraints->con[i]->ub != OSDBL_MAX)
00311                     {
00312                         outStr << " ub=\"" ;
00313                         outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->ub) ;
00314                         outStr <<  "\"";
00315                     }
00316                     if (mult > 1)
00317                         outStr << " mult=\"" << mult <<  "\"";
00318                     outStr << "/>" ;
00319                     if( m_bWhiteSpace == true) outStr << endl;
00320                 }
00321                 i += mult;
00322             }
00323             outStr << "</constraints>" ;
00324             if( m_bWhiteSpace == true) outStr << endl;
00325         }
00326         // now the linearConstraintsCoefficients
00327         if(m_OSInstance->instanceData->linearConstraintCoefficients != NULL && m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues > 0)
00328         {
00329             outStr << "<linearConstraintCoefficients " ;
00330             outStr << "numberOfValues=\"";
00331             outStr << m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues ;
00332             outStr << "\"" ;
00333             outStr << ">" ;
00334             if( m_bWhiteSpace == true) outStr << endl;
00335             if( (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx != NULL) &&
00336                     (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el != NULL) )
00337             {
00338                 if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL)
00339                 {
00340                     outStr << "<start>" ;
00341                     if( m_bWhiteSpace == true) outStr << endl;
00342                     if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0)
00343                     {
00344                         if(m_bWriteBase64 == false)
00345                         {
00346                             for(i = 0; i <= m_OSInstance->instanceData->variables->numberOfVariables;)
00347                             {
00348                                 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i]),
00349                                             &mult, &incr, (m_OSInstance->instanceData->variables->numberOfVariables) + 1-i,1);
00350                                 if (mult == 1)
00351                                     outStr << "<el>" ;
00352                                 else if (incr == 0)
00353                                     outStr << "<el mult=\"" << mult << "\">";
00354                                 else
00355                                     outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00356                                 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00357                                 outStr << "</el>" ;
00358                                 if( m_bWhiteSpace == true) outStr << endl;
00359                                 i += mult;
00360                             }
00361                         }
00362                         else
00363                         {
00364                             outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\"  >" ;
00365                             outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el,
00366                                                          (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00367                             outStr << "</base64BinaryData>" ;
00368                             if( m_bWhiteSpace == true) outStr << endl;
00369                         }
00370                     }
00371                     outStr << "</start>" ;
00372                     if( m_bWhiteSpace == true) outStr << endl;
00373                 }
00374                 outStr << "<rowIdx>" ;
00375                 if( m_bWhiteSpace == true) outStr << endl;
00376                 if(m_bWriteBase64 == false)
00377                 {
00378                     for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
00379                     {
00380                         getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i]),
00381                                     &mult, &incr, (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i,1);
00382                         if (mult == 1)
00383                             outStr << "<el>" ;
00384                         else if (incr == 0)
00385                             outStr << "<el mult=\"" << mult << "\">";
00386                         else
00387                             outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00388                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i];
00389                         outStr << "</el>" ;
00390                         if( m_bWhiteSpace == true) outStr << endl;
00391                         i += mult;
00392                     }
00393                 }
00394                 else
00395                 {
00396                     //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00397                     outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\"  >" ;
00398                     outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el,
00399                                                  m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00400                     outStr << "</base64BinaryData>" ;
00401                     if( m_bWhiteSpace == true) outStr << endl;
00402                 }
00403                 outStr << "</rowIdx>" ;
00404                 if( m_bWhiteSpace == true) outStr << endl;
00405             }
00406             else
00407             {
00408                 if( (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx != NULL)  &&
00409                         (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el != NULL) )
00410                 {
00411                     if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL)
00412                     {
00413                         outStr << "<start>" ;
00414                         if( m_bWhiteSpace == true) outStr << endl;
00415                         if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0)
00416                         {
00417                             if(m_bWriteBase64 == false)
00418                             {
00419                                 for(i = 0; i <= m_OSInstance->instanceData->constraints->numberOfConstraints;)
00420                                 {
00421                                     getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i]),
00422                                                 &mult, &incr, (m_OSInstance->instanceData->constraints->numberOfConstraints) + 1-i,1);
00423                                     if (mult == 1)
00424                                         outStr << "<el>" ;
00425                                     else if (incr == 0)
00426                                         outStr << "<el mult=\"" << mult << "\">";
00427                                     else
00428                                         outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00429                                     outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00430                                     outStr << "</el>" ;
00431                                     if( m_bWhiteSpace == true) outStr << endl;
00432                                     i += mult;
00433                                 }
00434                             }
00435                             else
00436                             {
00437                                 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\"  >" ;
00438                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el,
00439                                                              (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00440                                 outStr << "</base64BinaryData>" ;
00441                                 if( m_bWhiteSpace == true) outStr << endl;
00442                             }
00443                         }
00444                         outStr << "</start>" ;
00445                         if( m_bWhiteSpace == true) outStr << endl;
00446                     }
00447                     outStr << "<colIdx>";
00448                     if( m_bWhiteSpace == true) outStr << endl;
00449                     if(m_bWriteBase64 == false)
00450                     {
00451                         for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
00452                         {
00453                             getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i]),
00454                                         &mult, &incr, (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i,1);
00455                             if (mult == 1)
00456                                 outStr << "<el>" ;
00457                             else if (incr == 0)
00458                                 outStr << "<el mult=\"" << mult << "\">";
00459                             else
00460                                 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00461                             outStr << m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i];
00462                             outStr << "</el>" ;
00463                             if( m_bWhiteSpace == true) outStr << endl;
00464                             i += mult;
00465                         }
00466                     }
00467                     else
00468                     {
00469                         outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\"  >" ;
00470                         outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el,
00471                                                      m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00472                         outStr << "</base64BinaryData>" ;
00473                         if( m_bWhiteSpace == true) outStr << endl;
00474                     }
00475                     outStr << "</colIdx>" ;
00476                     if( m_bWhiteSpace == true) outStr << endl;
00477                 }
00478             }
00479             if(m_OSInstance->instanceData->linearConstraintCoefficients->value != NULL)
00480             {
00481                 outStr << "<value>" ;
00482                 if( m_bWhiteSpace == true) outStr << endl;
00483                 if(m_OSInstance->instanceData->linearConstraintCoefficients->value->el != NULL)
00484                 {
00485                     if(m_bWriteBase64 == false)
00486                     {
00487                         for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
00488                         {
00489                             mult = getMult(&(m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i]),
00490                                            (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i);
00491                             if (mult == 1)
00492                                 outStr << "<el>" ;
00493                             else
00494                                 outStr << "<el mult=\"" << mult << "\">";
00495                             outStr <<   os_dtoa_format( m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i] );
00496                             outStr << "</el>" ;
00497                             if( m_bWhiteSpace == true) outStr << endl;
00498                             i += mult;
00499                         }
00500                     }
00501                     else
00502                     {
00503                         outStr << "<base64BinaryData sizeOf=\"" << sizeof(double) << "\"  >" ;
00504                         outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->value->el,
00505                                                      m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof( double) );
00506                         outStr << "</base64BinaryData>" ;
00507                         if( m_bWhiteSpace == true) outStr << endl;
00508                     }
00509                 }
00510                 outStr << "</value>" ;
00511                 if( m_bWhiteSpace == true) outStr << endl;
00512             }
00513             outStr << "</linearConstraintCoefficients>" ;
00514             if( m_bWhiteSpace == true) outStr << endl;
00515         }
00516         if(m_OSInstance->instanceData->quadraticCoefficients != NULL && m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms > 0)
00517         {
00518             outStr << "<quadraticCoefficients";
00519             outStr << "  numberOfQuadraticTerms=\"";
00520             outStr << m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms;
00521             outStr << "\" >"  ;
00522             if( m_bWhiteSpace == true) outStr << endl;
00523             for(i = 0; i < m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms; i++)
00524             {
00525                 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i])
00526                 {
00527                     outStr << "<qTerm" ;
00528                     // the following attributes are required
00529                     outStr << "  idx=\"";
00530                     outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idx;
00531                     outStr << "\"";
00532                     outStr << "  idxOne=\"";
00533                     outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxOne;
00534                     outStr << "\"";
00535                     outStr << "  idxTwo=\"";
00536                     outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxTwo;
00537                     outStr << "\"";
00538                     if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef != 0)
00539                     {
00540                         outStr << "  coef=\"";
00541                         outStr << os_dtoa_format(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef);
00542                         outStr << "\"";
00543                     }
00544                     outStr << "/>" ;
00545                     if( m_bWhiteSpace == true) outStr << endl;
00546                 }
00547             }
00548             outStr << "</quadraticCoefficients>";
00549             if( m_bWhiteSpace == true) outStr << endl;
00550         }
00551         if(m_OSInstance->instanceData->nonlinearExpressions != NULL && m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions > 0)
00552         {
00553             outStr << "<nonlinearExpressions";
00554             outStr << "  numberOfNonlinearExpressions=\"";
00555             outStr << m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions;
00556             outStr << "\" >"  ;
00557             if( m_bWhiteSpace == true) outStr << endl;
00558             for(i = 0; i < m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions; i++)
00559             {
00560                 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i] != NULL)
00561                 {
00562                     outStr << "<nl" ;
00563                     // the following attribute is required
00564                     outStr << "  idx=\"";
00565                     outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->idx;
00566                     outStr << "\">";
00567                     if(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot != NULL)
00568                         outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
00569                     outStr << "</nl>";
00570                 }
00571                 if( m_bWhiteSpace == true) outStr << endl;
00572             }
00573             outStr << "</nonlinearExpressions>";
00574             if( m_bWhiteSpace == true) outStr << endl;
00575         }
00576         outStr << "</instanceData>"  ;
00577         if( m_bWhiteSpace == true) outStr << endl;
00578     } // end instanceData if
00579     outStr << "</osil>" ;
00580     if( m_bWhiteSpace == true) outStr << endl;
00581     outStr << endl;
00582     return outStr.str();
00583 } // end writeOSiL

Generated on Thu Sep 22 03:06:01 2011 by  doxygen 1.4.7