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

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

Generated on Sun Jan 2 03:04:41 2011 by  doxygen 1.4.7