00001
00018 #include "OSiLWriter.h"
00019
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
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
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
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 outStr << "/>" ;
00154 if( m_bWhiteSpace == true) outStr << endl;
00155 }
00156 i += mult;
00157 }
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
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
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
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
00332
00333
00334
00335
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
00367
00368
00369
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
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
00406
00407
00408
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
00440
00441
00442
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
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
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 }
00557 outStr << "</osil>" ;
00558 if( m_bWhiteSpace == true) outStr << endl;
00559 outStr << endl;
00560 return outStr.str();
00561 }