00001
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
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
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 }
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
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
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
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
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
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
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 }
00579 outStr << "</osil>" ;
00580 if( m_bWhiteSpace == true) outStr << endl;
00581 outStr << endl;
00582 return outStr.str();
00583 }