/home/coin/SVN-release/OS-2.3.5/OS/src/OSCommonInterfaces/OSResult.cpp

Go to the documentation of this file.
00001 /* $Id: OSResult.cpp 4120 2011-03-30 06:28:16Z kmartin $ */
00016 #include "OSResult.h"
00017 #include "OSParameters.h"
00018 #include "OSErrorClass.h"
00019 #include "OSGeneral.h"
00020 #include "OSParameters.h" 
00021 #include "OSMathUtil.h"
00022 
00023 #include<iostream>
00024 #include<sstream>
00025 
00026 //#define DEBUG_OSRESULT
00027 #define DEBUG_ISEQUAL_ROUTINES 0 // No output 
00028 //#define DEBUG_ISEQUAL_ROUTINES 1 // Unequal components only 
00029 //#define DEBUG_ISEQUAL_ROUTINES 2 // Full tracing
00030 
00031 using namespace std;
00032 
00038 GeneralSubstatus::GeneralSubstatus():
00039         name( ""),
00040         description( "")
00041 {
00042         #ifdef DEBUG_OSRESULT
00043         cout << "Inside the GeneralSubstatus Constructor" << endl;
00044         #endif
00045 }// end GeneralSubstatus constructor  
00046 
00047 GeneralSubstatus::~GeneralSubstatus(){
00048         #ifdef DEBUG_OSRESULT
00049         cout << "Inside the GeneralSubstatus Destructor" << endl;
00050         #endif
00051 }//end GeneralSubstatus destructor
00052 
00053 
00054 GeneralStatus::GeneralStatus():
00055         numberOfSubstatuses (0),
00056         type( ""),
00057         description( ""),
00058         substatus (NULL)
00059 {
00060         #ifdef DEBUG_OSRESULT
00061         cout << "Inside the GeneralStatus Constructor" << endl;
00062         #endif
00063 }// end GeneralStatus constructor  
00064 
00065 GeneralStatus::~GeneralStatus(){
00066         #ifdef DEBUG_OSRESULT
00067         cout << "Inside the GeneralStatus Destructor" << endl;
00068         #endif
00069         if (substatus != NULL)
00070         {       for (int i = 0; i < numberOfSubstatuses; i++)
00071                 {
00072                         delete substatus[i];
00073                         substatus[i] = NULL;
00074                 }
00075                 delete[] substatus;
00076                 substatus = NULL; 
00077         }
00078 }//end GeneralStatus destructor
00079 
00080 
00081 OtherResult::OtherResult():
00082         name( ""),
00083         value( ""),
00084         description( "")
00085 {
00086         #ifdef DEBUG_OSRESULT
00087         cout << "Inside the OtherResult Constructor" << endl;
00088         #endif
00089 }// end OtherResult constructor
00090 
00091 OtherResult::~OtherResult()
00092 {
00093         #ifdef DEBUG_OSRESULT
00094         cout << "Inside the OtherResult Destructor" << endl;
00095         #endif
00096 }// end OtherResult destructor
00097 
00098 
00099 OtherResults::OtherResults():
00100         numberOfOtherResults( 0),
00101         other( NULL)
00102 {
00103         #ifdef DEBUG_OSRESULT
00104         cout << "Inside the OtherResults Constructor" << endl;
00105         #endif
00106 }// end OtherResults constructor
00107 
00108 OtherResults::~OtherResults()
00109 {
00110         #ifdef DEBUG_OSRESULT
00111         cout << "Inside the OtherResults Destructor" << endl;
00112         #endif
00113         if (other != NULL)
00114         {       for (int i = 0; i < numberOfOtherResults; i++)
00115                 {
00116                         delete other[i];
00117                         other[i] = NULL;
00118                 }
00119                 delete[] other;
00120                 other = NULL; 
00121         }
00122 }// end OtherResults destructor
00123 
00124 
00125 GeneralResult::GeneralResult():
00126         generalStatus(NULL), 
00127         message(""),
00128         serviceURI(""),
00129         serviceName(""),
00130         instanceName(""),
00131         jobID(""),
00132         solverInvoked(""),
00133         timeStamp(""),
00134         otherResults(NULL)
00135 { 
00136         #ifdef DEBUG_OSRESULT
00137         cout << "Inside the GeneralResult Constructor" << endl;
00138         #endif
00139 }//end GeneralResult constructor
00140 
00141 
00142 GeneralResult::~GeneralResult(){
00143         #ifdef DEBUG_OSRESULT  
00144         cout << "GeneralResult Destructor Called" << endl;
00145         #endif
00146         if (generalStatus != NULL)
00147         {       
00148                 delete generalStatus;
00149                 generalStatus = NULL;
00150         }
00151         if (otherResults != NULL)
00152         {       
00153                 delete otherResults;
00154                 otherResults = NULL;
00155         }
00156 }// end GeneralResult destructor
00157 
00158 SystemResult::SystemResult():
00159         systemInformation(""),
00160         availableDiskSpace(NULL),
00161         availableMemory(NULL),
00162         availableCPUSpeed(NULL),
00163         availableCPUNumber(NULL),
00164         otherResults(NULL)
00165 { 
00166         #ifdef DEBUG_OSRESULT
00167         cout << "Inside the SystemResult Constructor" << endl;
00168         #endif
00169 }//end SystemResult constructor
00170 
00171 
00172 SystemResult::~SystemResult(){
00173         #ifdef DEBUG_OSRESULT  
00174         cout << "SystemResult Destructor Called" << endl;
00175         #endif
00176         if (availableDiskSpace != NULL)
00177         {       delete availableDiskSpace;
00178                 availableDiskSpace = NULL;
00179         }
00180         if (availableMemory != NULL)
00181         {       delete availableMemory;
00182                 availableMemory = NULL;
00183         }
00184         if (availableCPUSpeed != NULL)
00185         {       delete availableCPUSpeed;
00186                 availableCPUSpeed = NULL;
00187         }
00188         if (availableCPUNumber != NULL)
00189         {       delete availableCPUNumber;
00190                 availableCPUNumber = NULL;
00191         }
00192         if (otherResults != NULL)
00193         {       delete otherResults;
00194                 otherResults = NULL;
00195         }
00196 }// end SystemResult destructor
00197 
00198 
00199 ServiceResult::ServiceResult():
00200         currentState("unknown"),
00201         currentJobCount(-1),
00202         totalJobsSoFar(-1),
00203         timeServiceStarted("1970-01-01T00:00:00-00:00"),
00204         serviceUtilization(-1.0),
00205         otherResults(NULL)
00206 { 
00207         #ifdef DEBUG_OSRESULT
00208         cout << "Inside the ServiceResult Constructor" << endl;
00209         #endif
00210 }//end ServiceResult constructor
00211 
00212 
00213 ServiceResult::~ServiceResult(){
00214         #ifdef DEBUG_OSRESULT  
00215         cout << "ServiceResult Destructor Called" << endl;
00216         #endif
00217         if (otherResults != NULL)
00218         {       delete otherResults;
00219                 otherResults = NULL;
00220         }
00221 }// end ServiceResult destructor
00222 
00223 #if 0
00224 Time::Time():
00225         type("elapsedTime"),
00226         category("total"),
00227         unit("second"),
00228         description(""),
00229         value(0.0)
00230 { 
00231         #ifdef DEBUG_OSRESULT
00232         cout << "Inside the Time Constructor" << endl;
00233         #endif
00234 }//end Time constructor
00235 
00236 
00237 Time::~Time(){
00238         #ifdef DEBUG_OSRESULT  
00239         cout << "Inside the Time Destructor" << endl;
00240         #endif
00241 
00242 }// end Time destructor
00243 #endif
00244 
00245 TimeMeasurement::TimeMeasurement():
00246         TimeSpan(),
00247         type("elapsedTime"),
00248         category("total"),
00249         description("")
00250 { 
00251         #ifdef DEBUG_OSRESULT
00252         cout << "Inside the TimeMeasurement Constructor" << endl;
00253         #endif
00254 }//end TimeMeasurement constructor
00255 
00256 
00257 TimeMeasurement::~TimeMeasurement(){
00258         #ifdef DEBUG_OSRESULT  
00259         cout << "Inside the TimeMeasurement Destructor" << endl;
00260         #endif
00261 
00262 }// end TimeMeasurement destructor
00263 
00264 TimingInformation::TimingInformation():
00265         numberOfTimes(0),
00266         time(NULL)
00267 { 
00268         #ifdef DEBUG_OSRESULT
00269         cout << "Inside the TimingInformation Constructor" << endl;
00270         #endif
00271 }//end TimingInformation constructor
00272 
00273 
00274 TimingInformation::~TimingInformation(){
00275         #ifdef DEBUG_OSRESULT  
00276         cout << "Inside the TimingInformation Destructor" << endl;
00277         #endif
00278         if (time != NULL)
00279         {
00280                 for (int i = 0; i < numberOfTimes; i++)
00281                 {       delete time[i];
00282                         time[i] = NULL;
00283                 }
00284                 delete[] time;
00285                 time = NULL;
00286         }
00287 }// end TimingInformation destructor
00288 
00289 JobResult::JobResult():
00290         status("finished"),
00291         submitTime("1970-01-01T00:00:00-00:00"),
00292         scheduledStartTime("1970-01-01T00:00:00-00:00"),
00293         actualStartTime("1970-01-01T00:00:00-00:00"),
00294         endTime("1970-01-01T00:00:00-00:00"),
00295         timingInformation(NULL),
00296         usedDiskSpace(NULL),
00297         usedMemory(NULL),
00298         usedCPUSpeed(NULL),
00299         usedCPUNumber(NULL),
00300         otherResults(NULL)
00301 { 
00302         #ifdef DEBUG_OSRESULT
00303         cout << "Inside the JobResult Constructor" << endl;
00304         #endif
00305         timingInformation = NULL;
00306 }//end JobResult constructor
00307 
00308 
00309 JobResult::~JobResult(){
00310         #ifdef DEBUG_OSRESULT  
00311         cout << "Inside the JobResult Destructor" << endl;
00312         #endif
00313         if (timingInformation != NULL)
00314         {       delete timingInformation;
00315                 timingInformation = NULL;
00316         }
00317         if (usedDiskSpace != NULL)
00318         {       delete usedDiskSpace;
00319                 usedDiskSpace = NULL;
00320         }
00321         if (usedMemory != NULL)
00322         {       delete usedMemory;
00323                 usedMemory = NULL;
00324         }
00325         if (usedCPUSpeed != NULL)
00326         {       delete usedCPUSpeed;
00327                 usedCPUSpeed = NULL;
00328         }
00329         if (usedCPUNumber != NULL)
00330         {       delete usedCPUNumber;
00331                 usedCPUNumber = NULL;
00332         }
00333         if (otherResults != NULL)
00334         {       delete otherResults;
00335                 otherResults = NULL;
00336         }
00337 }// end JobResult destructor
00338 
00339 
00340 OptimizationSolutionSubstatus::OptimizationSolutionSubstatus():
00341         type(""),
00342         description("")
00343 { 
00344         #ifdef DEBUG_OSRESULT
00345         cout << "Inside the OptimizationSolutionSubstatus Constructor" << endl;
00346         #endif
00347 }//end OptimizationSolutionSubstatus constructor
00348 
00349 
00350 OptimizationSolutionSubstatus::~OptimizationSolutionSubstatus(){
00351         #ifdef DEBUG_OSRESULT  
00352         cout << "Inside the OptimizationSolutionSubstatus Destructor" << endl;
00353         #endif
00354 }// end OptimizationSolutionSubstatus destructor
00355 
00356 
00357 OptimizationSolutionStatus::OptimizationSolutionStatus():
00358         numberOfSubstatuses(0),
00359         type(""),
00360         description(""),
00361         substatus(NULL)
00362 { 
00363         #ifdef DEBUG_OSRESULT
00364         cout << "Inside the OptimizationSolutionStatus Constructor" << endl;
00365         #endif
00366 }//end OptimizationSolutionStatus constructor
00367 
00368 
00369 OptimizationSolutionStatus::~OptimizationSolutionStatus(){
00370         #ifdef DEBUG_OSRESULT  
00371         cout << "Inside the OptimizationSolutionStatus Destructor" << endl;
00372         #endif
00373         if (substatus != NULL)
00374         {
00375                 for (int i = 0; i < numberOfSubstatuses; i++)
00376                 {       delete substatus[i];
00377                         substatus[i] = NULL;
00378                 }
00379                 delete[] substatus;
00380                 substatus = NULL;
00381         }
00382 }// end OptimizationSolutionStatus destructor
00383 
00384 
00385 VarValue::VarValue():
00386         idx( -1),
00387         value( 0)
00388 { 
00389         #ifdef DEBUG_OSRESULT
00390         cout << "Inside the VarValue Constructor" << endl;
00391         #endif
00392 }//end VarValue constructor
00393 
00394 
00395 VarValue::~VarValue(){
00396         #ifdef DEBUG_OSRESULT  
00397         cout << "Inside the VarValue Destructor" << endl;
00398         #endif
00399 }// end VarValue destructor 
00400 
00401 
00402 
00403 VariableValues::VariableValues():
00404         numberOfVar(0),
00405         var(NULL) 
00406 { 
00407         #ifdef DEBUG_OSRESULT
00408         cout << "Inside the VariableValues Constructor" << endl;
00409         #endif
00410 }//end VariableValues constructor
00411 
00412 
00413 VariableValues::~VariableValues(){
00414         #ifdef DEBUG_OSRESULT  
00415         cout << "Inside the VariableValues Destructor" << endl;
00416         #endif
00417         if(var != NULL)
00418         {       for(int i = 0; i < numberOfVar; i++)
00419                 {
00420                         delete var[i];
00421                         var[i] = NULL;
00422                 }
00423                 delete[] var;
00424                 var = NULL;
00425         }
00426 }// end VariableValues destructor 
00427 
00428 
00429 VarValueString::VarValueString():
00430         idx( -1),
00431         value( "")
00432 { 
00433         #ifdef DEBUG_OSRESULT
00434         cout << "Inside the VarValueString Constructor" << endl;
00435         #endif
00436 }//end VarValueString constructor
00437 
00438 
00439 VarValueString::~VarValueString(){
00440         #ifdef DEBUG_OSRESULT  
00441         cout << "Inside the VarValueString Destructor" << endl;
00442         #endif
00443 }// end VarValueString destructor 
00444 
00445 
00446 
00447 VariableValuesString::VariableValuesString():
00448         numberOfVar(0),
00449         var(NULL) 
00450 { 
00451         #ifdef DEBUG_OSRESULT
00452         cout << "Inside the VariableValuesString Constructor" << endl;
00453         #endif
00454 }//end VariableValuesString constructor
00455 
00456 
00457 VariableValuesString::~VariableValuesString(){
00458         #ifdef DEBUG_OSRESULT  
00459         cout << "Inside the VariableValuesString Destructor" << endl;
00460         #endif
00461         if(var != NULL)
00462         {       for(int i = 0; i < numberOfVar; i++)
00463                 {
00464                         delete var[i];
00465                         var[i] = NULL;
00466                 }
00467                 delete[] var;
00468                 var = NULL;
00469         }
00470 }// end VariableValuesString destructor 
00471 
00472 
00473 OtherVarResult::OtherVarResult():
00474         idx( -1),
00475         value( "")
00476 { 
00477         #ifdef DEBUG_OSRESULT
00478         cout << "Inside the OtherVarResult Constructor" << endl;
00479         #endif
00480 }//end OtherVarResult constructor
00481 
00482 
00483 OtherVarResult::~OtherVarResult(){
00484         #ifdef DEBUG_OSRESULT  
00485         cout << "Inside the OtherVarResult Destructor" << endl;
00486         #endif
00487 }// end OtherVarResult destructor 
00488 
00489 
00490 
00491 OtherVariableResult::OtherVariableResult():
00492         numberOfVar(0),    //(-1),
00493         numberOfEnumerations(0),
00494         name(""),
00495         value(""),
00496         description(""),
00497         var(NULL),
00498         enumeration(NULL)
00499 { 
00500         #ifdef DEBUG_OSRESULT
00501         cout << "Inside the OtherVariableResult Constructor" << endl;
00502         #endif
00503 
00504 }//end OtherVariableResult constructor
00505 
00506 
00507 OtherVariableResult::~OtherVariableResult(){
00508         #ifdef DEBUG_OSRESULT  
00509         cout << "Inside the OtherVariableResult Destructor" << endl;
00510         #endif
00511         if (var != NULL)
00512         {       for(int i = 0; i < numberOfVar; i++){
00513                         delete var[i];
00514                         var[i] = NULL;
00515                 }
00516                 delete[] var;
00517                 var = NULL;
00518         }
00519         if (enumeration != NULL)
00520         {       for(int i = 0; i < numberOfEnumerations; i++){
00521                         delete enumeration[i];
00522                         enumeration[i] = NULL;
00523                 }
00524                 delete[] enumeration;
00525                 enumeration = NULL;
00526         }
00527         #ifdef DEBUG_OSRESULT  
00528         cout << "Inside the OtherVariableResult Destructor - Done" << endl;
00529         #endif
00530 }// end OtherVariableResult destructor 
00531 
00532 
00533 VariableSolution::VariableSolution():
00534         numberOfOtherVariableResults( 0),
00535         values( NULL),
00536         valuesString( NULL),
00537         basisStatus(NULL),
00538         other( NULL)
00539 { 
00540         #ifdef DEBUG_OSRESULT
00541         cout << "Inside the VariableSolution Constructor" << endl;
00542         #endif
00543 }//end VariableSolution constructor
00544 
00545 
00546 VariableSolution::~VariableSolution(){
00547         #ifdef DEBUG_OSRESULT  
00548         cout << "Inside the VariableSolution Destructor" << endl;
00549         #endif
00550         if (values != NULL)
00551         {       delete values;
00552                 values = NULL;
00553         }
00554         if (valuesString != NULL)
00555         {       delete valuesString;
00556                 valuesString = NULL;
00557         }
00558         if (basisStatus != NULL)
00559         {       delete basisStatus;
00560                 basisStatus = NULL;
00561         }
00562         if(numberOfOtherVariableResults > 0 && other != NULL){
00563                 for(int i = 0; i < numberOfOtherVariableResults; i++){
00564                         delete other[i];
00565                         other[i] = NULL;
00566                 }
00567                 delete[] other;
00568                 other = NULL; 
00569         }
00570 }// end VariableSolution destructor 
00571 
00572 
00573 
00574 ObjValue::ObjValue():
00575         idx( -1),
00576         value(0.0)
00577 //      value( OSNAN)
00578 { 
00579         #ifdef DEBUG_OSRESULT
00580         cout << "Inside the ObjValue Constructor" << endl;
00581         #endif
00582 }//end ObjValue constructor
00583 
00584 ObjValue::~ObjValue(){
00585         #ifdef DEBUG_OSRESULT  
00586         cout << "Inside the ObjValue Destructor" << endl;
00587         #endif
00588 }// end ObjValue destructor 
00589 
00590 
00591 
00592 ObjectiveValues::ObjectiveValues():
00593         numberOfObj(0),
00594         obj(NULL)
00595 { 
00596         #ifdef DEBUG_OSRESULT
00597         cout << "Inside the ObjectiveValues Constructor" << endl;
00598         #endif
00599 
00600 }//end ObjectiveValues constructor
00601 
00602 
00603 ObjectiveValues::~ObjectiveValues(){
00604         #ifdef DEBUG_OSRESULT  
00605         cout << "Inside the ObjectiveValues Destructor" << endl;
00606         #endif
00607         if((obj != NULL) && (numberOfObj > 0) ){
00608                 for(int i = 0; i < numberOfObj; i++){
00609                         delete obj[i];
00610                         obj[i] = NULL;
00611                 }
00612                 delete[] obj; 
00613                 obj = NULL;
00614         }
00615 }// end ObjectiveValues destructor
00616 
00617 
00618 OtherObjResult::OtherObjResult():
00619         idx(-1),
00620         value( "")
00621 { 
00622         #ifdef DEBUG_OSRESULT
00623         cout << "Inside the OtherObjResult Constructor" << endl;
00624         #endif
00625 }//end OtherObjResult constructor
00626 
00627 
00628 OtherObjResult::~OtherObjResult(){
00629         #ifdef DEBUG_OSRESULT  
00630         cout << "Inside the OtherObjResult Destructor" << endl;
00631         #endif
00632 }//end OtherObjResult destructor
00633 
00634 
00635 OtherObjectiveResult::OtherObjectiveResult():
00636         numberOfObj(0),
00637         numberOfEnumerations(0),
00638         name(""),
00639         value(""),
00640         description(""),
00641         obj(NULL),
00642         enumeration(NULL)
00643 { 
00644         #ifdef DEBUG_OSRESULT
00645         cout << "Inside the OtherObjectiveResult Constructor" << endl;
00646         #endif
00647 }//end OtherObjectiveResult constructor
00648 
00649 
00650 OtherObjectiveResult::~OtherObjectiveResult(){
00651         #ifdef DEBUG_OSRESULT  
00652         cout << "Inside the OtherObjectiveResult Destructor" << endl;
00653         #endif
00654         if(obj != NULL) {
00655                 for(int i = 0; i < numberOfObj; i++){
00656                         delete obj[i];
00657                         obj[i] = NULL;
00658                 }
00659                 delete[] obj; 
00660                 obj = NULL;
00661         }
00662         if (enumeration != NULL)
00663         {       for(int i = 0; i < numberOfEnumerations; i++){
00664                         delete enumeration[i];
00665                         enumeration[i] = NULL;
00666                 }
00667                 delete[] enumeration;
00668                 enumeration = NULL;
00669         }
00670 }// end OtherObjectiveResult destructor
00671 
00672 
00673 ObjectiveSolution::ObjectiveSolution():
00674         numberOfOtherObjectiveResults( 0),
00675         values( NULL),
00676         basisStatus(NULL),
00677         other( NULL)
00678 { 
00679         #ifdef DEBUG_OSRESULT
00680         cout << "Inside the ObjectiveSolution Constructor" << endl;
00681         #endif
00682 }//end ObjectiveSolution constructor
00683 
00684 
00685 ObjectiveSolution::~ObjectiveSolution(){
00686         #ifdef DEBUG_OSRESULT  
00687         cout << "Inside the ObjectiveSolution Destructor" << endl;
00688         #endif
00689         if (values != NULL)
00690         {       delete values;
00691                 values = NULL;
00692         }
00693         if (basisStatus != NULL)
00694         {       delete basisStatus;
00695                 basisStatus = NULL;
00696         }
00697         if(numberOfOtherObjectiveResults > 0 && other != NULL){
00698                 for(int i = 0; i < numberOfOtherObjectiveResults; i++){
00699                         delete other[i];
00700                         other[i] = NULL;
00701                 }
00702                 delete[] other;
00703                 other = NULL; 
00704         }
00705 }// end ObjectiveSolution destructor 
00706 
00707 
00708 DualVarValue::DualVarValue():
00709         idx( -1),
00710         //lbValue( 0),
00711         //ubValue( 0),
00712         value( 0)
00713 { 
00714         #ifdef DEBUG_OSRESULT
00715         cout << "Inside the DualVarValue Constructor" << endl;
00716         #endif
00717 }//end DualVarValue constructor
00718 
00719 
00720 DualVarValue::~DualVarValue(){
00721         #ifdef DEBUG_OSRESULT  
00722         cout << "Inside the DualVarValue Destructor" << endl;
00723         #endif
00724 }// end DualVarValue destructor
00725 
00726 
00727 DualVariableValues::DualVariableValues(): 
00728         numberOfCon(0),
00729         con(NULL)
00730 { 
00731         #ifdef DEBUG_OSRESULT
00732         cout << "Inside the DualVariableValues Constructor" << endl;
00733         #endif
00734 
00735 }//end DualVariableValues constructor
00736 
00737 
00738 DualVariableValues::~DualVariableValues(){
00739         #ifdef DEBUG_OSRESULT  
00740         cout << "Inside the DualVariableValues Destructor" << endl;
00741         #endif
00742         if (con != NULL){
00743                 for(int i = 0; i < numberOfCon; i++){
00744                         delete con[i];
00745                         con[i] = NULL;
00746                 }
00747                 delete[] con;
00748                 con = NULL;
00749         }       
00750 }// end DualVariableValues destructor 
00751 
00752 
00753 OtherConResult::OtherConResult():
00754         idx( -1),
00755         value( "")
00756 { 
00757         #ifdef DEBUG_OSRESULT
00758         cout << "Inside the OtherConResult Constructor" << endl;
00759         #endif
00760 }//end OtherConResult constructor
00761 
00762 
00763 OtherConResult::~OtherConResult(){
00764         #ifdef DEBUG_OSRESULT  
00765         cout << "Inside the OtherConResult Destructor" << endl;
00766         #endif
00767 }//end OtherConResult destructor
00768 
00769 
00770 
00771 OtherConstraintResult::OtherConstraintResult():
00772         numberOfCon(0),
00773         numberOfEnumerations(0),
00774         name(""),
00775         value(""),
00776         description(""),
00777         con(NULL),
00778         enumeration(NULL)
00779 { 
00780         #ifdef DEBUG_OSRESULT
00781         cout << "Inside the OtherConstraintResult Constructor" << endl;
00782         #endif
00783 }//end OtherConstraintResult constructor
00784 
00785 
00786 OtherConstraintResult::~OtherConstraintResult(){
00787         #ifdef DEBUG_OSRESULT  
00788         cout << "Inside the OtherConstraintResult Destructor" << endl;
00789         #endif
00790         if (con != NULL){
00791                 for(int i = 0; i < numberOfCon; i++){
00792                         delete con[i];
00793                         con[i] = NULL;
00794                 }
00795                 delete[] con;
00796                 con = NULL;
00797         }
00798         if (enumeration != NULL)
00799         {       for(int i = 0; i < numberOfEnumerations; i++){
00800                         delete enumeration[i];
00801                         enumeration[i] = NULL;
00802                 }
00803                 delete[] enumeration;
00804                 enumeration = NULL;
00805         }
00806 }// end OtherConstraintResult destructor
00807 
00808 
00809 
00810 ConstraintSolution::ConstraintSolution():
00811         numberOfOtherConstraintResults( 0),
00812         dualValues( NULL),
00813         basisStatus(NULL),
00814         other( NULL)
00815 { 
00816         #ifdef DEBUG_OSRESULT
00817         cout << "Inside the ConstraintSolution Constructor" << endl;
00818         #endif
00819 }//end ConstraintSolution constructor
00820 
00821 
00822 ConstraintSolution::~ConstraintSolution(){
00823         #ifdef DEBUG_OSRESULT  
00824         cout << "Inside the ConstraintSolution Destructor" << endl;
00825         #endif
00826         if (dualValues != NULL)
00827         {       delete dualValues;
00828                 dualValues = NULL;
00829         }
00830         if (basisStatus != NULL)
00831         {       delete basisStatus;
00832                 basisStatus = NULL;
00833         }
00834         if(numberOfOtherConstraintResults > 0 && other != NULL){
00835                 for(int i = 0; i < numberOfOtherConstraintResults; i++){
00836                         delete other[i];
00837                         other[i] = NULL;
00838                 }
00839                 delete[] other;
00840                 other = NULL; 
00841         }
00842 }// end ConstraintSolution destructor
00843 
00844 
00845 
00846 OtherSolutionResult::OtherSolutionResult():
00847         name( ""),
00848         category (""),
00849         description (""),
00850         numberOfItems (0),
00851         item( NULL)
00852 { 
00853         #ifdef DEBUG_OSRESULT
00854         cout << "Inside the OtherSolutionResult Constructor" << endl;
00855         #endif
00856 }//end OtherSolutionResult constructor
00857 
00858 
00859 OtherSolutionResult::~OtherSolutionResult(){
00860         #ifdef DEBUG_OSRESULT  
00861         cout << "Inside the OtherSolutionResult Destructor" << endl;
00862         #endif
00863         if (item != NULL) 
00864         {       //for (int i=0; i < numberOfItems; i++)
00865                 //{     delete item[i];
00866                 //      item[i] = NULL;
00867                 //}
00868                 delete[] item;
00869                 item = NULL;
00870         }
00871 }// end OtherSolutionResult destructor
00872 
00873 
00874 
00875 OtherSolutionResults::OtherSolutionResults():
00876         numberOfOtherSolutionResults( 0),
00877         otherSolutionResult( NULL)
00878 { 
00879         #ifdef DEBUG_OSRESULT
00880         cout << "Inside the OtherSolutionResults Constructor" << endl;
00881         #endif
00882 }//end OtherSolutionResults constructor
00883 
00884 
00885 OtherSolutionResults::~OtherSolutionResults(){
00886         #ifdef DEBUG_OSRESULT  
00887         cout << "Inside the OtherSolutionResults Destructor" << endl;
00888         #endif
00889         if(numberOfOtherSolutionResults > 0 && otherSolutionResult != NULL){
00890                 for(int i = 0; i < numberOfOtherSolutionResults; i++){
00891                         delete otherSolutionResult[i];
00892                         otherSolutionResult[i] = NULL;
00893                 }
00894                 delete[] otherSolutionResult;
00895                 otherSolutionResult = NULL; 
00896         }
00897 }// end OtherSolutionResults destructor
00898 
00899 
00900 
00901 OptimizationSolution::OptimizationSolution():
00902         targetObjectiveIdx( -1),
00903         weightedObjectives(false),
00904         status(NULL),
00905         message( ""),
00906         variables( NULL),
00907         objectives( NULL),
00908         constraints( NULL),
00909         otherSolutionResults( NULL)
00910         //other(NULL)
00911 { 
00912         #ifdef DEBUG_OSRESULT
00913         cout << "Inside the OptimizationSolution Constructor" << endl;
00914         #endif
00915 }//end OptimizationSolution constructor
00916 
00917 
00918 OptimizationSolution::~OptimizationSolution(){
00919         #ifdef DEBUG_OSRESULT  
00920         cout << "Inside the OptimzationSolution Destructor" << endl;
00921         #endif
00922         if(status != NULL){
00923                 delete status;
00924                 status = NULL;
00925         }
00926         if(variables != NULL){
00927                 delete variables;
00928                 variables = NULL;
00929         }
00930         if(constraints != NULL) {
00931                 delete constraints;
00932                 constraints = NULL;
00933         }
00934         if(objectives != NULL){
00935                 delete objectives;
00936                 objectives = NULL;
00937         }
00938         if(otherSolutionResults != NULL){
00939                 delete otherSolutionResults;
00940                 otherSolutionResults = NULL;
00941         }
00942 }// end OptimizationSolution destructor 
00943  
00944 
00945 SolverOutput::SolverOutput():
00946         name( ""),
00947         category (""),
00948         description (""),
00949         numberOfItems (0),
00950         item( NULL)
00951 { 
00952         #ifdef DEBUG_OSRESULT
00953         cout << "Inside the SolverOutput Constructor" << endl;
00954         #endif
00955 }//end SolverOutput constructor
00956 
00957 
00958 SolverOutput::~SolverOutput(){
00959         #ifdef DEBUG_OSRESULT  
00960         cout << "Inside the SolverOutput Destructor" << endl;
00961         #endif
00962         if (item != NULL) 
00963         {       //for (int i=0; i < numberOfItems; i++)
00964                 //{     delete item[i];
00965                 //      item[i] = NULL;
00966                 //}
00967                 delete[] item;
00968                 item = NULL;
00969         }
00970 }// end SolverOutput destructor
00971 
00972 
00973 
00974 OtherSolverOutput::OtherSolverOutput(): 
00975         numberOfSolverOutputs(0),
00976         solverOutput(NULL)
00977 { 
00978         #ifdef DEBUG_OSRESULT
00979         cout << "Inside the OtherSolverOutput Constructor" << endl;
00980         #endif
00981 
00982 }//end OtherSolverOutput constructor
00983 
00984 
00985 OtherSolverOutput::~OtherSolverOutput(){
00986         #ifdef DEBUG_OSRESULT  
00987         cout << "Inside the OtherSolverOutput Destructor" << endl;
00988         #endif
00989         if (solverOutput != NULL){
00990                 for(int i = 0; i < numberOfSolverOutputs; i++){
00991                         delete solverOutput[i];
00992                         solverOutput[i] = NULL;
00993                 }
00994                 delete[] solverOutput;
00995                 solverOutput = NULL;
00996         }       
00997 }// end OtherSolverOutput destructor 
00998 
00999 
01000 
01001 OptimizationResult::OptimizationResult():
01002         numberOfSolutions(0),
01003         numberOfVariables( -1),
01004         numberOfObjectives( -1),
01005         numberOfConstraints(-1),
01006         solution(NULL),
01007         otherSolverOutput(NULL)
01008 { 
01009         #ifdef DEBUG_OSRESULT
01010         cout << "Inside the OptimizationResult Constructor" << endl;
01011         #endif
01012 }//end OptimizationResult constructor
01013 
01014 
01015 OptimizationResult::~OptimizationResult(){
01016         #ifdef DEBUG_OSRESULT  
01017         cout << "OptimizationResult Destructor Called" << endl;
01018         #endif
01019         if( solution != NULL){
01020                 for(int i = 0; i < this->numberOfSolutions; i++){
01021                         delete solution[i];
01022                         solution[i] = NULL;
01023                         #ifdef DEBUG_OSRESULT  
01024                         cout << "Deleting Solution: " << i << endl;
01025                         #endif
01026                 }
01027                 delete[] solution;
01028                 solution = NULL; 
01029                 if( otherSolverOutput != NULL){
01030                         delete otherSolverOutput;
01031                         otherSolverOutput = NULL;
01032                 }
01033         }
01034 }// end OptimizationResult destructor 
01035  
01036 
01037 OSResult::OSResult():
01038         m_iVariableNumber( -1),
01039         m_iObjectiveNumber( -1),
01040         m_iConstraintNumber( -1),
01041         m_iNumberOfOtherVariableResults( -1),
01042         m_mdPrimalValues( NULL),
01043         m_mdDualValues( NULL)
01044 
01045 {
01046         #ifdef DEBUG_OSRESULT
01047         cout << "Inside the OSResult Constructor" << endl;
01048         #endif
01049         resultHeader = NULL;
01050         general = NULL;
01051         system = NULL;
01052         service = NULL;
01053         job = NULL;
01054         optimization = NULL;
01055 }// end OSResult constructor  
01056 
01057 OSResult::~OSResult(){
01058         #ifdef DEBUG_OSRESULT
01059         cout << "OSResult Destructor Called" << endl;
01060         #endif
01061         // delete the children of OSResult
01062         // delete resultHeader object
01063         if (resultHeader != NULL) 
01064         {
01065                 delete resultHeader;
01066                 resultHeader = NULL;
01067         }
01068         // delete general object
01069         if (general != NULL) 
01070         {
01071                 delete general;
01072                 general = NULL;
01073         }
01074         //delete system object
01075         if (system != NULL)  
01076         {
01077                 delete system;
01078                 system = NULL;
01079         }
01080         //delete service object
01081         if (service != NULL)  
01082         {
01083                 delete service;
01084                 service = NULL;
01085         }
01086         //delete job object
01087         if (job != NULL)  
01088         {
01089                 delete job;
01090                 job = NULL;
01091         }
01092         //delete optimization object
01093         if (optimization != NULL)  
01094         {
01095                 delete optimization;
01096                 optimization = NULL;
01097         }
01098         
01099         int k;
01100 
01101         if (m_mdPrimalValues != NULL) delete[] m_mdPrimalValues;
01102         m_mdPrimalValues = 0;
01103 
01104         if (m_mdDualValues != NULL) delete[] m_mdDualValues;
01105         m_mdDualValues = 0;
01106         
01107         int numPrimalVals =  this->primalVals.size();
01108         for (k = 0; k < numPrimalVals; k++)
01109         {
01110                 if (this->primalVals[ k]  != NULL  ) 
01111                         delete this->primalVals[ k];
01112         }
01113         this->primalVals.clear();
01114         
01115         int numDualVals =  this->dualVals.size();
01116         for (k = 0; k < numDualVals; k++)
01117         {
01118                 if (this->dualVals[ k]  != NULL  ) 
01119                         delete this->dualVals[ k];
01120         }
01121         this->dualVals.clear();
01122 }//end OSResult destructor
01123 
01124 // =============================================================
01125 // get methods
01126 
01127 GeneralStatus* OSResult::getGeneralStatus(){
01128         if (general == NULL) return NULL;
01129         return general->generalStatus;
01130 }//getGeneralStatus
01131 
01132 string OSResult::getGeneralStatusType(){
01133         if (general == NULL) return "";
01134         if (general->generalStatus == NULL) return "";
01135         return general->generalStatus->type;
01136 }//getGeneralStatusType
01137 
01138 string OSResult::getGeneralStatusDescription(){
01139         if (general == NULL) return "";
01140         if (general->generalStatus == NULL) return "";
01141         return general->generalStatus->description;
01142 }//getGeneralStatusDescription
01143 
01144 int OSResult::getNumberOfGeneralSubstatuses(){
01145         if (general == NULL) return -1;
01146         if (general->generalStatus == NULL) return -1;
01147         return general->generalStatus->numberOfSubstatuses;
01148 }//getGeneralStatusDescription
01149 
01150 string OSResult::getGeneralSubstatusName(int i){
01151         if (general == NULL) return "";
01152         if (general->generalStatus == NULL) return "";
01153         if (i < 0 || i >= general->generalStatus->numberOfSubstatuses)
01154                 throw ErrorClass("idx is outside of range in routine getGeneralSubstatusName()");
01155         if (general->generalStatus->substatus[i] == NULL) return "";
01156         return general->generalStatus->substatus[i]->name;
01157 }//getGeneralSubstatusName
01158         
01159 string OSResult::getGeneralSubstatusDescription(int i){
01160         if (general == NULL) return "";
01161         if (general->generalStatus == NULL) return "";
01162         if (i < 0 || i >= general->generalStatus->numberOfSubstatuses)
01163                 throw ErrorClass("idx is outside of range in routine getGeneralSubstatusDescription()");
01164         if (general->generalStatus->substatus[i] == NULL) return "";
01165         return general->generalStatus->substatus[i]->description;
01166 }//getGeneralSubstatusDescription
01167 
01168 string OSResult::getGeneralMessage(){
01169         if (general == NULL) return "";
01170         return general->message;
01171 }//getServiceName
01172 
01173 string OSResult::getServiceName(){
01174         if (general == NULL) return "";
01175         return general->serviceName;
01176 }//getServiceName
01177 
01178 string OSResult::getServiceURI(){
01179         if (general == NULL) return "";
01180         return general->serviceURI;
01181 }//getServiceURI
01182 
01183 string OSResult::getInstanceName(){
01184         if (general == NULL) return "";
01185         return general->instanceName;
01186 }//getInstanceName
01187 
01188 string OSResult::getJobID(){
01189         if (general == NULL) return "";
01190         return general->jobID;
01191 }//getJobID
01192 
01193 string OSResult::getSolverInvoked(){
01194         if (general == NULL) return "";
01195         return general->solverInvoked;
01196 }//getSolverInvoked
01197 
01198 string OSResult::getTimeStamp(){
01199         if (general == NULL) return "";
01200         return general->timeStamp;
01201 }//getTimeStamp
01202 
01203 int OSResult::getNumberOfOtherGeneralResults(){
01204         if (general == NULL) return -1;
01205         if (general->otherResults == NULL) return -1;
01206         return  general->otherResults->numberOfOtherResults;
01207 }//getNumberOfOtherGeneralResults
01208 
01209 string OSResult::getOtherGeneralResultName(int idx){
01210         if (general == NULL) return "";
01211         if (general->otherResults == NULL) return "";
01212         if (idx < 0 || idx >= general->otherResults->numberOfOtherResults) 
01213                 throw ErrorClass("idx is outside of range in routine getOtherGeneralResultName()");
01214         if (general->otherResults->other[idx] == NULL) return "";
01215         return general->otherResults->other[idx]->name;
01216 }//getOtherGeneralResultName
01217 
01218 string OSResult::getOtherGeneralResultValue(int idx){
01219         if (general == NULL) return "";
01220         if (general->otherResults == NULL) return "";
01221         if (idx < 0 || idx >= general->otherResults->numberOfOtherResults) 
01222                 throw ErrorClass("idx is outside of range in routine getOtherGeneralResultValue()");
01223         if (general->otherResults->other[idx] == NULL) return "";
01224         return general->otherResults->other[idx]->value;
01225 }//getOtherGeneralResultValue
01226 
01227 string OSResult::getOtherGeneralResultDescription(int idx){
01228         if (general == NULL) return "";
01229         if (general->otherResults == NULL) return "";
01230         if (idx < 0 || idx >= general->otherResults->numberOfOtherResults) 
01231                 throw ErrorClass("idx is outside of range in routine getOtherGeneralResultDescription()");
01232         if (general->otherResults->other[idx] == NULL) return "";
01233         return general->otherResults->other[idx]->description;
01234 }//getOtherGeneralResultDescription
01235 
01236 string OSResult::getSystemInformation(){
01237         if (system == NULL) return "";
01238         return system->systemInformation;
01239 }//getSystemInformation
01240 
01241 string OSResult::getAvailableDiskSpaceUnit(){
01242         if (system == NULL) return "";
01243         if (system->availableDiskSpace == NULL) return "";
01244         return system->availableDiskSpace->unit;
01245 }//getAvailableDiskSpaceUnit
01246 
01247 string OSResult::getAvailableDiskSpaceDescription(){
01248         if (system == NULL) return "";
01249         if (system->availableDiskSpace == NULL) return "";
01250         return system->availableDiskSpace->description;
01251 }//getAvailableDiskSpaceDescription
01252 
01253 double OSResult::getAvailableDiskSpaceValue(){
01254         if (system == NULL) return -1.;
01255         if (system->availableDiskSpace == NULL) return -1.;
01256         return system->availableDiskSpace->value;
01257 }//getAvailableDiskSpaceValue
01258 
01259 string OSResult::getAvailableMemoryUnit(){
01260         if (system == NULL) return "";
01261         if (system->availableMemory == NULL) return "";
01262         return system->availableMemory->unit;
01263 }//getAvailableMemoryUnit
01264 
01265 string OSResult::getAvailableMemoryDescription(){
01266         if (system == NULL) return "";
01267         if (system->availableMemory == NULL) return "";
01268         return system->availableMemory->description;
01269 }//getAvailableMemoryDescription
01270 
01271 double OSResult::getAvailableMemoryValue(){
01272         if (system == NULL) return -1.;
01273         if (system->availableMemory == NULL) return -1.;
01274         return system->availableMemory->value;
01275 }//getAvailableMemoryValue
01276 
01277 string OSResult::getAvailableCPUSpeedUnit(){
01278         if (system == NULL) return "";
01279         if (system->availableCPUSpeed == NULL) return "";
01280         return system->availableCPUSpeed->unit;
01281 }//getAvailableCPUSpeedUnit
01282 
01283 string OSResult::getAvailableCPUSpeedDescription(){
01284         if (system == NULL) return "";
01285         if (system->availableCPUSpeed == NULL) return "";
01286         return system->availableCPUSpeed->description;
01287 }//getAvailableCPUSpeedDescription
01288 
01289 double OSResult::getAvailableCPUSpeedValue(){
01290         if (system == NULL) return -1.;
01291         if (system->availableCPUSpeed == NULL) return -1.;
01292         return system->availableCPUSpeed->value;
01293 }//getAvailableCPUSpeedValue
01294 
01295 string OSResult::getAvailableCPUNumberDescription(){
01296         if (system == NULL) return "";
01297         if (system->availableCPUNumber == NULL) return "";
01298         return system->availableCPUNumber->description;
01299 }//getAvailableCPUNumberDescription
01300 
01301 int OSResult::getAvailableCPUNumberValue(){
01302         if (system == NULL) return -1;
01303         if (system->availableCPUNumber == NULL) return -1;
01304         return system->availableCPUNumber->value;
01305 }//getAvailableCPUNumberValue
01306 
01307 int OSResult::getNumberOfOtherSystemResults(){
01308         if (system == NULL) return -1;
01309         if (system->otherResults == NULL) return -1;
01310         return system->otherResults->numberOfOtherResults;
01311 }//getNumberOfOtherSystemResults
01312 
01313 string OSResult::getOtherSystemResultName(int idx){
01314         if (system == NULL) return "";
01315         if (system->otherResults == NULL) return "";
01316         if (idx < 0 || idx >= system->otherResults->numberOfOtherResults) 
01317                 throw ErrorClass("idx is outside of range in routine getOtherSystemResultName()");
01318         if (system->otherResults->other[idx] == NULL) return "";
01319         return system->otherResults->other[idx]->name;
01320 }//getOtherSystemResultName
01321 
01322 string OSResult::getOtherSystemResultValue(int idx){
01323         if (system == NULL) return "";
01324         if (system->otherResults == NULL) return "";
01325         if (idx < 0 || idx >= system->otherResults->numberOfOtherResults) 
01326                 throw ErrorClass("idx is outside of range in routine getOtherSystemResultValue()");
01327         if (system->otherResults->other[idx] == NULL) return "";
01328         return system->otherResults->other[idx]->value;
01329 }//getOtherSystemResultValue
01330 
01331 string OSResult::getOtherSystemResultDescription(int idx){
01332         if (system == NULL) return "";
01333         if (system->otherResults == NULL) return "";
01334         if (idx < 0 || idx >= system->otherResults->numberOfOtherResults) 
01335                 throw ErrorClass("idx is outside of range in routine getOtherSystemResultDescription()");
01336         if (system->otherResults->other[idx] == NULL) return "";
01337         return system->otherResults->other[idx]->description;
01338 }//getOtherSystemResultDescription
01339 
01340 string OSResult::getCurrentState(){
01341         if (service == NULL) return "";
01342         return service->currentState;
01343 }//getCurrentState
01344 
01345 int OSResult::getCurrentJobCount(){
01346         if (service == NULL) return -1;
01347         return service->currentJobCount;
01348 }//getCurrentJobCount
01349 
01350 int OSResult::getTotalJobsSoFar(){
01351         if (service == NULL) return -1;
01352         return service->totalJobsSoFar;
01353 }//getTotalJobsSoFar
01354 
01355 string OSResult::getTimeServiceStarted(){
01356         if (service == NULL) return "";
01357         return service->timeServiceStarted;
01358 }//getTimeServiceStarted
01359 
01360 double OSResult::getServiceUtilization(){
01361         if (service == NULL) return -1.;
01362         return service->serviceUtilization;
01363 }//getServiceUtilization
01364 
01365 int OSResult::getNumberOfOtherServiceResults(){
01366         if (service == NULL) return -1;
01367         if (service->otherResults == NULL) return -1;
01368         return service->otherResults->numberOfOtherResults;
01369 }//getNumberOfOtherServiceResults
01370 
01371 string OSResult::getOtherServiceResultName(int idx){
01372         if (service == NULL) return "";
01373         if (service->otherResults == NULL) return "";
01374         if (idx < 0 || idx >= service->otherResults->numberOfOtherResults) 
01375                 throw ErrorClass("idx is outside of range in routine getOtherServiceResultName()");
01376         if (service->otherResults->other[idx] == NULL) return "";
01377         return service->otherResults->other[idx]->name;
01378 }//getOtherServiceResultName
01379 
01380 string OSResult::getOtherServiceResultValue(int idx){
01381         if (service == NULL) return "";
01382         if (service->otherResults == NULL) return "";
01383         if (idx < 0 || idx >= service->otherResults->numberOfOtherResults) 
01384                 throw ErrorClass("idx is outside of range in routine getOtherServiceResultValue()");
01385         if (service->otherResults->other[idx] == NULL) return "";
01386         return service->otherResults->other[idx]->value;
01387 }//getOtherServiceResultValue
01388 
01389 string OSResult::getOtherServiceResultDescription(int idx){
01390         if (service == NULL) return "";
01391         if (service->otherResults == NULL) return "";
01392         if (idx < 0 || idx >= service->otherResults->numberOfOtherResults) 
01393                 throw ErrorClass("idx is outside of range in routine getOtherServiceResultDescription()");
01394         if (service->otherResults->other[idx] == NULL) return "";
01395         return service->otherResults->other[idx]->description;
01396 }//getOtherServiceResultDescription
01397 
01398 string OSResult::getJobStatus(){
01399         if (job == NULL) return "";
01400         return job->status;
01401 }//getJobStatus
01402 
01403 string OSResult::getJobSubmitTime(){
01404         if (job == NULL) return "";
01405         return job->submitTime;
01406 }//getJobSubmitTime
01407 
01408 string OSResult::getScheduledStartTime(){
01409         if (job == NULL) return "";
01410         return job->scheduledStartTime;
01411 }//getScheduledStartTime
01412 
01413 string OSResult::getActualStartTime(){
01414         if (job == NULL) return "";
01415         return job->actualStartTime;
01416 }//getActualStartTime
01417 
01418 string OSResult::getJobEndTime(){
01419         if (job == NULL) return "";
01420         return job->endTime;
01421 }//getJobEndTime
01422 
01423 int OSResult::getNumberOfTimes(){
01424         if (job == NULL) return -1;
01425         if (job->timingInformation == NULL) return -1; 
01426         return job->timingInformation->numberOfTimes;
01427 }//getNumberOfTimes
01428 
01429 string OSResult::getTimingInfoUnit(int idx){
01430         if (job == NULL) return "";
01431         if (job->timingInformation == NULL) return ""; 
01432         if (idx < 0 || idx >= job->timingInformation->numberOfTimes) 
01433                 throw ErrorClass("idx is outside of range in routine getTimingInfoUnit()");
01434         if (job->timingInformation->time[idx] == NULL) return "";
01435         return job->timingInformation->time[idx]->unit;
01436 }//getTimingInfoUnit
01437 
01438 string OSResult::getTimingInfoType(int idx){
01439         if (job == NULL) return "";
01440         if (job->timingInformation == NULL) return ""; 
01441         if (idx < 0 || idx >= job->timingInformation->numberOfTimes) 
01442                 throw ErrorClass("idx is outside of range in routine getTimingInfoType()");
01443         if (job->timingInformation->time[idx] == NULL) return "";
01444         return job->timingInformation->time[idx]->type;
01445 }//getTimingInfoType
01446 
01447 string OSResult::getTimingInfoCategory(int idx){
01448         if (job == NULL) return "";
01449         if (job->timingInformation == NULL) return ""; 
01450         if (idx < 0 || idx >= job->timingInformation->numberOfTimes) 
01451                 throw ErrorClass("idx is outside of range in routine getTimingInfoCategory()");
01452         if (job->timingInformation->time[idx] == NULL) return "";
01453         return job->timingInformation->time[idx]->category;
01454 }//getTimingInfoCategory
01455 
01456 string OSResult::getTimingInfoDescription(int idx){
01457         if (job == NULL) return "";
01458         if (job->timingInformation == NULL) return ""; 
01459         if (idx < 0 || idx >= job->timingInformation->numberOfTimes) 
01460                 throw ErrorClass("idx is outside of range in routine getTimingInfoDescription()");
01461         if (job->timingInformation->time[idx] == NULL) return "";
01462         return job->timingInformation->time[idx]->description;
01463 }//getTimingInfoDescription
01464 
01465 double OSResult::getTimingInfoValue(int idx){
01466         if (job == NULL) return OSNAN;
01467         if (job->timingInformation == NULL) return OSNAN; 
01468         if (idx < 0 || idx >= job->timingInformation->numberOfTimes) 
01469                 throw ErrorClass("idx is outside of range in routine getTimingInfoValue()");
01470         if (job->timingInformation->time[idx] == NULL) return OSNAN;
01471         return job->timingInformation->time[idx]->value;
01472 }//getTimingInfoValue
01473 
01474 string OSResult::getUsedDiskSpaceUnit(){
01475         if (job == NULL) return "";
01476         if (job->usedDiskSpace == NULL) return "";
01477         return job->usedDiskSpace->unit;
01478 }//getUsedDiskSpaceUnit
01479 
01480 string OSResult::getUsedDiskSpaceDescription(){
01481         if (job == NULL) return "";
01482         if (job->usedDiskSpace == NULL) return "";
01483         return job->usedDiskSpace->description;
01484 }//getUsedDiskSpaceDescription
01485 
01486 double OSResult::getUsedDiskSpaceValue(){
01487         if (job == NULL) return -1.;
01488         if (job->usedDiskSpace == NULL) return -1.;
01489         return job->usedDiskSpace->value;
01490 }//getUsedDiskSpaceValue
01491 
01492 string OSResult::getUsedMemoryUnit(){
01493         if (job == NULL) return "";
01494         if (job->usedMemory == NULL) return "";
01495         return job->usedMemory->unit;
01496 }//getUsedMemoryUnit
01497 
01498 string OSResult::getUsedMemoryDescription(){
01499         if (job == NULL) return "";
01500         if (job->usedMemory == NULL) return "";
01501         return job->usedMemory->description;
01502 }//getUsedMemoryDescription
01503 
01504 double OSResult::getUsedMemoryValue(){
01505         if (job == NULL) return -1.;
01506         if (job->usedMemory == NULL) return -1.;
01507         return job->usedMemory->value;
01508 }//getUsedMemoryValue
01509 
01510 string OSResult::getUsedCPUSpeedUnit(){
01511         if (job == NULL) return "";
01512         if (job->usedCPUSpeed == NULL) return "";
01513         return job->usedCPUSpeed->unit;
01514 }//getUsedCPUSpeedUnit
01515 
01516 string OSResult::getUsedCPUSpeedDescription(){
01517         if (job == NULL) return "";
01518         if (job->usedCPUSpeed == NULL) return "";
01519         return job->usedCPUSpeed->description;
01520 }//getUsedCPUSpeedDescription
01521 
01522 double OSResult::getUsedCPUSpeedValue(){
01523         if (job == NULL) return -1.;
01524         if (job->usedCPUSpeed == NULL) return -1.;
01525         return job->usedCPUSpeed->value;
01526 }//getUsedCPUSpeedValue
01527 
01528 string OSResult::getUsedCPUNumberDescription(){
01529         if (job == NULL) return "";
01530         if (job->usedCPUNumber == NULL) return "";
01531         return job->usedCPUNumber->description;
01532 }//getUsedCPUNumberDescription
01533 
01534 int OSResult::getUsedCPUNumberValue(){
01535         if (job == NULL) return -1;
01536         if (job->usedCPUNumber == NULL) return -1;
01537         return job->usedCPUNumber->value;
01538 }//getUsedCPUNumberValue
01539 
01540 int OSResult::getNumberOfOtherJobResults(){
01541         if (job == NULL) return -1;
01542         if (job->otherResults == NULL) return -1;
01543         return job->otherResults->numberOfOtherResults;
01544 }//getNumberOfOtherJobResults
01545 
01546 string OSResult::getOtherJobResultName(int idx){
01547         if (job == NULL) return "";
01548         if (job->otherResults == NULL) return "";
01549         if (idx < 0 || idx >= job->otherResults->numberOfOtherResults) 
01550                 throw ErrorClass("idx is outside of range in routine getOtherJobResultName()");
01551         if (job->otherResults->other[idx] == NULL) return "";
01552         return job->otherResults->other[idx]->name;
01553 }//getOtherJobResultName
01554 
01555 string OSResult::getOtherJobResultValue(int idx){
01556         if (job == NULL) return "";
01557         if (job->otherResults == NULL) return "";
01558         if (idx < 0 || idx >= job->otherResults->numberOfOtherResults) 
01559                 throw ErrorClass("idx is outside of range in routine getOtherJobResultValue()");
01560         if (job->otherResults->other[idx] == NULL) return "";
01561         return job->otherResults->other[idx]->value;
01562 }//getOtherJobResultValue
01563 
01564 string OSResult::getOtherJobResultDescription(int idx){
01565         if (job == NULL) return "";
01566         if (job->otherResults == NULL) return "";
01567         if (idx < 0 || idx >= job->otherResults->numberOfOtherResults) 
01568                 throw ErrorClass("idx is outside of range in routine getOtherJobResultDescription()");
01569         if (job->otherResults->other[idx] == NULL) return "";
01570         return job->otherResults->other[idx]->description;
01571 }//getOtherJobResultDescription
01572 
01573 double OSResult::getTimeValue()
01574 {       if (job == NULL) return 0.0;
01575         if (job->timingInformation == NULL) return 0.0;
01576         if (job->timingInformation->numberOfTimes <= 0) return 0.0;
01577         return job->timingInformation->time[0]->value;
01578 }//getTimeValue
01579 
01580 int OSResult::getTimeNumber()
01581 {       if (job == NULL) return -1;
01582         if (job->timingInformation == NULL) return -1;
01583         return job->timingInformation->numberOfTimes;
01584 }//getTimeNumber
01585 
01586 
01587 int OSResult::getVariableNumber(){
01588         if(m_iVariableNumber == -1){
01589                 if(optimization == NULL) return -1;
01590                 m_iVariableNumber = optimization->numberOfVariables;
01591         }
01592         return m_iVariableNumber;
01593 }//getVariableNumber
01594 
01595 int OSResult::getObjectiveNumber(){
01596         if(m_iObjectiveNumber == -1){
01597                 if(optimization == NULL) return -1;
01598                 m_iObjectiveNumber = optimization->numberOfObjectives;
01599         }
01600         return m_iObjectiveNumber;
01601 }//getObjectiveNumber
01602 
01603 int OSResult::getConstraintNumber(){
01604         if(m_iConstraintNumber == -1){
01605                 if(optimization == NULL) return -1;
01606                 m_iConstraintNumber = optimization->numberOfConstraints;
01607         }
01608         return m_iConstraintNumber;
01609 }//getConstraintNumber
01610 
01611 int OSResult::getSolutionNumber(){
01612         if(optimization == NULL) return 0;
01613         if(optimization->solution == NULL) return 0;
01614         return optimization->numberOfSolutions;
01615 }//getSolutionNumber
01616 
01617 
01618 OptimizationSolutionStatus* OSResult::getSolutionStatus( int solIdx){
01619         if (optimization == NULL || optimization->solution == NULL) 
01620                 throw ErrorClass("No solution defined");
01621         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01622                 throw ErrorClass("solIdx is outside of range in routine getSolutionStatus()");
01623         if(optimization->solution[solIdx] == NULL) return NULL;
01624         return optimization->solution[solIdx]->status;
01625 }//getSolutionStatus
01626 
01627 string OSResult::getSolutionStatusType(int solIdx){
01628         if (optimization == NULL || optimization->solution == NULL) 
01629                 throw ErrorClass("No solution defined");
01630         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01631                 throw ErrorClass("solIdx is outside of range in routine getSolutionStatusType()");
01632         if (optimization->solution[solIdx] == NULL) return "";
01633         if (optimization->solution[solIdx]->status == NULL) return "";
01634         return optimization->solution[solIdx]->status->type;            
01635 }//getSolutionStatusType
01636 
01637 string OSResult::getSolutionStatusDescription(int solIdx){
01638         if (optimization == NULL || optimization->solution == NULL) 
01639                 throw ErrorClass("No solution defined");
01640         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01641                 throw ErrorClass("solIdx is outside of range in routine getSolutionStatusDescription()");
01642         if (optimization->solution[solIdx] == NULL) return "";
01643         if (optimization->solution[solIdx]->status == NULL) return "";
01644         return optimization->solution[solIdx]->status->description;             
01645 }//getSolutionStatusDescription
01646 
01647 int OSResult::getNumberOfSolutionSubstatuses(int solIdx){
01648         if (optimization == NULL || optimization->solution == NULL) 
01649                 throw ErrorClass("No solution defined");
01650         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01651                 throw ErrorClass("solIdx is outside of range in routine getNumberOfSolutionSubstatuses()");
01652         if (optimization->solution[solIdx] == NULL) return -1;
01653         if (optimization->solution[solIdx]->status == NULL) return -1;
01654         return optimization->solution[solIdx]->status->numberOfSubstatuses;             
01655 }//getNumberOfSolutionSubstatuses
01656 
01657 string OSResult::getSolutionSubstatusType(int solIdx, int substatusIdx){
01658         if (optimization == NULL || optimization->solution == NULL) 
01659                 throw ErrorClass("No solution defined");
01660         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01661                 throw ErrorClass("solIdx is outside of range in routine getSolutionSubstatusType()");
01662         if (optimization->solution[solIdx] == NULL) return "";
01663         if (optimization->solution[solIdx]->status == NULL) return "";
01664         if (substatusIdx < 0 || substatusIdx >= optimization->solution[solIdx]->status->numberOfSubstatuses) 
01665                 throw ErrorClass("solution substatus index is outside of range in routine getSolutionSubstatusType()");
01666         return optimization->solution[solIdx]->status->substatus[substatusIdx]->type;           
01667 }//getSolutionSubstatusType
01668 
01669 string OSResult::getSolutionSubstatusDescription(int solIdx, int substatusIdx){
01670         if (optimization == NULL || optimization->solution == NULL) 
01671                 throw ErrorClass("No solution defined");
01672         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01673                 throw ErrorClass("solIdx is outside of range in routine getSolutionSubstatusDescription()");
01674         if (optimization->solution[solIdx] == NULL) return "";
01675         if (optimization->solution[solIdx]->status == NULL) return "";
01676         if (substatusIdx < 0 || substatusIdx >= optimization->solution[solIdx]->status->numberOfSubstatuses) 
01677                 return "";
01678         return optimization->solution[solIdx]->status->substatus[substatusIdx]->description;            
01679 }//getSolutionSubstatusDescription
01680 
01681 int OSResult::getSolutionTargetObjectiveIdx(int solIdx){
01682         if (optimization == NULL || optimization->solution == NULL) 
01683                 throw ErrorClass("No solution defined");
01684         if (solIdx < 0 || solIdx >=  optimization->numberOfSolutions)
01685                 throw ErrorClass("solIdx is outside of range in routine getSolutionTargetObjectiveIdx()");
01686         if (optimization->solution[solIdx] == NULL) return 0;
01687         return optimization->solution[solIdx]->targetObjectiveIdx;              
01688 }//getSolutionTargetObjectiveIdx
01689 
01690 bool OSResult::getSolutionWeightedObjectives(int solIdx){
01691         if (optimization == NULL || optimization->solution == NULL) 
01692                 throw ErrorClass("No solution defined");
01693         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01694                 throw ErrorClass("solIdx is outside of range in routine getSolutionWeightedObjectives()");
01695         if (optimization->solution[solIdx] == NULL) return false;
01696         return optimization->solution[solIdx]->weightedObjectives;
01697 }//getSolutionWeightedObjectives
01698 
01699 string OSResult::getSolutionMessage(int solIdx){
01700         if(optimization == NULL) return "there is no solution";
01701         if(optimization->solution == NULL || 
01702            solIdx < 0 || solIdx >=  optimization->numberOfSolutions) return "there is no solution";
01703         if(optimization->solution[solIdx] == NULL) return "there is no solution";
01704         return optimization->solution[solIdx]->message;
01705 }//getSolutionMessage
01706 
01707 int OSResult::getNumberOfPrimalVariableValues(int solIdx){
01708         if (optimization == NULL || optimization->solution == NULL) 
01709                 throw ErrorClass("No solution defined");
01710         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01711                 throw ErrorClass("solIdx is outside of range in routine getNumberOfPrimalVariableValues()");
01712         if (optimization->solution[solIdx] == NULL) return -1;
01713         if (optimization->solution[solIdx]->variables == NULL) return -1;
01714         if (optimization->solution[solIdx]->variables->values == NULL) return -1;
01715         return optimization->solution[solIdx]->variables->values->numberOfVar;
01716 }//getNumberOfPrimalVariableValues
01717 
01718 int OSResult::getNumberOfVarValues(int solIdx){
01719         if (optimization == NULL || optimization->solution == NULL) 
01720                 throw ErrorClass("No solution defined");
01721         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01722                 throw ErrorClass("solIdx is outside of range in routine getNumberOfVarValues()");
01723         if (optimization->solution[solIdx] == NULL) return -1;
01724         if (optimization->solution[solIdx]->variables == NULL) return -1;
01725         if (optimization->solution[solIdx]->variables->values == NULL) return -1;
01726         return optimization->solution[solIdx]->variables->values->numberOfVar;
01727 }//getNumberOfVarValues
01728 
01729 int OSResult::getVarValueIdx(int solIdx, int varIdx){
01730         if (optimization == NULL || optimization->solution == NULL) 
01731                 throw ErrorClass("No solution defined");
01732         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01733                 throw ErrorClass("solIdx is outside of range in routine getVarValueIdx()");
01734         if (optimization->solution[solIdx] == NULL) return -1;
01735         if (optimization->solution[solIdx]->variables == NULL) return -1;
01736         if (optimization->solution[solIdx]->variables->values == NULL) return -1;
01737         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->values->numberOfVar)
01738                 throw ErrorClass("varIdx is outside of range in routine getVarValueIdx()");
01739         return optimization->solution[solIdx]->variables->values->var[varIdx]->idx;
01740 }//getVarValueIdx
01741 
01742 double OSResult::getVarValue(int solIdx, int varIdx){
01743         if (optimization == NULL || optimization->solution == NULL) 
01744                 throw ErrorClass("No solution defined");
01745         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01746                 throw ErrorClass("solIdx is outside of range in routine getVarValue()");
01747         if (optimization->solution[solIdx] == NULL) return OSNAN;
01748         if (optimization->solution[solIdx]->variables == NULL) return OSNAN;
01749         if (optimization->solution[solIdx]->variables->values == NULL) return OSNAN;
01750         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->values->numberOfVar)
01751                 throw ErrorClass("varIdx is outside of range in routine getVarValue()");
01752         return optimization->solution[solIdx]->variables->values->var[varIdx]->value;
01753 }//getVarValue
01754 
01755 std::vector<IndexValuePair*> OSResult::getOptimalPrimalVariableValues(int solIdx){
01756         int numberOfVar;
01757         struct IndexValuePair *primalValPair;
01758         int iSolutions = this->getSolutionNumber();
01759         for(int i = 0; i < iSolutions; i++){
01760                 if( i != solIdx) continue;
01761                 if(optimization->solution[i] == NULL) continue;
01762                 if(optimization->solution[i]->variables == NULL) continue;
01763                 if(optimization->solution[i]->variables->values == NULL) continue;
01764                 if((optimization->solution[i]->status->type.find("ptimal") != string::npos && m_mdPrimalValues == NULL) ||
01765                         optimization->solution[i]->status->type.compare("globallyOptimal") == 0){       
01766                         numberOfVar = optimization->solution[i]->variables->values->numberOfVar;        
01767                         for(int j = 0; j < numberOfVar; j++){
01768                                 primalValPair = new IndexValuePair();
01769                                 primalValPair->value = optimization->solution[i]->variables->values->var[j]->value;
01770                                 primalValPair->idx = optimization->solution[i]->variables->values->var[j]->idx;
01771                                 primalVals.push_back( primalValPair);
01772                         }
01773                 }       
01774                 if(optimization->solution[i]->status->type.compare("globallyOptimal") == 0){
01775                         return primalVals;
01776                 }
01777         }
01778         return primalVals;              
01779 }//getOptimalPrimalVariableValues
01780 
01781 
01782 int OSResult::getNumberOfVarValuesString(int solIdx){
01783         if (optimization == NULL || optimization->solution == NULL) 
01784                 throw ErrorClass("No solution defined");
01785         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01786                 throw ErrorClass("solIdx is outside of range in routine getNumberOfVarValuesString()");
01787         if (optimization->solution[solIdx] == NULL) return -1;
01788         if (optimization->solution[solIdx]->variables == NULL) return -1;
01789         if (optimization->solution[solIdx]->variables->valuesString == NULL) return -1;
01790         return optimization->solution[solIdx]->variables->valuesString->numberOfVar;
01791 }//getNumberOfVarValuesString
01792 
01793 int OSResult::getVarValueStringIdx(int solIdx, int varIdx){
01794         if (optimization == NULL || optimization->solution == NULL) 
01795                 throw ErrorClass("No solution defined");
01796         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01797                 throw ErrorClass("solIdx is outside of range in routine getVarValueStringIdx()");
01798         if (optimization->solution[solIdx] == NULL) return -1;
01799         if (optimization->solution[solIdx]->variables == NULL) return -1;
01800         if (optimization->solution[solIdx]->variables->valuesString == NULL) return -1;
01801         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->valuesString->numberOfVar)
01802                 throw ErrorClass("varIdx is outside of range in routine getVarValueStringIdx()");
01803         return optimization->solution[solIdx]->variables->valuesString->var[varIdx]->idx;
01804 }//getVarValueStringIdx
01805 
01806 std::string OSResult::getVarValueString(int solIdx, int varIdx){
01807         if (optimization == NULL || optimization->solution == NULL) 
01808                 throw ErrorClass("No solution defined");
01809         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01810                 throw ErrorClass("solIdx is outside of range in routine getVarValueString()");
01811         if (optimization->solution[solIdx] == NULL) return NULL;
01812         if (optimization->solution[solIdx]->variables == NULL) return NULL;
01813         if (optimization->solution[solIdx]->variables->valuesString == NULL) return NULL;
01814         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->valuesString->numberOfVar)
01815                 throw ErrorClass("varIdx is outside of range in routine getVarValueString()");
01816         return optimization->solution[solIdx]->variables->valuesString->var[varIdx]->value;
01817 }//getVarValueString
01818 
01819 int OSResult::getBasisStatusNumberOfEl(int solIdx, int object, int status)
01820 {
01821         if (optimization == NULL || optimization->solution == NULL) 
01822                 throw ErrorClass("No solution defined");
01823         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01824                 throw ErrorClass("solIdx is outside of range in routine getBasisStatusNumberOfEl()");
01825         if (optimization->solution[solIdx] == NULL) return -1;
01826 
01827         switch (object)
01828         {
01829                 case ENUM_PROBLEM_COMPONENT_variables:
01830                 {
01831                         if (optimization->solution[solIdx]->variables == NULL) return -1;
01832                         if (optimization->solution[solIdx]->variables->basisStatus == NULL) return -1;
01833                         return optimization->solution[solIdx]->variables->basisStatus->getNumberOfEl(status);
01834                 }
01835                 case ENUM_PROBLEM_COMPONENT_objectives:
01836                 {
01837                         if (optimization->solution[solIdx]->objectives == NULL) return -1;
01838                         if (optimization->solution[solIdx]->objectives->basisStatus == NULL) return -1;
01839                         return optimization->solution[solIdx]->objectives->basisStatus->getNumberOfEl(status);
01840                 }
01841                 case ENUM_PROBLEM_COMPONENT_constraints:
01842                 {
01843                         if (optimization->solution[solIdx]->constraints == NULL) return -1;
01844                         if (optimization->solution[solIdx]->constraints->basisStatus == NULL) return -1;
01845                         return optimization->solution[solIdx]->constraints->basisStatus->getNumberOfEl(status);
01846                 }
01847                 default: 
01848                         throw ErrorClass("target object not implemented in getBasisStatusNumberOfEl");
01849         }
01850 }//getBasisStatusNumberOfEl
01851 
01852 int OSResult::getBasisStatusEl(int solIdx, int object, int status, int j)
01853 {
01854         if (optimization == NULL || optimization->solution == NULL) 
01855                 throw ErrorClass("No solution defined");
01856         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01857                 throw ErrorClass("solIdx is outside of range in routine getBasisStatusEl()");
01858         if (optimization->solution[solIdx] == NULL) 
01859                 throw ErrorClass("solution never defined in routine getBasisStatusEl()");
01860 
01861         switch (object)
01862         {
01863                 case ENUM_PROBLEM_COMPONENT_variables:
01864                 {
01865                         if (optimization->solution[solIdx]->variables == NULL) 
01866                                 throw ErrorClass("variables result never defined in routine getBasisStatusEl()");
01867                         if (optimization->solution[solIdx]->variables->basisStatus == NULL)
01868                                 throw ErrorClass("basis status never defined in routine getBasisStatusEl()");
01869                         return optimization->solution[solIdx]->variables->basisStatus->getEl(status, j);
01870                 }
01871                 case ENUM_PROBLEM_COMPONENT_objectives:
01872                 {
01873                         if (optimization->solution[solIdx]->objectives == NULL) 
01874                                 throw ErrorClass("objectives result never defined in routine getBasisStatusEl()");
01875                         if (optimization->solution[solIdx]->objectives->basisStatus == NULL) 
01876                                 throw ErrorClass("basis status never defined in routine getBasisStatusEl()");
01877                         return optimization->solution[solIdx]->objectives->basisStatus->getEl(status, j);
01878                 }
01879                 case ENUM_PROBLEM_COMPONENT_constraints:
01880                 {
01881                         if (optimization->solution[solIdx]->constraints == NULL)
01882                                 throw ErrorClass("constraints result never defined in routine getBasisStatusEl()");
01883                         if (optimization->solution[solIdx]->constraints->basisStatus == NULL) 
01884                                 throw ErrorClass("basis status never defined in routine getBasisStatusEl()");
01885                         return optimization->solution[solIdx]->constraints->basisStatus->getEl(status, j);
01886                 }
01887                 default: 
01888                         throw ErrorClass("target object not implemented in getBasisStatusEl");
01889         }
01890 }//getBasisStatusEl
01891 
01892 /*
01893 int OSResult::getNumberOfBasisVar(int solIdx){
01894         if (optimization == NULL || optimization->solution == NULL) 
01895                 throw ErrorClass("No solution defined");
01896         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01897                 throw ErrorClass("solIdx is outside of range in routine getNumberOfBasisVar()");
01898         if (optimization->solution[solIdx] == NULL) return -1;
01899         if (optimization->solution[solIdx]->variables == NULL) return -1;
01900         if (optimization->solution[solIdx]->variables->basisStatus == NULL) return -1;
01901         return optimization->solution[solIdx]->variables->basisStatus->numberOfVar;
01902 }//getNumberOfBasisVar
01903 
01904 int OSResult::getBasisVarIdx(int solIdx, int varIdx){
01905         if (optimization == NULL || optimization->solution == NULL) 
01906                 throw ErrorClass("No solution defined");
01907         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01908                 throw ErrorClass("solIdx is outside of range in routine getBasisVarIdx()");
01909         if (optimization->solution[solIdx] == NULL) return -1;
01910         if (optimization->solution[solIdx]->variables == NULL) return -1;
01911         if (optimization->solution[solIdx]->variables->valuesString == NULL) return -1;
01912         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->basisStatus->numberOfVar)
01913                 throw ErrorClass("varIdx is outside of range in routine getBasisVarIdx()");
01914         return optimization->solution[solIdx]->variables->basisStatus->var[varIdx]->idx;
01915 }//getBasisVarIdx
01916 
01917 std::string OSResult::getBasisVar(int solIdx, int varIdx){
01918         if (optimization == NULL || optimization->solution == NULL) 
01919                 throw ErrorClass("No solution defined");
01920         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01921                 throw ErrorClass("solIdx is outside of range in routine getBasisVar()");
01922         if (optimization->solution[solIdx] == NULL) return "";
01923         if (optimization->solution[solIdx]->variables == NULL) return "";
01924         if (optimization->solution[solIdx]->variables->valuesString == NULL) return "";
01925         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->basisStatus->numberOfVar)
01926                 throw ErrorClass("varIdx is outside of range in routine getBasisVar()");
01927         return optimization->solution[solIdx]->variables->basisStatus->var[varIdx]->value;
01928 }//getBasisVar
01929 */
01930 
01931 int OSResult::getNumberOfOtherVariableResults(int solIdx){
01932         if(m_iNumberOfOtherVariableResults == -1){
01933                 if (optimization == NULL || optimization->solution == NULL) 
01934                         throw ErrorClass("No solution defined");
01935                 if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
01936                         throw ErrorClass("solIdx is outside of range in routine getNumberOfOtherVariableResults()");
01937                 if(optimization->solution[solIdx] == NULL) return -1;
01938                 if(optimization->solution[solIdx]->variables == NULL) return -1;
01939                 if(optimization->solution[solIdx]->variables->other == NULL) return -1;
01940                 m_iNumberOfOtherVariableResults = optimization->solution[solIdx]->variables->numberOfOtherVariableResults;
01941         }
01942         return m_iNumberOfOtherVariableResults;
01943 }//getNumberOfOtherVariableResults
01944 
01945 int OSResult::getAnOtherVariableResultNumberOfVar(int solIdx, int iOther){
01946         if (optimization == NULL || optimization->solution == NULL) 
01947                 throw ErrorClass("No solution defined");
01948         int iSolutions = this->getSolutionNumber();
01949         if (solIdx < 0 || solIdx >= iSolutions)
01950                 throw ErrorClass("solIdx is outside of range in routine getAnOtherVariableResultNumberOfVar()");
01951         if (optimization->solution[solIdx] == NULL) return -1;
01952         if (optimization->solution[solIdx]->variables == NULL) return -1;
01953         if (optimization->solution[solIdx]->variables->other == NULL) return -1;
01954         if (iOther < 0 || iOther >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
01955                 throw ErrorClass("other variables result index is outside of range in routine getAnOtherVariableResultNumberOfVar()");
01956         return optimization->solution[solIdx]->variables->other[iOther]->numberOfVar;
01957 }//getAnOtherVariableResultNumberOfVar
01958         
01959 string OSResult::getOtherVariableResultName(int solIdx, int otherIdx){
01960         if (optimization == NULL || optimization->solution == NULL) 
01961                 throw ErrorClass("No solution defined");
01962         int iSolutions = this->getSolutionNumber();
01963         if (solIdx < 0 || solIdx >= iSolutions)
01964                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultName()");
01965         if (optimization->solution[solIdx] == NULL) return "";
01966         if (optimization->solution[solIdx]->variables == NULL) return "";
01967         if (optimization->solution[solIdx]->variables->other == NULL) return "";
01968         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
01969                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultName()");
01970         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return "";
01971         return optimization->solution[solIdx]->variables->other[ otherIdx]->name;
01972 }//getOtherVariableResultName
01973 
01974 string OSResult::getOtherVariableResultValue(int solIdx, int otherIdx){
01975         if (optimization == NULL || optimization->solution == NULL) 
01976                 throw ErrorClass("No solution defined");
01977         int iSolutions = this->getSolutionNumber();
01978         if (solIdx < 0 || solIdx >= iSolutions)
01979                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultValue()");
01980         if (optimization->solution[solIdx] == NULL) return "";
01981         if (optimization->solution[solIdx]->variables == NULL) return "";
01982         if (optimization->solution[solIdx]->variables->other == NULL) return "";
01983         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
01984                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultValue()");
01985         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return "";
01986         return optimization->solution[solIdx]->variables->other[ otherIdx]->value;
01987 }//getOtherVariableResultValue
01988 
01989 string OSResult::getOtherVariableResultDescription(int solIdx, int otherIdx){
01990         if (optimization == NULL || optimization->solution == NULL) 
01991                 throw ErrorClass("No solution defined");
01992         int iSolutions = this->getSolutionNumber();
01993         if (solIdx < 0 || solIdx >= iSolutions)
01994                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultDescription()");
01995         if (optimization->solution[solIdx] == NULL) return "";
01996         if (optimization->solution[solIdx]->variables == NULL) return "";
01997         if (optimization->solution[solIdx]->variables->other == NULL) return "";
01998         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
01999                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultDescription()");
02000         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return "";
02001         return optimization->solution[solIdx]->variables->other[ otherIdx]->description;
02002 }//getOtherVariableResultDescription
02003 
02004 int OSResult::getOtherVariableResultNumberOfVar(int solIdx, int otherIdx){
02005         if (optimization == NULL || optimization->solution == NULL) 
02006                 throw ErrorClass("No solution defined");
02007         int iSolutions = this->getSolutionNumber();
02008         if (solIdx < 0 || solIdx >= iSolutions)
02009                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultNumberOfVar()");
02010         if (optimization->solution[solIdx] == NULL) return -1;
02011         if (optimization->solution[solIdx]->variables == NULL) return -1;
02012         if (optimization->solution[solIdx]->variables->other == NULL) return -1;
02013         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02014                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultNumberOfVar()");
02015         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return -1;
02016         return optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar;
02017 }//getOtherVariableResultNumberOfVar
02018 
02019 int OSResult::getOtherVariableResultVarIdx(int solIdx, int otherIdx, int varIdx){
02020         if (optimization == NULL || optimization->solution == NULL) 
02021                 throw ErrorClass("No solution defined");
02022         int iSolutions = this->getSolutionNumber();
02023         if (solIdx < 0 || solIdx >= iSolutions)
02024                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultVarIdx()");
02025         if (optimization->solution[solIdx] == NULL) return -1;
02026         if (optimization->solution[solIdx]->variables == NULL) return -1;
02027         if (optimization->solution[solIdx]->variables->other == NULL) return -1;
02028         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02029                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultVarIdx()");
02030         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return -1;
02031         if (optimization->solution[solIdx]->variables->other[ otherIdx]->var == NULL) return -1;
02032         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar)
02033                 throw ErrorClass("varIdx is outside of range in routine getOtherVariableResultVarIdx()");
02034         return optimization->solution[solIdx]->variables->other[otherIdx]->var[varIdx]->idx;
02035 }//getOtherVariableResultVarIdx
02036 
02037 string OSResult::getOtherVariableResultVar(int solIdx, int otherIdx, int varIdx){
02038         if (optimization == NULL || optimization->solution == NULL) 
02039                 throw ErrorClass("No solution defined");
02040         int iSolutions = this->getSolutionNumber();
02041         if (solIdx < 0 || solIdx >= iSolutions)
02042                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultVar()");
02043         if (optimization->solution[solIdx] == NULL) return "";
02044         if (optimization->solution[solIdx]->variables == NULL) return "";
02045         if (optimization->solution[solIdx]->variables->other == NULL) return "";
02046         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02047                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultVar()");
02048         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return "";
02049         if (optimization->solution[solIdx]->variables->other[ otherIdx]->var == NULL) return "";
02050         if (varIdx < 0 || varIdx >= optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar)
02051                 throw ErrorClass("varIdx is outside of range in routine getOtherVariableResultVar()");
02052         return optimization->solution[solIdx]->variables->other[otherIdx]->var[varIdx]->value;
02053 }//getOtherVariableResultVar
02054 
02055 
02056 int OSResult::getOtherVariableResultNumberOfEnumerations(int solIdx, int otherIdx){
02057         if (optimization == NULL || optimization->solution == NULL) 
02058                 throw ErrorClass("No solution defined");
02059         int iSolutions = this->getSolutionNumber();
02060         if (solIdx < 0 || solIdx >= iSolutions)
02061                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultNumberOfEnumerations()");
02062         if (optimization->solution[solIdx] == NULL) return -1;
02063         if (optimization->solution[solIdx]->variables == NULL) return -1;
02064         if (optimization->solution[solIdx]->variables->other == NULL) return -1;
02065         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02066                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultNumberOfEnumerations()");
02067         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return -1;
02068         return optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfEnumerations;
02069 }//getOtherVariableResultNumberOfEnumerations
02070 
02071 
02072 std::string OSResult::getOtherVariableResultEnumerationValue(int solIdx,int otherIdx, int enumIdx)
02073 {
02074         if (optimization == NULL || optimization->solution == NULL) 
02075                 throw ErrorClass("No solution defined");
02076         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02077                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultEnumerationValue()");
02078         if (optimization->solution[solIdx] == NULL) 
02079                 throw ErrorClass("solution never defined in routine getOtherVariableResultEnumerationValue()");
02080 
02081         if (optimization->solution[solIdx]->variables == NULL) 
02082                 throw ErrorClass("variables result never defined in routine getOtherVariableResultEnumerationValue()");
02083         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02084                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultEnumerationValue()");
02085         if (optimization->solution[solIdx]->variables->other == NULL)
02086                 throw ErrorClass("other variable array never defined in routine getOtherVariableResultEnumerationValue()");
02087         if (optimization->solution[solIdx]->variables->other[otherIdx] == NULL)
02088                 throw ErrorClass("other variable result never defined in routine getOtherVariableResultEnumerationValue()");
02089         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration == NULL)
02090                 throw ErrorClass("enumerations array never defined in routine getOtherVariableResultEnumerationValue()");
02091         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->variables->other[otherIdx]->numberOfEnumerations)
02092                 throw ErrorClass("enumIdx is outside of range in routine getOtherVariableResultEnumerationValue()");
02093         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx] == NULL)
02094                 throw ErrorClass("enumeration never defined in routine getOtherVariableResultEnumerationValue()");
02095 
02096         return optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx]->value;
02097 }//getOtherVariableResultEnumerationValue
02098 
02099 std::string OSResult::getOtherVariableResultEnumerationDescription(int solIdx,int otherIdx, int enumIdx)
02100 {
02101         if (optimization == NULL || optimization->solution == NULL) 
02102                 throw ErrorClass("No solution defined");
02103         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02104                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultEnumerationDescription()");
02105         if (optimization->solution[solIdx] == NULL) 
02106                 throw ErrorClass("solution never defined in routine getOtherVariableResultEnumerationDescription()");
02107 
02108         if (optimization->solution[solIdx]->variables == NULL) 
02109                 throw ErrorClass("variables result never defined in routine getOtherVariableResultEnumerationDescription()");
02110         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02111                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultEnumerationDescription()");
02112         if (optimization->solution[solIdx]->variables->other == NULL)
02113                 throw ErrorClass("other variable array never defined in routine getOtherVariableResultEnumerationDescription()");
02114         if (optimization->solution[solIdx]->variables->other[otherIdx] == NULL)
02115                 throw ErrorClass("other variable result never defined in routine getOtherVariableResultEnumerationDescription()");
02116         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration == NULL)
02117                 throw ErrorClass("enumerations array never defined in routine getOtherVariableResultEnumerationDescription()");
02118         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->variables->other[otherIdx]->numberOfEnumerations)
02119                 throw ErrorClass("enumIdx is outside of range in routine getOtherVariableResultEnumerationDescription()");
02120         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx] == NULL)
02121                 throw ErrorClass("enumeration never defined in routine getOtherVariableResultEnumerationDescription()");
02122 
02123         return optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx]->description;
02124 }//getOtherVariableResultEnumerationDescription
02125 
02126 int OSResult::getOtherVariableResultEnumerationNumberOfEl(int solIdx,int otherIdx, int enumIdx)
02127 {
02128         if (optimization == NULL || optimization->solution == NULL) 
02129                 throw ErrorClass("No solution defined");
02130         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02131                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultEnumerationNumberOfEl()");
02132         if (optimization->solution[solIdx] == NULL) 
02133                 throw ErrorClass("solution never defined in routine getOtherVariableResultEnumerationNumberOfEl()");
02134 
02135         if (optimization->solution[solIdx]->variables == NULL) 
02136                 throw ErrorClass("variables result never defined in routine getOtherVariableResultEnumerationNumberOfEl()");
02137         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02138                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultEnumerationNumberOfEl()");
02139         if (optimization->solution[solIdx]->variables->other == NULL)
02140                 throw ErrorClass("other variable array never defined in routine getOtherVariableResultEnumerationNumberOfEl()");
02141         if (optimization->solution[solIdx]->variables->other[otherIdx] == NULL)
02142                 throw ErrorClass("other variable result never defined in routine getOtherVariableResultEnumerationNumberOfEl()");
02143         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration == NULL)
02144                 throw ErrorClass("enumerations array never defined in routine getOtherVariableResultEnumerationNumberOfEl()");
02145         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->variables->other[otherIdx]->numberOfEnumerations)
02146                 throw ErrorClass("enumIdx is outside of range in routine getOtherVariableResultEnumerationNumberOfEl()");
02147         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx] == NULL)
02148                 throw ErrorClass("enumeration never defined in routine getOtherVariableResultEnumerationNumberOfEl()");
02149 
02150         return optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx]->numberOfEl;
02151 }//getOtherVariableResultEnumerationNumberOfEl
02152 
02153 int OSResult::getOtherVariableResultEnumerationEl(int solIdx,int otherIdx, int enumIdx, int j)
02154 {
02155         if (optimization == NULL || optimization->solution == NULL) 
02156                 throw ErrorClass("No solution defined");
02157         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02158                 throw ErrorClass("solIdx is outside of range in routine getOtherVariableResultEnumerationEl()");
02159         if (optimization->solution[solIdx] == NULL) 
02160                 throw ErrorClass("solution never defined in routine getOtherVariableResultEnumerationEl()");
02161 
02162         if (optimization->solution[solIdx]->variables == NULL) 
02163                 throw ErrorClass("variables result never defined in routine getOtherVariableResultEnumerationEl()");
02164         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02165                 throw ErrorClass("otherIdx is outside of range in routine getOtherVariableResultEnumerationEl()");
02166         if (optimization->solution[solIdx]->variables->other == NULL)
02167                 throw ErrorClass("other variable array never defined in routine getOtherVariableResultEnumerationEl()");
02168         if (optimization->solution[solIdx]->variables->other[otherIdx] == NULL)
02169                 throw ErrorClass("other variable result never defined in routine getOtherVariableResultEnumerationEl()");
02170         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration == NULL)
02171                 throw ErrorClass("enumerations array never defined in routine getOtherVariableResultEnumerationEl()");
02172         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->variables->other[otherIdx]->numberOfEnumerations)
02173                 throw ErrorClass("enumIdx is outside of range in routine getOtherVariableResultEnumerationEl()");
02174         if (optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx] == NULL)
02175                 throw ErrorClass("enumeration never defined in routine getOtherVariableResultEnumerationEl()");
02176 
02177         return optimization->solution[solIdx]->variables->other[otherIdx]->enumeration[enumIdx]->getEl(j);
02178 }//getOtherVariableResultEnumerationEl
02179 
02180 /*
02181 int* OSResult::getOtherOptionResultName(int solIdx, int otherIdx, char object, int status)
02182 {
02183         if (optimization == NULL || optimization->solution == NULL) 
02184                 throw ErrorClass("No solution defined");
02185         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02186                 throw ErrorClass("solIdx is outside of range in routine getOtherOptionResultEl()");
02187         if (optimization->solution[solIdx] == NULL) 
02188                 throw ErrorClass("solution never defined in routine getOtherOptionResultEl()");
02189 
02190         switch (object)
02191         {
02192                 case ENUM_PROBLEM_COMPONENT_variables:
02193                 {
02194                         if (optimization->solution[solIdx]->variables == NULL) 
02195                                 throw ErrorClass("variables result never defined in routine getOtherOptionResultEl()");
02196                         if (optimization->solution[solIdx]->variables->other == NULL)
02197                                 throw ErrorClass("other variable array never defined in routine getOtherOptionResultEl()");
02198                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02199                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02200                         return optimization->solution[solIdx]->variables->other[otherIdx]->getEl(status);
02201                 }
02202                 case ENUM_PROBLEM_COMPONENT_objectives:
02203                 {
02204                         if (optimization->solution[solIdx]->objectives == NULL) 
02205                                 throw ErrorClass("objectives result never defined in routine getOtherOptionResultEl()");
02206                         if (optimization->solution[solIdx]->objectives->other == NULL) 
02207                                 throw ErrorClass("other objective array never defined in routine getOtherOptionResultEl()");
02208                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02209                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02210                         return optimization->solution[solIdx]->objectives->other[otherIdx]->getEl(status);
02211                 }
02212                 case ENUM_PROBLEM_COMPONENT_constraints:
02213                 {
02214                         if (optimization->solution[solIdx]->constraints == NULL)
02215                                 throw ErrorClass("constraints result never defined in routine getOtherOptionResultEl()");
02216                         if (optimization->solution[solIdx]->constraints->other == NULL) 
02217                                 throw ErrorClass("other constraint array never defined in routine getOtherOptionResultEl()");
02218                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02219                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02220                         return optimization->solution[solIdx]->constraints->other[otherIdx]->getEl(status);
02221                 }
02222                 default: 
02223                         throw ErrorClass("target object not implemented in getOtherOptionResultEl");
02224         }
02225 }//getOtherOptionResultEl
02226 
02227 
02228 int* OSResult::getOtherOptionResultEl(int solIdx, int otherIdx, char object, int status)
02229 {
02230         if (optimization == NULL || optimization->solution == NULL) 
02231                 throw ErrorClass("No solution defined");
02232         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02233                 throw ErrorClass("solIdx is outside of range in routine getOtherOptionResultEl()");
02234         if (optimization->solution[solIdx] == NULL) 
02235                 throw ErrorClass("solution never defined in routine getOtherOptionResultEl()");
02236 
02237         switch (object)
02238         {
02239                 case ENUM_PROBLEM_COMPONENT_variables:
02240                 {
02241                         if (optimization->solution[solIdx]->variables == NULL) 
02242                                 throw ErrorClass("variables result never defined in routine getOtherOptionResultEl()");
02243                         if (optimization->solution[solIdx]->variables->other == NULL)
02244                                 throw ErrorClass("other variable array never defined in routine getOtherOptionResultEl()");
02245                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02246                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02247                         return optimization->solution[solIdx]->variables->other[otherIdx]->getEl(status);
02248                 }
02249                 case ENUM_PROBLEM_COMPONENT_objectives:
02250                 {
02251                         if (optimization->solution[solIdx]->objectives == NULL) 
02252                                 throw ErrorClass("objectives result never defined in routine getOtherOptionResultEl()");
02253                         if (optimization->solution[solIdx]->objectives->other == NULL) 
02254                                 throw ErrorClass("other objective array never defined in routine getOtherOptionResultEl()");
02255                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02256                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02257                         return optimization->solution[solIdx]->objectives->other[otherIdx]->getEl(status);
02258                 }
02259                 case ENUM_PROBLEM_COMPONENT_constraints:
02260                 {
02261                         if (optimization->solution[solIdx]->constraints == NULL)
02262                                 throw ErrorClass("constraints result never defined in routine getOtherOptionResultEl()");
02263                         if (optimization->solution[solIdx]->constraints->other == NULL) 
02264                                 throw ErrorClass("other constraint array never defined in routine getOtherOptionResultEl()");
02265                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02266                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02267                         return optimization->solution[solIdx]->constraints->other[otherIdx]->getEl(status);
02268                 }
02269                 default: 
02270                         throw ErrorClass("target object not implemented in getOtherOptionResultEl");
02271         }
02272 }//getOtherOptionResultEl
02273 
02274 
02275 int* OSResult::getOtherOptionResultEl(int solIdx, int otherIdx, char object, int status)
02276 {
02277         if (optimization == NULL || optimization->solution == NULL) 
02278                 throw ErrorClass("No solution defined");
02279         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02280                 throw ErrorClass("solIdx is outside of range in routine getOtherOptionResultEl()");
02281         if (optimization->solution[solIdx] == NULL) 
02282                 throw ErrorClass("solution never defined in routine getOtherOptionResultEl()");
02283 
02284         switch (object)
02285         {
02286                 case ENUM_PROBLEM_COMPONENT_variables:
02287                 {
02288                         if (optimization->solution[solIdx]->variables == NULL) 
02289                                 throw ErrorClass("variables result never defined in routine getOtherOptionResultEl()");
02290                         if (optimization->solution[solIdx]->variables->other == NULL)
02291                                 throw ErrorClass("other variable array never defined in routine getOtherOptionResultEl()");
02292                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02293                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02294                         return optimization->solution[solIdx]->variables->other[otherIdx]->getEl(status);
02295                 }
02296                 case ENUM_PROBLEM_COMPONENT_objectives:
02297                 {
02298                         if (optimization->solution[solIdx]->objectives == NULL) 
02299                                 throw ErrorClass("objectives result never defined in routine getOtherOptionResultEl()");
02300                         if (optimization->solution[solIdx]->objectives->other == NULL) 
02301                                 throw ErrorClass("other objective array never defined in routine getOtherOptionResultEl()");
02302                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02303                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02304                         return optimization->solution[solIdx]->objectives->other[otherIdx]->getEl(status);
02305                 }
02306                 case ENUM_PROBLEM_COMPONENT_constraints:
02307                 {
02308                         if (optimization->solution[solIdx]->constraints == NULL)
02309                                 throw ErrorClass("constraints result never defined in routine getOtherOptionResultEl()");
02310                         if (optimization->solution[solIdx]->constraints->other == NULL) 
02311                                 throw ErrorClass("other constraint array never defined in routine getOtherOptionResultEl()");
02312                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02313                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02314                         return optimization->solution[solIdx]->constraints->other[otherIdx]->getEl(status);
02315                 }
02316                 default: 
02317                         throw ErrorClass("target object not implemented in getOtherOptionResultEl");
02318         }
02319 }//getOtherOptionResultEl
02320 
02321 
02322 int* OSResult::getOtherOptionResultEl(int solIdx, int otherIdx, char object, int status)
02323 {
02324         if (optimization == NULL || optimization->solution == NULL) 
02325                 throw ErrorClass("No solution defined");
02326         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02327                 throw ErrorClass("solIdx is outside of range in routine getOtherOptionResultEl()");
02328         if (optimization->solution[solIdx] == NULL) 
02329                 throw ErrorClass("solution never defined in routine getOtherOptionResultEl()");
02330 
02331         switch (object)
02332         {
02333                 case ENUM_PROBLEM_COMPONENT_variables:
02334                 {
02335                         if (optimization->solution[solIdx]->variables == NULL) 
02336                                 throw ErrorClass("variables result never defined in routine getOtherOptionResultEl()");
02337                         if (optimization->solution[solIdx]->variables->other == NULL)
02338                                 throw ErrorClass("other variable array never defined in routine getOtherOptionResultEl()");
02339                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->variables->numberOfOtherVariableResults)
02340                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02341                         return optimization->solution[solIdx]->variables->other[otherIdx]->getEl(status);
02342                 }
02343                 case ENUM_PROBLEM_COMPONENT_objectives:
02344                 {
02345                         if (optimization->solution[solIdx]->objectives == NULL) 
02346                                 throw ErrorClass("objectives result never defined in routine getOtherOptionResultEl()");
02347                         if (optimization->solution[solIdx]->objectives->other == NULL) 
02348                                 throw ErrorClass("other objective array never defined in routine getOtherOptionResultEl()");
02349                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02350                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02351                         return optimization->solution[solIdx]->objectives->other[otherIdx]->getEl(status);
02352                 }
02353                 case ENUM_PROBLEM_COMPONENT_constraints:
02354                 {
02355                         if (optimization->solution[solIdx]->constraints == NULL)
02356                                 throw ErrorClass("constraints result never defined in routine getOtherOptionResultEl()");
02357                         if (optimization->solution[solIdx]->constraints->other == NULL) 
02358                                 throw ErrorClass("other constraint array never defined in routine getOtherOptionResultEl()");
02359                         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02360                                 throw ErrorClass("otherIdx is outside of range in routine getOtherOptionResultEl()");
02361                         return optimization->solution[solIdx]->constraints->other[otherIdx]->getEl(status);
02362                 }
02363                 default: 
02364                         throw ErrorClass("target object not implemented in getOtherOptionResultEl");
02365         }
02366 }//getOtherOptionResultEl
02367 */
02368 
02369 int OSResult::getNumberOfObjValues(int solIdx){
02370         if (optimization == NULL || optimization->solution == NULL) 
02371                 throw ErrorClass("No solution defined");
02372         int iSolutions = this->getSolutionNumber();
02373         if (solIdx < 0 || solIdx >= iSolutions)
02374                 throw ErrorClass("solIdx is outside of range in routine getNumberOfObjValues()");
02375         if (optimization->solution[solIdx] == NULL) return -1;
02376         if (optimization->solution[solIdx]->objectives == NULL) return -1;
02377         if (optimization->solution[solIdx]->objectives->values == NULL) return -1;
02378         return optimization->solution[solIdx]->objectives->values->numberOfObj;
02379 }//getNumberOfObjValues
02380 
02381 int OSResult::getObjValueIdx(int solIdx, int objIdx){
02382         if (optimization == NULL || optimization->solution == NULL) 
02383                 throw ErrorClass("No solution defined");
02384         int iSolutions = this->getSolutionNumber();
02385         if (solIdx < 0 || solIdx >= iSolutions)
02386                 throw ErrorClass("solIdx is outside of range in routine getObjValueIdx()");
02387         if (optimization->solution[solIdx] == NULL) return 0;
02388         if (optimization->solution[solIdx]->objectives == NULL) return 0;
02389         if (optimization->solution[solIdx]->objectives->values == NULL) return 0;
02390         if (objIdx < 0 || objIdx >= optimization->solution[solIdx]->objectives->values->numberOfObj)
02391                 throw ErrorClass("objIdx is outside of range in routine getObjValueIdx()");
02392         return optimization->solution[solIdx]->objectives->values->obj[objIdx]->idx;
02393 }//getObjValueIdx
02394 
02395 double OSResult::getObjValue(int solIdx, int objIdx){
02396         if (optimization == NULL || optimization->solution == NULL) 
02397                 throw ErrorClass("No solution defined");
02398         int iSolutions = this->getSolutionNumber();  
02399         if (solIdx < 0 || solIdx >= iSolutions)
02400                 throw ErrorClass("solIdx is outside of range in routine getObjValue()");
02401         if (optimization->solution[solIdx] == NULL) return OSNAN;
02402         if (optimization->solution[solIdx]->objectives == NULL) return OSNAN;
02403         if (optimization->solution[solIdx]->objectives->values == NULL) return OSNAN;
02404         if (objIdx < 0 || objIdx >= optimization->solution[solIdx]->objectives->values->numberOfObj)
02405                 throw ErrorClass("objIdx is outside of range in routine getObjValue()");
02406         return optimization->solution[solIdx]->objectives->values->obj[objIdx]->value;
02407 }//getObjValue
02408 
02409 double OSResult::getOptimalObjValue(int objIdx, int solIdx)
02410 {
02411         if (this->optimization == NULL || this->optimization->solution == NULL)   
02412                 throw ErrorClass("No optimization or solution object defined");  
02413         int iSolutions = this->getSolutionNumber();  
02414         for (int i = 0; i < iSolutions; i++){  
02415                 if(i != solIdx) continue;  
02416                 if(this->optimization->solution[i]->targetObjectiveIdx != objIdx) continue;  
02417                 if((this->optimization->solution[i]->status->type.find("ptimal") != string::npos ) ||  
02418                                 this->optimization->solution[i]->status->type.compare("globallyOptimal") == 0){   
02419                         return  this->optimization->solution[i]->objectives->values->obj[ abs( objIdx)  -1 ]->value;  
02420                 }
02421                 else{  
02422                         throw ErrorClass("There is no optimal solution");  
02423                 }
02424         }
02425         throw ErrorClass("There is no optimal solution");  
02426 }//getOptimalObjValue  
02427 
02428 int OSResult::getNumberOfOtherObjectiveResults(int solIdx){
02429         if (optimization == NULL || optimization->solution == NULL) 
02430                 throw ErrorClass("No solution defined");
02431         int iSolutions = this->getSolutionNumber();
02432         if (solIdx < 0 || solIdx >= iSolutions)
02433                 throw ErrorClass("solIdx is outside of range in routine getNumberOfOtherObjectiveResults()");
02434         if (optimization->solution[solIdx]->objectives == NULL) return -1;
02435         if (optimization->solution[solIdx]->objectives->other == NULL) return -1;
02436         return optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults;
02437 }//getNumberOfOtherObjectiveResults
02438 
02439 
02440 string OSResult::getOtherObjectiveResultName(int solIdx, int otherIdx){
02441         if (optimization == NULL || optimization->solution == NULL) 
02442                 throw ErrorClass("No solution defined");
02443         int iSolutions = this->getSolutionNumber();
02444         if (solIdx < 0 || solIdx >= iSolutions)
02445                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultName()");
02446         if (optimization->solution[solIdx] == NULL) return "";
02447         if (optimization->solution[solIdx]->objectives == NULL) return "";
02448         if (optimization->solution[solIdx]->objectives->other == NULL) return "";
02449         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02450                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultName()");
02451         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return "";
02452         return optimization->solution[solIdx]->objectives->other[ otherIdx]->name;
02453 }//getOtherObjectiveResultName
02454 
02455 string OSResult::getOtherObjectiveResultValue(int solIdx, int otherIdx){
02456         if (optimization == NULL || optimization->solution == NULL) 
02457                 throw ErrorClass("No solution defined");
02458         int iSolutions = this->getSolutionNumber();
02459         if (solIdx < 0 || solIdx >= iSolutions)
02460                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultValue()");
02461         if (optimization->solution[solIdx] == NULL) return "";
02462         if (optimization->solution[solIdx]->objectives == NULL) return "";
02463         if (optimization->solution[solIdx]->objectives->other == NULL) return "";
02464         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02465                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultValue()");
02466         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return "";
02467         return optimization->solution[solIdx]->objectives->other[ otherIdx]->value;
02468 }//getOtherObjectiveResultValue
02469 
02470 string OSResult::getOtherObjectiveResultDescription(int solIdx, int otherIdx){
02471         if (optimization == NULL || optimization->solution == NULL) 
02472                 throw ErrorClass("No solution defined");
02473         int iSolutions = this->getSolutionNumber();
02474         if (solIdx < 0 || solIdx >= iSolutions)
02475                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultDescription()");
02476         if (optimization->solution[solIdx] == NULL) return "";
02477         if (optimization->solution[solIdx]->objectives == NULL) return "";
02478         if (optimization->solution[solIdx]->objectives->other == NULL) return "";
02479         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02480                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultDescription()");
02481         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return "";
02482         return optimization->solution[solIdx]->objectives->other[ otherIdx]->description;
02483 }//getOtherObjectiveResultDescription
02484 
02485 int OSResult::getOtherObjectiveResultNumberOfObj(int solIdx, int otherIdx){
02486         if (optimization == NULL || optimization->solution == NULL) 
02487                 throw ErrorClass("No solution defined");
02488         int iSolutions = this->getSolutionNumber();
02489         if (solIdx < 0 || solIdx >= iSolutions)
02490                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultNumberOfObj()");
02491         if (optimization->solution[solIdx] == NULL) return -1;
02492         if (optimization->solution[solIdx]->objectives == NULL) return -1;
02493         if (optimization->solution[solIdx]->objectives->other == NULL) return -1;
02494         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02495                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultNumberOfObj()");
02496         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return -1;
02497         return optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfObj;
02498 }//getOtherObjectiveResultNumberOfObj
02499 
02500 int OSResult::getOtherObjectiveResultObjIdx(int solIdx, int otherIdx, int objIdx){
02501         if (optimization == NULL || optimization->solution == NULL) 
02502                 throw ErrorClass("No solution defined");
02503         int iSolutions = this->getSolutionNumber();
02504         if (solIdx < 0 || solIdx >= iSolutions)
02505                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultObjIdx()");
02506         if (optimization->solution[solIdx] == NULL) return 0;
02507         if (optimization->solution[solIdx]->objectives == NULL) return 0;
02508         if (optimization->solution[solIdx]->objectives->other == NULL) return 0;
02509         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02510                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultObjIdx()");
02511         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return -1;
02512         if (optimization->solution[solIdx]->objectives->other[ otherIdx]->obj == NULL) return -1;
02513         if (objIdx < 0 || objIdx >= optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfObj)
02514                 throw ErrorClass("objIdx is outside of range in routine getOtherObjectiveResultObjIdx()");
02515         return optimization->solution[solIdx]->objectives->other[otherIdx]->obj[objIdx]->idx;
02516 }//getOtherObjectiveResultObjIdx
02517 
02518 string OSResult::getOtherObjectiveResultObj(int solIdx, int otherIdx, int objIdx){
02519         if (optimization == NULL || optimization->solution == NULL) 
02520                 throw ErrorClass("No solution defined");
02521         int iSolutions = this->getSolutionNumber();
02522         if (solIdx < 0 || solIdx >= iSolutions)
02523                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultObj()");
02524         if (optimization->solution[solIdx] == NULL) return "";
02525         if (optimization->solution[solIdx]->objectives == NULL) return "";
02526         if (optimization->solution[solIdx]->objectives->other == NULL) return "";
02527         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02528                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultObj()");
02529         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return "";
02530         if (optimization->solution[solIdx]->objectives->other[ otherIdx]->obj == NULL) return "";
02531         if (objIdx < 0 || objIdx >= optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfObj)
02532                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultObj()");
02533         return optimization->solution[solIdx]->objectives->other[otherIdx]->obj[objIdx]->value;
02534 }//getOtherObjectiveResultObj
02535 
02536 
02537 int OSResult::getOtherObjectiveResultNumberOfEnumerations(int solIdx, int otherIdx){
02538         if (optimization == NULL || optimization->solution == NULL) 
02539                 throw ErrorClass("No solution defined");
02540         int iSolutions = this->getSolutionNumber();
02541         if (solIdx < 0 || solIdx >= iSolutions)
02542                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultNumberOfEnumerations()");
02543         if (optimization->solution[solIdx] == NULL) return -1;
02544         if (optimization->solution[solIdx]->objectives == NULL) return -1;
02545         if (optimization->solution[solIdx]->objectives->other == NULL) return -1;
02546         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02547                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultNumberOfEnumerations()");
02548         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return -1;
02549         return optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfEnumerations;
02550 }//getOtherObjectiveResultNumberOfEnumerations
02551 
02552 
02553 std::string OSResult::getOtherObjectiveResultEnumerationValue(int solIdx,int otherIdx, int enumIdx)
02554 {
02555         if (optimization == NULL || optimization->solution == NULL) 
02556                 throw ErrorClass("No solution defined");
02557         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02558                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultEnumerationValue()");
02559         if (optimization->solution[solIdx] == NULL) 
02560                 throw ErrorClass("solution never defined in routine getOtherObjectiveResultEnumerationValue()");
02561 
02562         if (optimization->solution[solIdx]->objectives == NULL) 
02563                 throw ErrorClass("variables result never defined in routine getOtherObjectiveResultEnumerationValue()");
02564         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02565                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultEnumerationValue()");
02566         if (optimization->solution[solIdx]->objectives->other == NULL)
02567                 throw ErrorClass("other variable array never defined in routine getOtherObjectiveResultEnumerationValue()");
02568         if (optimization->solution[solIdx]->objectives->other[otherIdx] == NULL)
02569                 throw ErrorClass("other variable result never defined in routine getOtherObjectiveResultEnumerationValue()");
02570         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration == NULL)
02571                 throw ErrorClass("enumerations array never defined in routine getOtherObjectiveResultEnumerationValue()");
02572         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->objectives->other[otherIdx]->numberOfEnumerations)
02573                 throw ErrorClass("enumIdx is outside of range in routine getOtherObjectiveResultEnumerationValue()");
02574         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx] == NULL)
02575                 throw ErrorClass("enumeration never defined in routine getOtherObjectiveResultEnumerationValue()");
02576 
02577         return optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx]->value;
02578 }//getOtherObjectiveResultEnumerationValue
02579 
02580 
02581 std::string OSResult::getOtherObjectiveResultEnumerationDescription(int solIdx,int otherIdx, int enumIdx)
02582 {
02583         if (optimization == NULL || optimization->solution == NULL) 
02584                 throw ErrorClass("No solution defined");
02585         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02586                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultEnumerationDescription()");
02587         if (optimization->solution[solIdx] == NULL) 
02588                 throw ErrorClass("solution never defined in routine getOtherObjectiveResultEnumerationDescription()");
02589 
02590         if (optimization->solution[solIdx]->objectives == NULL) 
02591                 throw ErrorClass("variables result never defined in routine getOtherObjectiveResultEnumerationDescription()");
02592         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02593                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultEnumerationDescription()");
02594         if (optimization->solution[solIdx]->objectives->other == NULL)
02595                 throw ErrorClass("other variable array never defined in routine getOtherObjectiveResultEnumerationDescription()");
02596         if (optimization->solution[solIdx]->objectives->other[otherIdx] == NULL)
02597                 throw ErrorClass("other variable result never defined in routine getOtherObjectiveResultEnumerationDescription()");
02598         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration == NULL)
02599                 throw ErrorClass("enumerations array never defined in routine getOtherObjectiveResultEnumerationDescription()");
02600         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->objectives->other[otherIdx]->numberOfEnumerations)
02601                 throw ErrorClass("enumIdx is outside of range in routine getOtherObjectiveResultEnumerationDescription()");
02602         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx] == NULL)
02603                 throw ErrorClass("enumeration never defined in routine getOtherObjectiveResultEnumerationDescription()");
02604 
02605         return optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx]->description;
02606 }//getOtherObjectiveResultEnumerationDescription
02607 
02608 
02609 int OSResult::getOtherObjectiveResultEnumerationNumberOfEl(int solIdx,int otherIdx, int enumIdx)
02610 {
02611         if (optimization == NULL || optimization->solution == NULL) 
02612                 throw ErrorClass("No solution defined");
02613         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02614                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02615         if (optimization->solution[solIdx] == NULL) 
02616                 throw ErrorClass("solution never defined in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02617 
02618         if (optimization->solution[solIdx]->objectives == NULL) 
02619                 throw ErrorClass("variables result never defined in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02620         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02621                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02622         if (optimization->solution[solIdx]->objectives->other == NULL)
02623                 throw ErrorClass("other variable array never defined in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02624         if (optimization->solution[solIdx]->objectives->other[otherIdx] == NULL)
02625                 throw ErrorClass("other variable result never defined in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02626         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration == NULL)
02627                 throw ErrorClass("enumerations array never defined in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02628         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->objectives->other[otherIdx]->numberOfEnumerations)
02629                 throw ErrorClass("enumIdx is outside of range in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02630         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx] == NULL)
02631                 throw ErrorClass("enumeration never defined in routine getOtherObjectiveResultEnumerationNumberOfEl()");
02632 
02633         return optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx]->numberOfEl;
02634 }//getOtherObjectiveResultEnumerationNumberOfEl
02635 
02636 
02637 int OSResult::getOtherObjectiveResultEnumerationEl(int solIdx,int otherIdx, int enumIdx, int j)
02638 {
02639         if (optimization == NULL || optimization->solution == NULL) 
02640                 throw ErrorClass("No solution defined");
02641         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02642                 throw ErrorClass("solIdx is outside of range in routine getOtherObjectiveResultEnumerationEl()");
02643         if (optimization->solution[solIdx] == NULL) 
02644                 throw ErrorClass("solution never defined in routine getOtherObjectiveResultEnumerationEl()");
02645 
02646         if (optimization->solution[solIdx]->objectives == NULL) 
02647                 throw ErrorClass("variables result never defined in routine getOtherObjectiveResultEnumerationEl()");
02648         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults)
02649                 throw ErrorClass("otherIdx is outside of range in routine getOtherObjectiveResultEnumerationEl()");
02650         if (optimization->solution[solIdx]->objectives->other == NULL)
02651                 throw ErrorClass("other variable array never defined in routine getOtherObjectiveResultEnumerationEl()");
02652         if (optimization->solution[solIdx]->objectives->other[otherIdx] == NULL)
02653                 throw ErrorClass("other variable result never defined in routine getOtherObjectiveResultEnumerationEl()");
02654         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration == NULL)
02655                 throw ErrorClass("enumerations array never defined in routine getOtherObjectiveResultEnumerationEl()");
02656         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->objectives->other[otherIdx]->numberOfEnumerations)
02657                 throw ErrorClass("enumIdx is outside of range in routine getOtherObjectiveResultEnumerationEl()");
02658         if (optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx] == NULL)
02659                 throw ErrorClass("enumeration never defined in routine getOtherObjectiveResultEnumerationEl()");
02660 
02661         return optimization->solution[solIdx]->objectives->other[otherIdx]->enumeration[enumIdx]->getEl(j);
02662 }//getOtherObjectiveResultEnumerationEl
02663 
02664 
02665 
02666 int OSResult::getNumberOfDualValues(int solIdx){
02667         if (optimization == NULL || optimization->solution == NULL) 
02668                 throw ErrorClass("No solution defined");
02669         int iSolutions = this->getSolutionNumber();
02670         if (solIdx < 0 || solIdx >= iSolutions)
02671                 throw ErrorClass("solIdx is outside of range in routine getNumberOfDualValues()");
02672         if (optimization->solution[solIdx] == NULL) return -1;
02673         if (optimization->solution[solIdx]->constraints == NULL) return -1;
02674         if (optimization->solution[solIdx]->constraints->dualValues == NULL) return -1;
02675         return optimization->solution[solIdx]->constraints->dualValues->numberOfCon;
02676 }//getNumberOfDualValues
02677 
02678 int OSResult::getDualValueIdx(int solIdx, int conIdx){
02679         if (optimization == NULL || optimization->solution == NULL) 
02680                 throw ErrorClass("No solution defined");
02681         int iSolutions = this->getSolutionNumber();
02682         if (solIdx < 0 || solIdx >= iSolutions)
02683                 throw ErrorClass("solIdx is outside of range in routine getDualValueIdx()");
02684         if (optimization->solution[solIdx] == NULL) return -1;
02685         if (optimization->solution[solIdx]->constraints == NULL) return -1;
02686         if (optimization->solution[solIdx]->constraints->dualValues == NULL) return -1;
02687         if (conIdx < 0 || conIdx >= optimization->solution[solIdx]->constraints->dualValues->numberOfCon)
02688                 throw ErrorClass("conIdx is outside of range in routine getDualValueIdx()");
02689         return optimization->solution[solIdx]->constraints->dualValues->con[conIdx]->idx;
02690 }//getDualValueIdx
02691 
02692 double OSResult::getDualValue(int solIdx, int conIdx){
02693         if (optimization == NULL || optimization->solution == NULL) 
02694                 throw ErrorClass("No solution defined");
02695         int iSolutions = this->getSolutionNumber();
02696         if (solIdx < 0 || solIdx >= iSolutions)
02697                 throw ErrorClass("solIdx is outside of range in routine getDualValue()");
02698         if (optimization->solution[solIdx] == NULL) return OSNAN;
02699         if (optimization->solution[solIdx]->constraints == NULL) return OSNAN;
02700         if (optimization->solution[solIdx]->constraints->dualValues == NULL) return OSNAN;
02701         if (conIdx < 0 || conIdx >= optimization->solution[solIdx]->constraints->dualValues->numberOfCon)
02702                 throw ErrorClass("conIdx is outside of range in routine getDualValue()");
02703         return optimization->solution[solIdx]->constraints->dualValues->con[conIdx]->value;
02704 }//getDualValue
02705 
02706 std::vector<IndexValuePair*>  OSResult::getOptimalDualVariableValues(int solIdx){
02707         int numberOfCon;
02708         struct IndexValuePair *dualValPair;
02709         int iSolutions = this->getSolutionNumber();
02710         for(int i = 0; i < iSolutions; i++){
02711                 if(i != solIdx) continue;
02712                 if(optimization->solution[i] == NULL) continue;
02713                 if(optimization->solution[i]->constraints == NULL) continue;
02714                 if(optimization->solution[i]->constraints->dualValues == NULL) continue;
02715                 if((optimization->solution[i]->status->type.find("ptimal") != string::npos && m_mdDualValues == NULL) ||
02716                         optimization->solution[i]->status->type.compare("globallyOptimal") == 0){                                               
02717                         numberOfCon = optimization->solution[i]->constraints->dualValues->numberOfCon;  
02718                         for(int j = 0; j < numberOfCon;  j++){
02719                                 dualValPair = new IndexValuePair();
02720                                 dualValPair->idx = optimization->solution[i]->constraints->dualValues->con[j]->idx;
02721                                 dualValPair->value = optimization->solution[i]->constraints->dualValues->con[j]->value;
02722                                 dualVals.push_back( dualValPair);
02723                         }
02724                 }       
02725                 if(optimization->solution[i]->status->type.compare("globallyOptimal") == 0){
02726                         return dualVals;
02727                 }
02728         }
02729         return dualVals;                
02730 }//getOptimalDualVariableValues
02731 
02732 
02733 int OSResult::getNumberOfOtherConstraintResults(int solIdx){
02734         if (optimization == NULL || optimization->solution == NULL) 
02735                 throw ErrorClass("No solution defined");
02736         int iSolutions = this->getSolutionNumber();
02737         if (solIdx < 0 || solIdx >= iSolutions)
02738                 throw ErrorClass("solIdx is outside of range in routine getNumberOfOtherConstraintResults()");
02739         if (optimization->solution[solIdx]->constraints == NULL) return -1;
02740         if (optimization->solution[solIdx]->constraints->other == NULL) return -1;
02741         return optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults;
02742 }//getNumberOfOtherConstraintResults
02743 
02744 
02745 string OSResult::getOtherConstraintResultName(int solIdx, int otherIdx){
02746         if (optimization == NULL || optimization->solution == NULL) 
02747                 throw ErrorClass("No solution defined");
02748         int iSolutions = this->getSolutionNumber();
02749         if (solIdx < 0 || solIdx >= iSolutions)
02750                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultName()");
02751         if (optimization->solution[solIdx] == NULL) return "";
02752         if (optimization->solution[solIdx]->constraints == NULL) return "";
02753         if (optimization->solution[solIdx]->constraints->other == NULL) return "";
02754         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02755                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultName()");
02756         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return "";
02757         return optimization->solution[solIdx]->constraints->other[ otherIdx]->name;
02758 }//getOtherConstraintResultName
02759 
02760 string OSResult::getOtherConstraintResultValue(int solIdx, int otherIdx){
02761         if (optimization == NULL || optimization->solution == NULL) 
02762                 throw ErrorClass("No solution defined");
02763         int iSolutions = this->getSolutionNumber();
02764         if (solIdx < 0 || solIdx >= iSolutions)
02765                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultValue()");
02766         if (optimization->solution[solIdx] == NULL) return "";
02767         if (optimization->solution[solIdx]->constraints == NULL) return "";
02768         if (optimization->solution[solIdx]->constraints->other == NULL) return "";
02769         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02770                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultValue()");
02771         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return "";
02772         return optimization->solution[solIdx]->constraints->other[ otherIdx]->value;
02773 }//getOtherConstraintResultValue
02774 
02775 string OSResult::getOtherConstraintResultDescription(int solIdx, int otherIdx){
02776         if (optimization == NULL || optimization->solution == NULL) 
02777                 throw ErrorClass("No solution defined");
02778         int iSolutions = this->getSolutionNumber();
02779         if (solIdx < 0 || solIdx >= iSolutions)
02780                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultDescription()");
02781         if (optimization->solution[solIdx] == NULL) return "";
02782         if (optimization->solution[solIdx]->constraints == NULL) return "";
02783         if (optimization->solution[solIdx]->constraints->other == NULL) return "";
02784         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02785                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultDescription()");
02786         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return "";
02787         return optimization->solution[solIdx]->constraints->other[ otherIdx]->description;
02788 }//getOtherConstraintResultDescription
02789 
02790 int OSResult::getOtherConstraintResultNumberOfCon(int solIdx, int otherIdx){
02791         if (optimization == NULL || optimization->solution == NULL) 
02792                 throw ErrorClass("No solution defined");
02793         int iSolutions = this->getSolutionNumber();
02794         if (solIdx < 0 || solIdx >= iSolutions)
02795                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultNumberOfCon()");
02796         if (optimization->solution[solIdx] == NULL) return -1;
02797         if (optimization->solution[solIdx]->constraints == NULL) return -1;
02798         if (optimization->solution[solIdx]->constraints->other == NULL) return -1;
02799         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02800                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultNumberOfCon()");
02801         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return -1;
02802         return optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfCon;
02803 }//getOtherConstraintResultNumberOfCon
02804 
02805 int OSResult::getOtherConstraintResultConIdx(int solIdx, int otherIdx, int conIdx){
02806         if (optimization == NULL || optimization->solution == NULL) 
02807                 throw ErrorClass("No solution defined");
02808         int iSolutions = this->getSolutionNumber();
02809         if (solIdx < 0 || solIdx >= iSolutions)
02810                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultConIdx()");
02811         if (optimization->solution[solIdx] == NULL) return -1;
02812         if (optimization->solution[solIdx]->constraints == NULL) return -1;
02813         if (optimization->solution[solIdx]->constraints->other == NULL) return -1;
02814         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02815                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultConIdx()");
02816         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return -1;
02817         if (optimization->solution[solIdx]->constraints->other[ otherIdx]->con == NULL) return -1;
02818         if (conIdx < 0 || conIdx >= optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfCon)
02819                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultConIdx()");
02820         return optimization->solution[solIdx]->constraints->other[otherIdx]->con[conIdx]->idx;
02821 }//getOtherConstraintResultConIdx
02822 
02823 string OSResult::getOtherConstraintResultCon(int solIdx, int otherIdx, int conIdx){
02824         if (optimization == NULL || optimization->solution == NULL) 
02825                 throw ErrorClass("No solution defined");
02826         int iSolutions = this->getSolutionNumber();
02827         if (solIdx < 0 || solIdx >= iSolutions)
02828                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultCon()");
02829         if (optimization->solution[solIdx] == NULL) return "";
02830         if (optimization->solution[solIdx]->constraints == NULL) return "";
02831         if (optimization->solution[solIdx]->constraints->other == NULL) return "";
02832         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02833                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultCon()");
02834         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return "";
02835         if (optimization->solution[solIdx]->constraints->other[ otherIdx]->con == NULL) return "";
02836         if (conIdx < 0 || conIdx >= optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfCon)
02837                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultCon()");
02838         return optimization->solution[solIdx]->constraints->other[otherIdx]->con[conIdx]->value;
02839 }//getOtherConstraintResultCon
02840 
02841 
02842 int OSResult::getOtherConstraintResultNumberOfEnumerations(int solIdx, int otherIdx){
02843         if (optimization == NULL || optimization->solution == NULL) 
02844                 throw ErrorClass("No solution defined");
02845         int iSolutions = this->getSolutionNumber();
02846         if (solIdx < 0 || solIdx >= iSolutions)
02847                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultNumberOfEnumerations()");
02848         if (optimization->solution[solIdx] == NULL) return -1;
02849         if (optimization->solution[solIdx]->constraints == NULL) return -1;
02850         if (optimization->solution[solIdx]->constraints->other == NULL) return -1;
02851         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02852                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultNumberOfEnumerations()");
02853         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return -1;
02854         return optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfEnumerations;
02855 }//getOtherConstraintResultNumberOfEnumerations
02856 
02857 
02858 std::string OSResult::getOtherConstraintResultEnumerationValue(int solIdx,int otherIdx, int enumIdx)
02859 {
02860         if (optimization == NULL || optimization->solution == NULL) 
02861                 throw ErrorClass("No solution defined");
02862         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02863                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultEnumerationValue()");
02864         if (optimization->solution[solIdx] == NULL) 
02865                 throw ErrorClass("solution never defined in routine getOtherConstraintResultEnumerationValue()");
02866 
02867         if (optimization->solution[solIdx]->constraints == NULL) 
02868                 throw ErrorClass("variables result never defined in routine getOtherConstraintResultEnumerationValue()");
02869         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02870                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultEnumerationValue()");
02871         if (optimization->solution[solIdx]->constraints->other == NULL)
02872                 throw ErrorClass("other variable array never defined in routine getOtherConstraintResultEnumerationValue()");
02873         if (optimization->solution[solIdx]->constraints->other[otherIdx] == NULL)
02874                 throw ErrorClass("other variable result never defined in routine getOtherConstraintResultEnumerationValue()");
02875         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration == NULL)
02876                 throw ErrorClass("enumerations array never defined in routine getOtherConstraintResultEnumerationValue()");
02877         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->constraints->other[otherIdx]->numberOfEnumerations)
02878                 throw ErrorClass("enumIdx is outside of range in routine getOtherConstraintResultEnumerationValue()");
02879         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx] == NULL)
02880                 throw ErrorClass("enumeration never defined in routine getOtherConstraintResultEnumerationValue()");
02881 
02882         return optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx]->value;
02883 }//getOtherConstraintResultEnumerationValue
02884 
02885 
02886 std::string OSResult::getOtherConstraintResultEnumerationDescription(int solIdx,int otherIdx, int enumIdx)
02887 {
02888         if (optimization == NULL || optimization->solution == NULL) 
02889                 throw ErrorClass("No solution defined");
02890         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02891                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultEnumerationDescription()");
02892         if (optimization->solution[solIdx] == NULL) 
02893                 throw ErrorClass("solution never defined in routine getOtherConstraintResultEnumerationDescription()");
02894 
02895         if (optimization->solution[solIdx]->constraints == NULL) 
02896                 throw ErrorClass("variables result never defined in routine getOtherConstraintResultEnumerationDescription()");
02897         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02898                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultEnumerationDescription()");
02899         if (optimization->solution[solIdx]->constraints->other == NULL)
02900                 throw ErrorClass("other variable array never defined in routine getOtherConstraintResultEnumerationDescription()");
02901         if (optimization->solution[solIdx]->constraints->other[otherIdx] == NULL)
02902                 throw ErrorClass("other variable result never defined in routine getOtherConstraintResultEnumerationDescription()");
02903         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration == NULL)
02904                 throw ErrorClass("enumerations array never defined in routine getOtherConstraintResultEnumerationDescription()");
02905         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->constraints->other[otherIdx]->numberOfEnumerations)
02906                 throw ErrorClass("enumIdx is outside of range in routine getOtherConstraintResultEnumerationDescription()");
02907         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx] == NULL)
02908                 throw ErrorClass("enumeration never defined in routine getOtherConstraintResultEnumerationDescription()");
02909 
02910         return optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx]->description;
02911 }//getOtherConstraintResultEnumerationDescription
02912 
02913 int OSResult::getOtherConstraintResultEnumerationNumberOfEl(int solIdx,int otherIdx, int enumIdx)
02914 {
02915         if (optimization == NULL || optimization->solution == NULL) 
02916                 throw ErrorClass("No solution defined");
02917         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02918                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultEnumerationNumberOfEl()");
02919         if (optimization->solution[solIdx] == NULL) 
02920                 throw ErrorClass("solution never defined in routine getOtherConstraintResultEnumerationNumberOfEl()");
02921 
02922         if (optimization->solution[solIdx]->constraints == NULL) 
02923                 throw ErrorClass("variables result never defined in routine getOtherConstraintResultEnumerationNumberOfEl()");
02924         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02925                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultEnumerationNumberOfEl()");
02926         if (optimization->solution[solIdx]->constraints->other == NULL)
02927                 throw ErrorClass("other variable array never defined in routine getOtherConstraintResultEnumerationNumberOfEl()");
02928         if (optimization->solution[solIdx]->constraints->other[otherIdx] == NULL)
02929                 throw ErrorClass("other variable result never defined in routine getOtherConstraintResultEnumerationNumberOfEl()");
02930         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration == NULL)
02931                 throw ErrorClass("enumerations array never defined in routine getOtherConstraintResultEnumerationNumberOfEl()");
02932         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->constraints->other[otherIdx]->numberOfEnumerations)
02933                 throw ErrorClass("enumIdx is outside of range in routine getOtherConstraintResultEnumerationNumberOfEl()");
02934         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx] == NULL)
02935                 throw ErrorClass("enumeration never defined in routine getOtherConstraintResultEnumerationNumberOfEl()");
02936 
02937         return optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx]->numberOfEl;
02938 }//getOtherConstraintResultEnumerationNumberOfEl
02939 
02940 int OSResult::getOtherConstraintResultEnumerationEl(int solIdx,int otherIdx, int enumIdx, int j)
02941 {
02942         if (optimization == NULL || optimization->solution == NULL) 
02943                 throw ErrorClass("No solution defined");
02944         if (solIdx < 0 || solIdx >= optimization->numberOfSolutions)
02945                 throw ErrorClass("solIdx is outside of range in routine getOtherConstraintResultEnumerationEl()");
02946         if (optimization->solution[solIdx] == NULL) 
02947                 throw ErrorClass("solution never defined in routine getOtherConstraintResultEnumerationEl()");
02948 
02949         if (optimization->solution[solIdx]->constraints == NULL) 
02950                 throw ErrorClass("variables result never defined in routine getOtherConstraintResultEnumerationEl()");
02951         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults)
02952                 throw ErrorClass("otherIdx is outside of range in routine getOtherConstraintResultEnumerationEl()");
02953         if (optimization->solution[solIdx]->constraints->other == NULL)
02954                 throw ErrorClass("other variable array never defined in routine getOtherConstraintResultEnumerationEl()");
02955         if (optimization->solution[solIdx]->constraints->other[otherIdx] == NULL)
02956                 throw ErrorClass("other variable result never defined in routine getOtherConstraintResultEnumerationEl()");
02957         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration == NULL)
02958                 throw ErrorClass("enumerations array never defined in routine getOtherConstraintResultEnumerationEl()");
02959         if (enumIdx < 0 || enumIdx >= optimization->solution[solIdx]->constraints->other[otherIdx]->numberOfEnumerations)
02960                 throw ErrorClass("enumIdx is outside of range in routine getOtherConstraintResultEnumerationEl()");
02961         if (optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx] == NULL)
02962                 throw ErrorClass("enumeration never defined in routine getOtherConstraintResultEnumerationEl()");
02963 
02964         return optimization->solution[solIdx]->constraints->other[otherIdx]->enumeration[enumIdx]->getEl(j);
02965 }//getOtherConstraintResultEnumerationEl
02966 
02967 
02968 
02969 int OSResult::getNumberOfOtherSolutionResults(int solIdx){
02970         if (optimization == NULL || optimization->solution == NULL) 
02971                 throw ErrorClass("No solution defined");
02972         int iSolutions = this->getSolutionNumber();
02973         if (solIdx < 0 || solIdx >= iSolutions)
02974                 throw ErrorClass("solIdx is outside of range in routine getNumberOfOtherSolutionResults()");
02975         if (optimization->solution[solIdx] == NULL) return -1;
02976         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return -1;
02977         return optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults;
02978 }//getNumberOfOtherSolutionResults
02979 
02980 string OSResult::getOtherSolutionResultName(int solIdx, int otherIdx){
02981         if (optimization == NULL || optimization->solution == NULL) 
02982                 throw ErrorClass("No solution defined");
02983         int iSolutions = this->getSolutionNumber();
02984         if (solIdx < 0 || solIdx >= iSolutions)
02985                 throw ErrorClass("solIdx is outside of range in routine getOtherSolutionResultName()");
02986         if (optimization->solution[solIdx] == NULL) return "";
02987         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return "";
02988         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults)
02989                 throw ErrorClass("otherIdx is outside of range in routine getOtherSolutionResultName()");
02990         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return "";
02991         return optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->name;
02992 }//getOtherSolutionResultName
02993 
02994 string OSResult::getOtherSolutionResultCategory(int solIdx, int otherIdx){
02995         if (optimization == NULL || optimization->solution == NULL) 
02996                 throw ErrorClass("No solution defined");
02997         int iSolutions = this->getSolutionNumber();
02998         if (solIdx < 0 || solIdx >= iSolutions)
02999                 throw ErrorClass("solIdx is outside of range in routine getOtherSolutionResultCategory()");
03000         if (optimization->solution[solIdx] == NULL) return "";
03001         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return "";
03002         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults)
03003                 throw ErrorClass("otherIdx is outside of range in routine getOtherSolutionResultCategory()");
03004         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return "";
03005         return optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->category;
03006 }//getOtherSolutionResultCategory
03007 
03008 string OSResult::getOtherSolutionResultDescription(int solIdx, int otherIdx){
03009         if (optimization == NULL || optimization->solution == NULL) 
03010                 throw ErrorClass("No solution defined");
03011         int iSolutions = this->getSolutionNumber();
03012         if (solIdx < 0 || solIdx >= iSolutions)
03013                 throw ErrorClass("solIdx is outside of range in routine getOtherSolutionResultDescription()");
03014         if (optimization->solution[solIdx] == NULL) return "";
03015         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return "";
03016         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults)
03017                 throw ErrorClass("otherIdx is outside of range in routine getOtherSolutionResultDescription()");
03018         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return "";
03019         return optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->description;
03020 }//getOtherSolutionResultDescription
03021 
03022 int OSResult::getOtherSolutionResultNumberOfItems(int solIdx, int otherIdx){
03023         if (optimization == NULL || optimization->solution == NULL) 
03024                 throw ErrorClass("No solution defined");
03025         int iSolutions = this->getSolutionNumber();
03026         if (solIdx < 0 || solIdx >= iSolutions)
03027                 throw ErrorClass("solIdx is outside of range in routine getOtherSolutionResultNumberOfItems()");
03028         if (optimization->solution[solIdx] == NULL) return -1;
03029         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return -1;
03030         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults)
03031                 throw ErrorClass("otherIdx is outside of range in routine getOtherSolutionResultNumberOfItems()");
03032         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return -1;
03033         return optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->numberOfItems;
03034 }//getOtherSolutionResultNumberOfItems
03035 
03036 string OSResult::getOtherSolutionResultItem(int solIdx, int otherIdx, int itemIdx){
03037         if (optimization == NULL || optimization->solution == NULL) 
03038                 throw ErrorClass("No solution defined");
03039         int iSolutions = this->getSolutionNumber();
03040         if (solIdx < 0 || solIdx >= iSolutions)
03041                 throw ErrorClass("solIdx is outside of range in routine getOtherSolutionResultItem()");
03042         if (optimization->solution[solIdx] == NULL) return "";
03043         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return "";
03044         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return "";
03045         if (otherIdx < 0 || otherIdx >= optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults)
03046                 throw ErrorClass("otherIdx is outside of range in routine getOtherSolutionResultItem()");
03047         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->item == NULL) return "";
03048         if (itemIdx < 0 || itemIdx >= optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->numberOfItems)
03049                 throw ErrorClass("itemIdx is outside of range in routine getOtherSolutionResultItem()");
03050         return optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->item[itemIdx];
03051 }//getOtherSolutionResultItem
03052 
03053 int OSResult::getNumberOfSolverOutputs(){
03054         if (optimization == NULL || optimization->otherSolverOutput == NULL) return -1;
03055         return optimization->otherSolverOutput->numberOfSolverOutputs;  
03056 }//getNumberOfSolverOutputs
03057 
03058 string OSResult::getSolverOutputName(int otherIdx){
03059         if (optimization == NULL) return "";
03060         if (optimization->otherSolverOutput == NULL) return "";
03061         if (otherIdx < 0 || otherIdx >= optimization->otherSolverOutput->numberOfSolverOutputs)
03062                 throw ErrorClass("otherIdx is outside of range in routine getSolverOutputName()");
03063         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return "";
03064         return optimization->otherSolverOutput->solverOutput[otherIdx]->name;
03065 }//getSolverOutputName
03066 
03067 string OSResult::getSolverOutputCategory(int otherIdx){
03068         if (optimization == NULL) return "";
03069         if (optimization->otherSolverOutput == NULL) return "";
03070         if (otherIdx < 0 || otherIdx >= optimization->otherSolverOutput->numberOfSolverOutputs)
03071                 throw ErrorClass("otherIdx is outside of range in routine getSolverOutputCategory()");
03072         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return "";
03073         return optimization->otherSolverOutput->solverOutput[otherIdx]->category;
03074 }//getSolverOutputCategory
03075 
03076 string OSResult::getSolverOutputDescription(int otherIdx){
03077         if (optimization == NULL) return "";
03078         if (optimization->otherSolverOutput == NULL) return "";
03079         if (otherIdx < 0 || otherIdx >= optimization->otherSolverOutput->numberOfSolverOutputs)
03080                 throw ErrorClass("otherIdx is outside of range in routine getSolverOutputDescription()");
03081         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return "";
03082         return optimization->otherSolverOutput->solverOutput[otherIdx]->description;
03083 }//getSolverOutputDescription
03084 
03085 int OSResult::getSolverOutputNumberOfItems(int otherIdx){
03086         if (optimization == NULL) return -1;
03087         if (optimization->otherSolverOutput == NULL) return -1;
03088         if (otherIdx < 0 || otherIdx >= optimization->otherSolverOutput->numberOfSolverOutputs)
03089                 throw ErrorClass("otherIdx is outside of range in routine getSolverOutputNumberOfItems()");
03090         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return -1;
03091         return optimization->otherSolverOutput->solverOutput[otherIdx]->numberOfItems;
03092 }//getSolverOutputNumberOfItems
03093 
03094 string OSResult::getSolverOutputItem(int otherIdx, int itemIdx){
03095         if (optimization == NULL) return "";
03096         if (optimization->otherSolverOutput == NULL) return "";
03097         if (otherIdx < 0 || otherIdx >= optimization->otherSolverOutput->numberOfSolverOutputs)
03098                 throw ErrorClass("otherIdx is outside of range in routine getSolverOutputItem");
03099         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return "";
03100         if (itemIdx < 0 || itemIdx >= optimization->otherSolverOutput->solverOutput[otherIdx]->numberOfItems)
03101                 throw ErrorClass("itemIdx is outside of range in routine getSolverOutputItem()");
03102     return optimization->otherSolverOutput->solverOutput[otherIdx]->item[itemIdx];;
03103 }//getSolverOutputItem
03104 
03105 //==================================================================
03106 // set methods
03107 
03108 bool OSResult::setResultHeader(std::string name, std::string source, 
03109                            std::string fileCreator, std::string description, std::string licence)
03110 {
03111         if (this->resultHeader == NULL) 
03112                 this->resultHeader = new GeneralFileHeader();
03113         return this->resultHeader->setHeader(name, source, fileCreator, description, licence);
03114 }// end of OSResult::setResultHeader
03115 
03116 bool OSResult::setGeneralStatus(GeneralStatus *status)
03117 {
03118         if (general == NULL) general = new GeneralResult();
03119         if (general->generalStatus == NULL) general->generalStatus = new GeneralStatus();
03120         general->generalStatus = status;
03121         return true;
03122 }//setGeneralStatus
03123 
03124 bool OSResult::setGeneralStatusType(string type)
03125 {
03126         if (general == NULL) general = new GeneralResult();
03127         if (verifyGeneralResultStatus(type) == 0) return false;
03128         if (general->generalStatus == NULL) general->generalStatus = new GeneralStatus();
03129         general->generalStatus->type = type;
03130         return true;
03131 }//setGeneralStatusType
03132 
03133 bool OSResult::setGeneralStatusDescription(string description)
03134 {
03135         if (general == NULL) general = new GeneralResult();
03136         if (general->generalStatus == NULL) general->generalStatus = new GeneralStatus();
03137         general->generalStatus->description = description;
03138         return true;
03139 }//setGeneralStatusDescription
03140 
03141 bool OSResult::setNumberOfGeneralSubstatuses(int num)
03142 {
03143         if (num < 0) return false;
03144 
03145         if (general == NULL) general = new GeneralResult();
03146         if (general->generalStatus == NULL) general->generalStatus = new GeneralStatus();
03147         if (general->generalStatus->substatus != NULL) return false;
03148         general->generalStatus->numberOfSubstatuses = num;
03149         if (num > 0)
03150         {       general->generalStatus->substatus = new GeneralSubstatus*[num];
03151                 for(int i = 0; i < num; i++)    
03152                         general->generalStatus->substatus[i] = new GeneralSubstatus();
03153         }
03154         return true;
03155 }//setNumberOfGeneralSubstatuses
03156 
03157 bool OSResult::setGeneralSubstatusName(int idx, string name)
03158 {
03159         if (general == NULL) general = new GeneralResult();
03160         if (general->generalStatus == NULL) return false;
03161         if (idx < 0 || idx >= general->generalStatus->numberOfSubstatuses) return false;
03162         general->generalStatus->substatus[idx]->name = name;
03163         return true;
03164 }//setGeneralSubstatusName
03165 
03166 bool OSResult::setGeneralSubstatusDescription(int idx, string description)
03167 {
03168         if (general == NULL) general = new GeneralResult();
03169         if (general->generalStatus == NULL) return false;
03170         if (idx < 0 || idx >= general->generalStatus->numberOfSubstatuses) return false;
03171         general->generalStatus->substatus[idx]->description = description;
03172         return true;
03173 }//setGeneralSubstatusDescription
03174 
03175 bool OSResult::setGeneralMessage(string message)
03176 {
03177         if (general == NULL) general = new GeneralResult();
03178         general->message = message;
03179         return true;
03180 }//setGeneralMessage
03181 
03182 bool OSResult::setServiceName(string serviceName)
03183 {
03184         if (general == NULL) general = new GeneralResult();
03185         general->serviceName = serviceName;
03186         return true;
03187 }//setServiceName
03188 
03189 bool OSResult::setServiceURI(string serviceURI)
03190 {
03191         if (general == NULL) general = new GeneralResult();
03192         general->serviceURI = serviceURI;
03193         return true;
03194 }//setServiceURI
03195 
03196 bool OSResult::setInstanceName(string instanceName)
03197 {
03198         if (general == NULL) general = new GeneralResult();
03199         general->instanceName = instanceName;
03200         return true;
03201 }//setInstanceName
03202 
03203 bool OSResult::setJobID(string jobID)
03204 {
03205         if (general == NULL) general = new GeneralResult();
03206         general->jobID = jobID;
03207         return true;
03208 }//setJobID
03209 
03210 bool OSResult::setSolverInvoked(string solverInvoked)
03211 {
03212         if (general == NULL) general = new GeneralResult();
03213         general->solverInvoked = solverInvoked;
03214         return true;
03215 }//setSolverInvoked
03216                 
03217 bool OSResult::setTimeStamp(string timeStamp)
03218 {
03219         if (general == NULL) general = new GeneralResult();
03220         general->timeStamp = timeStamp;
03221         return true;
03222 }//setTimeStamp
03223 
03224 bool OSResult::setNumberOfOtherGeneralResults(int num)
03225 {
03226         if (general == NULL) general = new GeneralResult();
03227         if(general->otherResults == NULL) general->otherResults = new OtherResults();
03228         if (num < 0) return false;
03229         if (general->otherResults->other != NULL) return false;
03230         general->otherResults->numberOfOtherResults = num;
03231         if (num > 0)
03232         {       general->otherResults->other = new OtherResult*[num];
03233                 for(int i = 0; i < num; i++)    
03234                         general->otherResults->other[i] = new OtherResult();
03235         }
03236         return true;
03237 }//setNumberOfOtherGeneralResults
03238 
03239 
03240 bool OSResult::setOtherGeneralResultName(int idx, string name)
03241 {
03242         if (general == NULL) general = new GeneralResult();
03243         if (general->otherResults == NULL) return false;
03244         if (idx < 0 || idx >= general->otherResults->numberOfOtherResults) 
03245                 return false;
03246         general->otherResults->other[idx]->name = name;
03247         return true;
03248 }//setOtherGeneralResultName
03249 
03250 bool OSResult::setOtherGeneralResultValue(int idx, string value)
03251 {
03252         if (general == NULL) general = new GeneralResult();
03253         if (general->otherResults == NULL) return false;
03254         if (idx < 0 || idx >= general->otherResults->numberOfOtherResults) 
03255                 return false;
03256         general->otherResults->other[idx]->value = value;
03257         return true;
03258 }//setOtherGeneralResultValue
03259 
03260 bool OSResult::setOtherGeneralResultDescription(int idx, string description)
03261 {
03262         if (general == NULL) general = new GeneralResult();
03263         if (general->otherResults == NULL) return false;
03264         if (idx < 0 || idx >= general->otherResults->numberOfOtherResults) 
03265                 return false;
03266         general->otherResults->other[idx]->description = description;
03267         return true;
03268 }//setOtherGeneralResultDescription
03269 
03270 bool OSResult::setSystemInformation(string systemInformation)
03271 {
03272         if (system == NULL) system = new SystemResult();
03273         system->systemInformation = systemInformation;
03274         return true;
03275 }//setServiceName
03276 
03277 bool OSResult::setAvailableDiskSpaceUnit(std::string unit)
03278 {
03279         if (system == NULL) system = new SystemResult();
03280         if (system->availableDiskSpace == NULL) system->availableDiskSpace = new StorageCapacity();
03281         if (verifyStorageUnit(unit) == false) return false;
03282         system->availableDiskSpace->unit = unit;
03283         return true;
03284 }//setAvailableDiskSpaceUnit
03285 
03286 bool OSResult::setAvailableDiskSpaceDescription(std::string description)
03287 {
03288         if (system == NULL) system = new SystemResult();
03289         if (system->availableDiskSpace == NULL) system->availableDiskSpace = new StorageCapacity();
03290         system->availableDiskSpace->description = description;
03291         return true;
03292 }//setAvailableDiskSpaceDescription
03293 
03294 bool OSResult::setAvailableDiskSpaceValue(double value)
03295 {
03296         if (system == NULL) system = new SystemResult();
03297         if (system->availableDiskSpace == NULL) system->availableDiskSpace = new StorageCapacity();
03298         system->availableDiskSpace->value = value;
03299         return true;
03300 }//setAvailableDiskSpaceValue
03301 
03302 bool OSResult::setAvailableMemoryUnit(std::string unit)
03303 {
03304         if (system == NULL) system = new SystemResult();
03305         if (system->availableMemory == NULL) system->availableMemory = new StorageCapacity();
03306         if (verifyStorageUnit(unit) == false) return false;
03307         system->availableMemory->unit = unit;
03308         return true;
03309 }//setAvailableMemoryUnit
03310 
03311 bool OSResult::setAvailableMemoryDescription(std::string description)
03312 {
03313         if (system == NULL) system = new SystemResult();
03314         if (system->availableMemory == NULL) system->availableMemory = new StorageCapacity();
03315         system->availableMemory->description = description;
03316         return true;
03317 }//setAvailableMemoryDescription
03318 
03319 bool OSResult::setAvailableMemoryValue(double value)
03320 {
03321         if (system == NULL) system = new SystemResult();
03322         if (system->availableMemory == NULL) system->availableMemory = new StorageCapacity();
03323         system->availableMemory->value = value;
03324         return true;
03325 }//setAvailableMemoryValue
03326 
03327 bool OSResult::setAvailableCPUSpeedUnit(std::string unit)
03328 {
03329         if (system == NULL) return false;
03330         if (system->availableCPUSpeed == NULL) system->availableCPUSpeed = new CPUSpeed();
03331         if (verifyCPUSpeedUnit(unit) == false) return false;
03332         system->availableCPUSpeed->unit = unit;
03333         return true;
03334 }//setAvailableCPUSpeedUnit
03335 
03336 bool OSResult::setAvailableCPUSpeedDescription(std::string description)
03337 {
03338         if (system == NULL) system = new SystemResult();
03339         if (system->availableCPUSpeed == NULL) system->availableCPUSpeed = new CPUSpeed();
03340         system->availableCPUSpeed->description = description;
03341         return true;
03342 }//setAvailableCPUSpeedDescription
03343 
03344 bool OSResult::setAvailableCPUSpeedValue(double value)
03345 {
03346         if (system == NULL) system = new SystemResult();
03347         if (system->availableCPUSpeed == NULL) system->availableCPUSpeed = new CPUSpeed();
03348         system->availableCPUSpeed->value = value;
03349         return true;
03350 }//setAvailableCPUSpeedValue
03351 
03352 bool OSResult::setAvailableCPUNumberDescription(std::string description)
03353 {
03354         if (system == NULL) system = new SystemResult();
03355         if (system->availableCPUNumber == NULL) system->availableCPUNumber = new CPUNumber();
03356         system->availableCPUNumber->description = description;
03357         return true;
03358 }//setAvailableCPUNumberDescription
03359 
03360 bool OSResult::setAvailableCPUNumberValue(int value)
03361 {
03362         if (system == NULL) system = new SystemResult();
03363         if (system->availableCPUNumber == NULL) system->availableCPUNumber = new CPUNumber();
03364         system->availableCPUNumber->value = value;
03365         return true;
03366 }//setAvailableCPUNumberValue
03367 
03368 bool OSResult::setNumberOfOtherSystemResults(int num)
03369 {
03370         if (system == NULL) system = new SystemResult();
03371         if(system->otherResults == NULL) system->otherResults = new OtherResults();
03372         if (num < 0) return false;
03373         if (system->otherResults->other != NULL) return false;
03374         system->otherResults->numberOfOtherResults = num;
03375         if (num > 0)
03376         {       system->otherResults->other = new OtherResult*[num];
03377                 for(int i = 0; i < num; i++)    
03378                         system->otherResults->other[i] = new OtherResult();
03379         }
03380         return true;
03381 }//setNumberOfOtherSystemResults
03382 
03383 
03384 bool OSResult::setOtherSystemResultName(int idx, string name)
03385 {
03386         if (system == NULL) system = new SystemResult();
03387         if (system->otherResults == NULL) return false;
03388         if (idx < 0 || idx >= system->otherResults->numberOfOtherResults) 
03389                 return false;
03390         system->otherResults->other[idx]->name = name;
03391         return true;
03392 }//setOtherSystemResultName
03393 
03394 bool OSResult::setOtherSystemResultValue(int idx, string value)
03395 {
03396         if (system == NULL) system = new SystemResult();
03397         if (system->otherResults == NULL) return false;
03398         if (idx < 0 || idx >= system->otherResults->numberOfOtherResults) 
03399                 return false;
03400         system->otherResults->other[idx]->value = value;
03401         return true;
03402 }//setOtherSystemResultValue
03403 
03404 bool OSResult::setOtherSystemResultDescription(int idx, string description)
03405 {
03406         if (system == NULL) system = new SystemResult();
03407         if (system->otherResults == NULL) return false;
03408         if (idx < 0 || idx >= system->otherResults->numberOfOtherResults) 
03409                 return false;
03410         system->otherResults->other[idx]->description = description;
03411         return true;
03412 }//setOtherSystemResultDescription
03413 
03414 bool OSResult::setCurrentState(std::string currentState)
03415 {
03416         if(verifySystemCurrentState(currentState) == 0) return false;
03417 
03418         if (service == NULL) service = new ServiceResult();
03419         service->currentState = currentState;
03420         return true;
03421 }//setCurrentState
03422 
03423 bool OSResult::setCurrentJobCount(int jobCount)
03424 {
03425         if (service == NULL) service = new ServiceResult();
03426         service->currentJobCount = jobCount;
03427         return true;
03428 }//setCurrentJobCount
03429 
03430 bool OSResult::setTotalJobsSoFar(int number)
03431 {
03432         if (service == NULL) service = new ServiceResult();
03433         service->totalJobsSoFar = number;
03434         return true;
03435 }//setTotalJobsSoFar
03436 
03437 bool OSResult::setTimeServiceStarted(std::string startTime)
03438 {
03439         if (service == NULL) service = new ServiceResult();
03440         service->timeServiceStarted = startTime;
03441         return true;
03442 }//setTimeServiceStarted
03443 
03444 bool OSResult::setServiceUtilization(double value)
03445 {
03446         if (service == NULL) service = new ServiceResult();
03447         service->serviceUtilization = value;
03448         return true;
03449 }//setServiceUtilization
03450 
03451 bool OSResult::setNumberOfOtherServiceResults(int num)
03452 {
03453         if (num < 0) return false;
03454 
03455         if (service == NULL) service = new ServiceResult();
03456         if(service->otherResults == NULL) service->otherResults = new OtherResults();
03457         if (service->otherResults->other != NULL) return false;
03458         service->otherResults->numberOfOtherResults = num;
03459         if (num > 0)
03460         {       service->otherResults->other = new OtherResult*[num];
03461                 for(int i = 0; i < num; i++)    
03462                         service->otherResults->other[i] = new OtherResult();
03463         }
03464         return true;
03465 }//setNumberOfOtherServiceResults
03466 
03467 bool OSResult::setOtherServiceResultName(int idx, string name)
03468 {
03469         if (service == NULL) service = new ServiceResult();
03470         if (service->otherResults == NULL) return false;
03471         if (idx < 0 || idx >= service->otherResults->numberOfOtherResults) 
03472                 return false;
03473         service->otherResults->other[idx]->name = name;
03474         return true;
03475 }//setOtherServiceResultName
03476 
03477 bool OSResult::setOtherServiceResultValue(int idx, string value)
03478 {
03479         if (service == NULL) service = new ServiceResult();
03480         if (service->otherResults == NULL) return false;
03481         if (idx < 0 || idx >= service->otherResults->numberOfOtherResults) 
03482                 return false;
03483         service->otherResults->other[idx]->value = value;
03484         return true;
03485 }//setOtherServiceResultValue
03486 
03487 bool OSResult::setOtherServiceResultDescription(int idx, string description)
03488 {
03489         if (service == NULL) service = new ServiceResult();
03490         if (service->otherResults == NULL) return false;
03491         if (idx < 0 || idx >= service->otherResults->numberOfOtherResults) 
03492                 return false;
03493         service->otherResults->other[idx]->description = description;
03494         return true;
03495 }//setOtherServiceResultDescription
03496 
03497 bool OSResult::setJobStatus(std::string status)
03498 {
03499         if (verifyJobStatus(status) == 0) return false;
03500 
03501         if (job == NULL) job = new JobResult();
03502         job->status = status;
03503         return true;
03504 }//setJobStatus
03505         
03506 bool OSResult::setJobSubmitTime(std::string submitTime)
03507 {
03508         if (job == NULL) job = new JobResult();
03509         job->submitTime = submitTime;
03510         return true;
03511 }//setJobSubmitTime
03512         
03513 bool OSResult::setScheduledStartTime(std::string scheduledStartTime)
03514 {
03515         if (job == NULL) job = new JobResult();
03516         job->scheduledStartTime = scheduledStartTime;
03517         return true;
03518 }//setScheduledStartTime
03519         
03520 bool OSResult::setActualStartTime(std::string actualStartTime)
03521 {
03522         if (job == NULL) job = new JobResult();
03523         job->actualStartTime = actualStartTime;
03524         return true;
03525 }//setActualStartTime
03526         
03527 bool OSResult::setJobEndTime(std::string endTime)
03528 {
03529         if (job == NULL) job = new JobResult();
03530         job->endTime = endTime;
03531         return true;
03532 }//setJobEndTime
03533 
03534 bool OSResult::setTime(double time)
03535 {
03536         return addTimingInformation("elapsedTime", "total", "second", "", time);
03537 }//setTime
03538 
03539 bool OSResult::addTimingInformation(std::string type, std::string category, std::string unit, std::string description, double value)
03540 
03541 {       int nt; int i;
03542         if (verifyTimeUnit(unit) != true)
03543                 throw ErrorClass("Invalid unit of time in addTimingInformation()");
03544         if (job == NULL) job = new JobResult();
03545         if (job->timingInformation == NULL) job->timingInformation = new TimingInformation();
03546 
03547         nt = job->timingInformation->numberOfTimes;
03548         TimeMeasurement** temp = new TimeMeasurement*[nt+1];  //Allocate the new pointers
03549         for (i = 0; i < nt; i++)
03550                 temp[i] = job->timingInformation->time[i];  //copy the pointers
03551 
03552         delete[] job->timingInformation->time; //delete old pointers
03553         
03554 //      add in the new element
03555         temp[ nt] = new TimeMeasurement();
03556 
03557         temp[ nt]->type = type;
03558         temp[ nt]->category = category;
03559         temp[ nt]->unit = unit;
03560         temp[ nt]->description = description;
03561         temp[ nt]->value = value;
03562 
03563         job->timingInformation->time = temp;   //hook the new pointers into the data structure
03564         job->timingInformation->numberOfTimes = ++nt;
03565 
03566         return true;
03567 }//addTimingInformation
03568 
03569 
03570 bool OSResult::setTimingInformation(int idx, std::string type, std::string category,
03571                                                                         std::string unit, std::string description, double value)
03572 {       
03573         if (verifyTimeUnit(unit) == 0) return false;
03574         if (verifyTimeType(type) == 0) return false;
03575         if (verifyTimeCategory(category) == 0) return false;
03576 
03577         if (job == NULL) job = new JobResult();
03578         if (job->timingInformation == NULL) return false;
03579         if (idx < 0 || idx >= job->timingInformation->numberOfTimes) 
03580                 return false;
03581 
03582         job->timingInformation->time[idx]->type = type;
03583         job->timingInformation->time[idx]->category = category;
03584         job->timingInformation->time[idx]->unit = unit;
03585         job->timingInformation->time[idx]->description = description;
03586         job->timingInformation->time[idx]->value = value;
03587 
03588         return true;
03589 }//setTimingInformation
03590 
03591 
03592 bool OSResult::setNumberOfTimes(int numberOfTimes)
03593 {
03594         if (numberOfTimes < 0) return false;
03595 
03596         if (job == NULL) job = new JobResult();
03597         if (job->timingInformation == NULL) job->timingInformation = new TimingInformation();
03598         job->timingInformation->numberOfTimes = numberOfTimes;
03599         if (numberOfTimes > 0)
03600         {       job->timingInformation->time = new TimeMeasurement*[numberOfTimes];
03601                 for(int i = 0; i < numberOfTimes; i++)  
03602                         job->timingInformation->time[i] = new TimeMeasurement();
03603         }
03604         return true;
03605 }//setNumberOfTimes
03606 
03607 bool OSResult::setTimeNumber(int numberOfTimes)
03608 {
03609         if (numberOfTimes < 0) return false;
03610 
03611         if (job == NULL) job = new JobResult();
03612         if (job->timingInformation == NULL) job->timingInformation = new TimingInformation();
03613         job->timingInformation->numberOfTimes = numberOfTimes;
03614         return true;
03615 }//setTimeNumber
03616 
03617 bool OSResult::setUsedDiskSpaceUnit(std::string unit)
03618 {
03619         if (verifyStorageUnit(unit) == 0) return false;
03620 
03621         if (job == NULL) job = new JobResult();
03622         if (job->usedDiskSpace == NULL) job->usedDiskSpace = new StorageCapacity();
03623         job->usedDiskSpace->unit = unit;
03624         return true;
03625 }//setUsedDiskSpaceUnit
03626 
03627 bool OSResult::setUsedDiskSpaceDescription(std::string description)
03628 {
03629         if (job == NULL) job = new JobResult();
03630         if (job->usedDiskSpace == NULL) job->usedDiskSpace = new StorageCapacity();
03631         job->usedDiskSpace->description = description;
03632         return true;
03633 }//setUsedDiskSpaceDescription
03634 
03635 bool OSResult::setUsedDiskSpaceValue(double value)
03636 {
03637         if (job == NULL) job = new JobResult();
03638         if (job->usedDiskSpace == NULL) job->usedDiskSpace = new StorageCapacity();
03639         job->usedDiskSpace->value = value;
03640         return true;
03641 }//setUsedDiskSpaceValue
03642 
03643 bool OSResult::setUsedMemoryUnit(std::string unit)
03644 {
03645         if (verifyStorageUnit(unit) == 0) return false;
03646 
03647         if (job == NULL) job = new JobResult();
03648         if (job->usedMemory == NULL) job->usedMemory = new StorageCapacity();
03649         job->usedMemory->unit = unit;
03650         return true;
03651 }//setUsedMemoryUnit
03652 
03653 bool OSResult::setUsedMemoryDescription(std::string description)
03654 {
03655         if (job == NULL) job = new JobResult();
03656         if (job->usedMemory == NULL) job->usedMemory = new StorageCapacity();
03657         job->usedMemory->description = description;
03658         return true;
03659 }//setUsedMemoryDescription
03660 
03661 bool OSResult::setUsedMemoryValue(double value)
03662 {
03663         if (job == NULL) job = new JobResult();
03664         if (job->usedMemory == NULL) job->usedMemory = new StorageCapacity();
03665         job->usedMemory->value = value;
03666         return true;
03667 }//setUsedMemoryValue
03668 
03669 bool OSResult::setUsedCPUSpeedUnit(std::string unit)
03670 {
03671         if ( verifyCPUSpeedUnit(unit) == 0) return false;
03672 
03673         if (job == NULL) job = new JobResult();
03674         if (job->usedCPUSpeed == NULL) job->usedCPUSpeed = new CPUSpeed();
03675         job->usedCPUSpeed->unit = unit;
03676         return true;
03677 }//setUsedCPUSpeedUnit
03678 
03679 bool OSResult::setUsedCPUSpeedDescription(std::string description)
03680 {
03681         if (job == NULL) job = new JobResult();
03682         if (job->usedCPUSpeed == NULL) job->usedCPUSpeed = new CPUSpeed();
03683         job->usedCPUSpeed->description = description;
03684         return true;
03685 }//setUsedCPUSpeedDescription
03686 
03687 bool OSResult::setUsedCPUSpeedValue(double value)
03688 {
03689         if (job == NULL) job = new JobResult();
03690         if (job->usedCPUSpeed == NULL) job->usedCPUSpeed = new CPUSpeed();
03691         job->usedCPUSpeed->value = value;
03692         return true;
03693 }//setUsedCPUSpeedValue
03694 
03695 bool OSResult::setUsedCPUNumberDescription(std::string description)
03696 {
03697         if (job == NULL) job = new JobResult();
03698         if (job->usedCPUNumber == NULL) job->usedCPUNumber = new CPUNumber();
03699         job->usedCPUNumber->description = description;
03700         return true;
03701 }//setUsedCPUNumberDescription
03702 
03703 bool OSResult::setUsedCPUNumberValue(int value)
03704 {
03705         if (job == NULL) job = new JobResult();
03706         if (job->usedCPUNumber == NULL) job->usedCPUNumber = new CPUNumber();
03707         job->usedCPUNumber->value = value;
03708         return true;
03709 }//setUsedCPUNumberValue
03710 
03711 bool OSResult::setNumberOfOtherJobResults(int num)
03712 {
03713         if (job == NULL) job = new JobResult();
03714         if (job->otherResults == NULL) job->otherResults = new OtherResults();
03715         if (num < 0) return false;
03716         if (job->otherResults->other != NULL) return false;
03717         job->otherResults->numberOfOtherResults = num;
03718         if (num > 0)
03719         {       job->otherResults->other = new OtherResult*[num];
03720                 for(int i = 0; i < num; i++)    
03721                         job->otherResults->other[i] = new OtherResult();
03722         }
03723         return true;
03724 }//setNumberOfOtherJobResults
03725 
03726 
03727 bool OSResult::setOtherJobResultName(int idx, string name)
03728 {
03729         if (job == NULL) job = new JobResult();
03730         if (job->otherResults == NULL) return false;
03731         if (idx < 0 || idx >= job->otherResults->numberOfOtherResults) 
03732                 return false;
03733         job->otherResults->other[idx]->name = name;
03734         return true;
03735 }//setOtherJobResultName
03736 
03737 bool OSResult::setOtherJobResultValue(int idx, string value)
03738 {
03739         if (job == NULL) job = new JobResult();
03740         if (job->otherResults == NULL) return false;
03741         if (idx < 0 || idx >= job->otherResults->numberOfOtherResults) 
03742                 return false;
03743         job->otherResults->other[idx]->value = value;
03744         return true;
03745 }//setOtherJobResultValue
03746 
03747 bool OSResult::setOtherJobResultDescription(int idx, string description)
03748 {
03749         if (job == NULL) job = new JobResult();
03750         if (job->otherResults == NULL) return false;
03751         if (idx < 0 || idx >= job->otherResults->numberOfOtherResults) 
03752                 return false;
03753         job->otherResults->other[idx]->description = description;
03754         return true;
03755 }//setOtherJobResultDescription
03756 
03757 
03758 bool OSResult::setVariableNumber(int variableNumber){
03759         if(variableNumber < 0)
03760                 return false;
03761         if(optimization == NULL) optimization = new OptimizationResult();
03762         optimization->numberOfVariables = variableNumber;
03763         return true;
03764 }//setVariableNumber
03765 
03766 bool OSResult::setObjectiveNumber(int objectiveNumber){
03767         if(objectiveNumber < 0)
03768                 return false;
03769         if(optimization == NULL) optimization = new OptimizationResult();
03770         optimization->numberOfObjectives = objectiveNumber;
03771         return true;
03772 }//setObjectiveNumber
03773 
03774 bool OSResult::setConstraintNumber(int constraintNumber){
03775         if(constraintNumber < 0)
03776                 return false;
03777         if(optimization == NULL) optimization = new OptimizationResult();
03778         optimization->numberOfConstraints = constraintNumber;
03779         return true;
03780 }//setConstraintNumber
03781 
03782 bool OSResult::setSolutionNumber(int number){
03783         if(number < 0) return false; 
03784         if(number == 0) return true;
03785         if(optimization == NULL) optimization = new OptimizationResult();
03786         optimization->numberOfSolutions = number;
03787         optimization->solution = new OptimizationSolution*[number];
03788         for(int i = 0; i < number; i++){
03789                 optimization->solution[i] = new OptimizationSolution();
03790         }
03791         return true;
03792 }//setSolutionNumber
03793 
03794 bool OSResult::setSolutionStatus(int solIdx, string type, string description){
03795         int nSols = this->getSolutionNumber();
03796         if(optimization == NULL) return false;
03797         if(nSols <= 0) return false;
03798         if(optimization->solution == NULL || 
03799            solIdx < 0 || solIdx >=  nSols) return false;
03800         if(optimization->solution[solIdx] == NULL)
03801                 optimization->solution[solIdx] = new OptimizationSolution();
03802         if(optimization->solution[solIdx]->status == NULL)
03803                 optimization->solution[solIdx]->status = new OptimizationSolutionStatus();
03804 
03805         if (verifySolutionStatus(type) == false) return false;
03806 
03807         optimization->solution[solIdx]->status->type = type;
03808         optimization->solution[solIdx]->status->description = description;
03809         return true;
03810 }//setSolutionStatus
03811 
03812 bool OSResult::setSolutionStatusType(int solIdx, std::string type){     
03813         int nSols = this->getSolutionNumber();
03814         if(optimization == NULL) return false;
03815         if(nSols <= 0) return false;
03816         if(optimization->solution == NULL || 
03817            solIdx < 0 || solIdx >=  nSols) return false;
03818         if(optimization->solution[solIdx] == NULL)
03819                 optimization->solution[solIdx] = new OptimizationSolution();
03820         if(optimization->solution[solIdx]->status == NULL)
03821                 optimization->solution[solIdx]->status = new OptimizationSolutionStatus();
03822 
03823         if (verifySolutionStatus(type) == false) return false;
03824 
03825         optimization->solution[solIdx]->status->type = type;
03826         return true;
03827 }//setSolutionStatusType
03828 
03829 bool OSResult::setSolutionStatusDescription(int solIdx, std::string description){
03830         int nSols = this->getSolutionNumber();
03831         if(optimization == NULL) return false;
03832         if(nSols <= 0) return false;
03833         if(optimization->solution == NULL || 
03834            solIdx < 0 || solIdx >=  nSols) return false;
03835         if(optimization->solution[solIdx] == NULL){
03836                 optimization->solution[solIdx] = new OptimizationSolution();
03837         }
03838         if(optimization->solution[solIdx]->status == NULL){
03839                 optimization->solution[solIdx]->status = new OptimizationSolutionStatus();
03840         }
03841         optimization->solution[solIdx]->status->description = description;
03842         return true;
03843 }//setSolutionStatusDescription
03844 
03845 bool OSResult::setNumberOfSolutionSubstatuses(int solIdx, int num){
03846         int nSols = this->getSolutionNumber();
03847         if (optimization == NULL) return false;
03848         if (nSols <= 0) return false;
03849         if (optimization->solution == NULL || 
03850            solIdx < 0 || solIdx >=  nSols) return false;
03851         if (optimization->solution[solIdx] == NULL){
03852                 optimization->solution[solIdx] = new OptimizationSolution();
03853         }
03854         if (optimization->solution[solIdx]->status == NULL){
03855                 optimization->solution[solIdx]->status = new OptimizationSolutionStatus();
03856         }
03857         if (num < 0) return false;
03858         if (optimization->solution[solIdx]->status->substatus != NULL) return false;
03859         optimization->solution[solIdx]->status->numberOfSubstatuses = num;
03860         if (num > 0)
03861         {       optimization->solution[solIdx]->status->substatus = new OptimizationSolutionSubstatus*[num];
03862                 for(int i = 0; i < num; i++){
03863                         optimization->solution[solIdx]->status->substatus[i] = new OptimizationSolutionSubstatus();
03864                 }
03865         }
03866         return true;
03867 }//setNumberOfSolutionSubstatuses
03868 
03869 bool OSResult::setSolutionSubstatusType(int solIdx, int substatusIdx, std::string type){
03870         int nSols = this->getSolutionNumber();
03871         if(optimization == NULL) return false;
03872         if(optimization->solution == NULL || 
03873            solIdx < 0 || solIdx >=  nSols) return false;
03874         if(optimization->solution[solIdx] == NULL) return false;
03875         if(optimization->solution[solIdx]->status == NULL) return false;
03876         int nSubs = optimization->solution[solIdx]->status->numberOfSubstatuses;
03877         if (substatusIdx < 0 || substatusIdx >= nSubs) return false;
03878 
03879         if (verifySolutionSubstatusType(type) == 0) return false;
03880 
03881         optimization->solution[solIdx]->status->substatus[substatusIdx]->type = type;
03882         return true;
03883 }//setSolutionSubstatusType
03884         
03885 bool OSResult::setSolutionSubstatusDescription(int solIdx, int substatusIdx, std::string description){
03886         int nSols = this->getSolutionNumber();
03887         if(optimization == NULL) return false;
03888         if(optimization->solution == NULL || 
03889            solIdx < 0 || solIdx >=  nSols) return false;
03890         if(optimization->solution[solIdx] == NULL) return false;
03891         if(optimization->solution[solIdx]->status == NULL) return false;
03892         int nSubs = optimization->solution[solIdx]->status->numberOfSubstatuses;
03893         if (substatusIdx < 0 || substatusIdx >= nSubs) return false;
03894         optimization->solution[solIdx]->status->substatus[substatusIdx]->description = description;
03895         return true;
03896 }//setSolutionSubstatusDescription
03897 
03898 bool OSResult::setSolutionTargetObjectiveIdx(int solIdx, int objectiveIdx){
03899         int nSols = this->getSolutionNumber();
03900         if(optimization == NULL) return false;
03901         if(nSols <= 0) return false;
03902         if(optimization == NULL) return false;
03903         if(optimization->solution == NULL || 
03904            solIdx < 0 || solIdx >=  nSols) return false;
03905         if(optimization->solution[solIdx] == NULL){
03906                 optimization->solution[solIdx] = new OptimizationSolution();
03907         }
03908         if(objectiveIdx >= 0) return false;
03909         optimization->solution[solIdx]->targetObjectiveIdx = objectiveIdx;
03910         return true;            
03911 }//setSolutionTargetObjectiveIdx
03912 
03913 bool OSResult::setSolutionWeightedObjectives(int solIdx, bool weightedObjectives){
03914         int nSols = this->getSolutionNumber();
03915         if (optimization == NULL) return false;
03916         if (nSols <= 0) return false;
03917         if (optimization == NULL) return false;
03918         if (optimization->solution == NULL || 
03919                 solIdx < 0 || solIdx >=  nSols) return false;
03920         if (optimization->solution[solIdx] == NULL)
03921                 optimization->solution[solIdx] = new OptimizationSolution();
03922         optimization->solution[solIdx]->weightedObjectives = weightedObjectives;
03923         return true;            
03924 }//setSolutionWeightedObjectives
03925 
03926 bool OSResult::setSolutionMessage(int solIdx, std::string msg){
03927         int nSols = this->getSolutionNumber();
03928         if(optimization == NULL) return false;
03929         if(nSols <= 0) return false;
03930         if(optimization == NULL) return false;
03931         if(optimization->solution == NULL || 
03932            solIdx < 0 || solIdx >=  nSols) return false;
03933         if(optimization->solution[solIdx] == NULL){
03934                 optimization->solution[solIdx] = new OptimizationSolution();
03935         }
03936         optimization->solution[solIdx]->message = msg;
03937         return true;            
03938 }//setSolutionMessage
03939 
03940 bool OSResult::setNumberOfPrimalVariableValues(int solIdx, int numberOfVar){
03941         int nSols = this->getSolutionNumber();
03942         int nVar  = this->getVariableNumber();
03943         if (numberOfVar <= 0 || numberOfVar > nVar) return false;
03944         if (optimization == NULL) return false;
03945         if (nSols <= 0) return false;
03946         if (optimization->solution == NULL || 
03947            solIdx < 0 || solIdx >=  nSols) return false;
03948         if (optimization->solution[solIdx] == NULL){
03949                 optimization->solution[solIdx] = new OptimizationSolution();
03950         }
03951         if (optimization->solution[solIdx]->variables == NULL){
03952                 optimization->solution[solIdx]->variables = new VariableSolution();
03953         }
03954         if (optimization->solution[solIdx]->variables->values == NULL){
03955                 optimization->solution[solIdx]->variables->values = new VariableValues();
03956         }
03957         if (numberOfVar < 0) return false;
03958         if (optimization->solution[solIdx]->variables->values->var != NULL) return false;
03959         optimization->solution[solIdx]->variables->values->numberOfVar = numberOfVar;
03960         if (numberOfVar > 0)
03961                 optimization->solution[solIdx]->variables->values->var = new VarValue*[numberOfVar];
03962         return true;
03963 }//setNumberOfPrimalVariableValues
03964 
03965 bool OSResult::setPrimalVariableValuesSparse(int solIdx, std::vector<IndexValuePair*> x){
03966         int nSols = this->getSolutionNumber();
03967         int numberOfVar = x.size();
03968         if(optimization == NULL) return false;
03969         if(nSols <= 0) return false;
03970         if(optimization->solution == NULL || 
03971            solIdx < 0 || solIdx >=  nSols) return false;
03972         if(optimization->solution[solIdx] == NULL){
03973                 optimization->solution[solIdx] = new OptimizationSolution();
03974         }
03975         if(optimization->solution[solIdx]->variables == NULL){
03976                 optimization->solution[solIdx]->variables = new VariableSolution();
03977         }
03978         if (optimization->solution[solIdx]->variables->values == NULL){
03979                 optimization->solution[solIdx]->variables->values = new VariableValues();
03980         }
03981         if (optimization->solution[solIdx]->variables->values->var == NULL){
03982                 optimization->solution[solIdx]->variables->values->var = new VarValue*[numberOfVar];
03983         }
03984         optimization->solution[solIdx]->variables->values->numberOfVar = numberOfVar;
03985         if(x.size() == 0){
03986                 //optimization->solution[solIdx]->variables->values->var = NULL;
03987                 return true;
03988         }
03989         for(int i = 0; i < numberOfVar; i++){
03990                 optimization->solution[solIdx]->variables->values->var[i] = new VarValue();
03991                 optimization->solution[solIdx]->variables->values->var[i]->idx = x[i]->idx;
03992                 optimization->solution[solIdx]->variables->values->var[i]->value = x[i]->value;
03993         }
03994         return true;
03995 }//setPrimalVariableValuesSparse
03996 
03997 bool OSResult::setPrimalVariableValuesDense(int solIdx, double *x){
03998         int numberOfVar = this->getVariableNumber();
03999         int nSols = this->getSolutionNumber();
04000         if(optimization == NULL) return false;
04001         if(nSols <= 0) return false;
04002         if(optimization->solution == NULL || 
04003            solIdx < 0 || solIdx >=  nSols) return false;
04004         if(optimization->solution[solIdx] == NULL){
04005                 optimization->solution[solIdx] = new OptimizationSolution();
04006         }
04007         if(optimization->solution[solIdx]->variables == NULL){
04008                 optimization->solution[solIdx]->variables = new VariableSolution();
04009         }
04010         if(optimization->solution[solIdx]->variables->values == NULL){
04011                 optimization->solution[solIdx]->variables->values = new VariableValues();
04012         }
04013         if(optimization->solution[solIdx]->variables->values->var == NULL){
04014                 optimization->solution[solIdx]->variables->values->var = new VarValue*[numberOfVar];
04015         }
04016         optimization->solution[solIdx]->variables->values->numberOfVar = numberOfVar;
04017         if(x == NULL){
04018                 //optimization->solution[solIdx]->variables->values->var = NULL;
04019                 return true;
04020         }
04021         for(int i = 0; i < numberOfVar; i++){
04022                 optimization->solution[solIdx]->variables->values->var[i] = new VarValue();
04023                 optimization->solution[solIdx]->variables->values->var[i]->idx = i;
04024                 optimization->solution[solIdx]->variables->values->var[i]->value = x[i];
04025         }
04026         return true;
04027 }//setPrimalVariableValuesDense
04028 
04029 bool OSResult::setNumberOfVarValues(int solIdx, int numberOfVar){
04030         if (optimization == NULL || optimization->solution == NULL)
04031         {//     throw ErrorClass("No optimization or solution object defined");  
04032                 return false;
04033         }
04034         int nSols = optimization->numberOfSolutions;
04035         if (solIdx < 0 || solIdx >=  nSols) return false;
04036         if (optimization->solution[solIdx] == NULL)
04037                 optimization->solution[solIdx] = new OptimizationSolution();    
04038         if (optimization->solution[solIdx]->variables == NULL)
04039                 optimization->solution[solIdx]->variables = new VariableSolution();
04040         if (optimization->solution[solIdx]->variables->values == NULL)
04041                 optimization->solution[solIdx]->variables->values = new VariableValues();
04042         if (optimization->solution[solIdx]->variables->values->numberOfVar > 0) return false;
04043         if (numberOfVar < 0) return false;
04044         if (optimization->solution[solIdx]->variables->values->var != NULL) return false;
04045         optimization->solution[solIdx]->variables->values->numberOfVar = numberOfVar;
04046         if (numberOfVar > 0)
04047         {       optimization->solution[solIdx]->variables->values->var = new VarValue*[numberOfVar];
04048                 for(int i = 0; i < numberOfVar; i++)
04049                         optimization->solution[solIdx]->variables->values->var[i] = new VarValue();
04050         }
04051         return true;
04052 }//setNumberOfVarValues
04053 
04054 bool OSResult::setVarValue(int solIdx, int number, int idx, double val){
04055         if (optimization == NULL || optimization->solution == NULL)
04056         {//     throw ErrorClass("No optimization or solution object defined");  
04057                 return false;
04058         }
04059         int nSols = optimization->numberOfSolutions;
04060         if (solIdx < 0 || solIdx >=  nSols)
04061         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04062                 return false;
04063         }
04064         if (optimization->solution[solIdx] == NULL)
04065         {//     throw ErrorClass("Solution object not previously defined");  
04066                 return false;
04067         }
04068         if (optimization->solution[solIdx]->variables == NULL)
04069         {//     throw ErrorClass("variables object not previously defined");  
04070                 return false;
04071         }
04072         if (optimization->solution[solIdx]->variables->values == NULL)
04073         {//     throw ErrorClass("values object not previously defined");  
04074                 return false;
04075         }
04076         int nVar =      optimization->solution[solIdx]->variables->values->numberOfVar;
04077         if (number < 0 || number >= nVar)
04078         {//     throw ErrorClass("Trying to set value outside of var array boundaries");
04079                 return false;
04080         }
04081         if (idx < 0)
04082         {//     throw ErrorClass("Variable index cannot be negative.");
04083                 return false;
04084         }
04085         optimization->solution[solIdx]->variables->values->var[number]->idx   = idx;
04086         optimization->solution[solIdx]->variables->values->var[number]->value = val;
04087         return true;
04088 }//setVarValue
04089 
04090 
04091 bool OSResult::setNumberOfVarValuesString(int solIdx, int numberOfVar){
04092         if (optimization == NULL || optimization->solution == NULL)
04093         {//     throw ErrorClass("No optimization or solution object defined");  
04094                 return false;
04095         }
04096         int nSols = optimization->numberOfSolutions;
04097         if (solIdx < 0 || solIdx >=  nSols)
04098         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04099                 return false;
04100         }
04101         if (optimization->solution[solIdx] == NULL)
04102                 optimization->solution[solIdx] = new OptimizationSolution();    
04103         if (optimization->solution[solIdx]->variables == NULL)
04104                 optimization->solution[solIdx]->variables = new VariableSolution();
04105         if (optimization->solution[solIdx]->variables->valuesString == NULL)
04106                 optimization->solution[solIdx]->variables->valuesString = new VariableValuesString();
04107         if (optimization->solution[solIdx]->variables->valuesString->numberOfVar > 0)
04108                 return false;
04109         if (numberOfVar < 0) return false;
04110         if (optimization->solution[solIdx]->variables->valuesString->var != NULL) return false; 
04111         optimization->solution[solIdx]->variables->valuesString->numberOfVar = numberOfVar;
04112         if (numberOfVar > 0)
04113         {       optimization->solution[solIdx]->variables->valuesString->var = new VarValueString*[numberOfVar];
04114                 for(int i = 0; i < numberOfVar; i++)
04115                         optimization->solution[solIdx]->variables->valuesString->var[i] = new VarValueString();
04116         }
04117         return true;
04118 }//setNumberOfVarValuesString
04119 
04120 bool OSResult::setVarValueString(int solIdx, int number, int idx, std::string str){
04121         if (optimization == NULL || optimization->solution == NULL)
04122         {//     throw ErrorClass("No optimization or solution object defined");  
04123                 return false;
04124         }
04125         int nSols = optimization->numberOfSolutions;
04126         if (solIdx < 0 || solIdx >=  nSols)
04127         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04128                 return false;
04129         }
04130         if (optimization->solution[solIdx] == NULL)
04131         {//     throw ErrorClass("Solution object not previously defined");  
04132                 return false;
04133         }
04134         if (optimization->solution[solIdx]->variables == NULL)
04135         {//     throw ErrorClass("variables object not previously defined");  
04136                 return false;
04137         }
04138         if (optimization->solution[solIdx]->variables->valuesString == NULL)
04139         {//     throw ErrorClass("values object not previously defined");  
04140                 return false;
04141         }
04142         int nVar =      optimization->solution[solIdx]->variables->valuesString->numberOfVar;
04143         if (number < 0 || number >= nVar)
04144         {//     throw ErrorClass("Trying to set value outside of var array boundaries");
04145                 return false;
04146         }
04147         if (idx < 0)
04148         {//     throw ErrorClass("Variable index cannot be negative.");
04149                 return false;
04150         }
04151         optimization->solution[solIdx]->variables->valuesString->var[number]->idx   = idx;
04152         optimization->solution[solIdx]->variables->valuesString->var[number]->value = str;
04153         return true;
04154 }//setVarValueString
04155 
04156 bool OSResult::setBasisStatus(int solIdx, int object, int status, int *i, int ni)
04157 {
04158         if (optimization == NULL || optimization->solution == NULL)
04159                 return false;
04160         int nSols = optimization->numberOfSolutions;
04161         if (solIdx < 0 || solIdx >=  nSols)
04162                 return false;
04163         if (optimization->solution[solIdx] == NULL)
04164                 optimization->solution[solIdx] = new OptimizationSolution();
04165 
04166         switch (object) 
04167         {
04168                 case ENUM_PROBLEM_COMPONENT_variables:
04169                 {
04170                         if (optimization->solution[solIdx]->variables == NULL)
04171                                 optimization->solution[solIdx]->variables = new VariableSolution();
04172                         if (optimization->solution[solIdx]->variables->basisStatus == NULL)
04173                                 optimization->solution[solIdx]->variables->basisStatus = new BasisStatus();
04174                         for (int j=0; j<ni; j++) if (i[j] < 0) return false;
04175                         return optimization->solution[solIdx]->variables->basisStatus->setIntVector(status, i, ni);
04176                 }
04177                 case ENUM_PROBLEM_COMPONENT_objectives:
04178                 {
04179                         if (optimization->solution[solIdx]->objectives == NULL)
04180                                 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
04181                         if (optimization->solution[solIdx]->objectives->basisStatus == NULL)
04182                                 optimization->solution[solIdx]->objectives->basisStatus = new BasisStatus();
04183                         for (int j=0; j<ni; j++) if (i[j] >= 0) return false;
04184                         return optimization->solution[solIdx]->objectives->basisStatus->setIntVector(status, i, ni);
04185                 }
04186                 case ENUM_PROBLEM_COMPONENT_constraints:
04187                 {
04188                         if (optimization->solution[solIdx]->constraints == NULL)
04189                                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04190                         if (optimization->solution[solIdx]->constraints->basisStatus == NULL)
04191                                 optimization->solution[solIdx]->constraints->basisStatus = new BasisStatus();
04192                         for (int j=0; j<ni; j++) if (i[j] < 0) return false;
04193                         return optimization->solution[solIdx]->constraints->basisStatus->setIntVector(status, i, ni);
04194                 }
04195                 default: 
04196                         throw ErrorClass("target object not implemented in setBasisStatus");
04197         }
04198 }//setBasisStatus
04199 
04200 bool OSResult::setNumberOfOtherVariableResults(int solIdx, int num){
04201         //int iNumberOfVariables = this->getVariableNumber();
04202         //if(iNumberOfVariables <= 0) return false;
04203         int nSols = this->getSolutionNumber();
04204         if (nSols <= 0) return false;
04205         if (optimization == NULL) return false;
04206         if (optimization->solution == NULL || 
04207            solIdx < 0 || solIdx >=  nSols) return false;
04208         if (optimization->solution[solIdx] == NULL)
04209                 optimization->solution[solIdx] = new OptimizationSolution();    
04210         if (optimization->solution[solIdx]->variables == NULL)
04211                 optimization->solution[solIdx]->variables = new VariableSolution();     
04212         if (num < 0) return false;
04213         if (optimization->solution[solIdx]->variables->other != NULL) return false;
04214         optimization->solution[solIdx]->variables->numberOfOtherVariableResults = num;
04215         if (num > 0)
04216         {       optimization->solution[solIdx]->variables->other = new OtherVariableResult*[num];
04217                 for(int i = 0; i < num; i++)
04218                         optimization->solution[solIdx]->variables->other[ i]  = new OtherVariableResult();
04219         }
04220         return true;
04221 }//setNumberOfOtherVariableResults
04222 
04223 
04224 bool OSResult::setAnOtherVariableResultSparse(int solIdx, int otherIdx, string name, string value, string description, int  *idx,  string *s, int numberOfVar){
04225         int iNumberOfVariables = numberOfVar;
04226         if(iNumberOfVariables <= -1) return false;
04227         int nSols = this->getSolutionNumber();
04228         if(optimization == NULL) return false;
04229         if(nSols <= 0) return false;
04230         if(optimization == NULL) return false;
04231         if(optimization->solution == NULL || 
04232            solIdx < 0 || solIdx >=  nSols) return false;
04233         if(optimization->solution[solIdx] == NULL) return false;
04234         if(optimization->solution[solIdx]->variables == NULL)return false;
04235         if(optimization->solution[solIdx]->variables->other == NULL) return false;
04236         if(optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04237         optimization->solution[solIdx]->variables->other[ otherIdx]->name = name;
04238         optimization->solution[solIdx]->variables->other[ otherIdx]->value = value;
04239         optimization->solution[solIdx]->variables->other[ otherIdx]->description = description;
04240         optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar = numberOfVar;
04241         if (optimization->solution[solIdx]->variables->other[ otherIdx]->var == NULL)
04242                 optimization->solution[solIdx]->variables->other[ otherIdx]->var = new OtherVarResult*[numberOfVar];
04243         for(int i = 0; i < numberOfVar; i++){
04244                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i] = new OtherVarResult();
04245                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i]->idx = idx[i];
04246                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i]->value = s[i];
04247         }
04248         return true;
04249 }//setAnOtherVariableResultSparse
04250 
04251 
04252 bool OSResult::setAnOtherVariableResultDense(int solIdx, int otherIdx, string name, string value, string description, string *s){
04253         int numberOfVar = this->getVariableNumber();
04254         int iNumberOfVariables = numberOfVar;
04255         if(iNumberOfVariables <= -1) return false;
04256         int nSols = this->getSolutionNumber();
04257         if(optimization == NULL) return false;
04258         if(nSols <= 0) return false;
04259         if(optimization == NULL) return false;
04260         if(optimization->solution == NULL || 
04261            solIdx < 0 || solIdx >=  nSols) return false;
04262         if(optimization->solution[solIdx] == NULL) return false;
04263         if(optimization->solution[solIdx]->variables == NULL)return false;
04264         if(optimization->solution[solIdx]->variables->other == NULL) return false;
04265         if(optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04266         optimization->solution[solIdx]->variables->other[ otherIdx]->name = name;
04267         optimization->solution[solIdx]->variables->other[ otherIdx]->value = value;
04268         optimization->solution[solIdx]->variables->other[ otherIdx]->description = description;
04269         optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar = numberOfVar;
04270         if(optimization->solution[solIdx]->variables->other[ otherIdx]->var == NULL)
04271                 optimization->solution[solIdx]->variables->other[ otherIdx]->var = new OtherVarResult*[numberOfVar];
04272         for(int i = 0; i < numberOfVar; i++){
04273                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i] = new OtherVarResult();
04274                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i]->idx = i;
04275                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i]->value = s[i];
04276                 ;
04277         }
04278         return true;
04279 }//setAnOtherVariableResultDense
04280 
04281 bool OSResult::setOtherVariableResultNumberOfVar(int solIdx, int otherIdx, int numberOfVar){
04282         int iNumberOfVariables = numberOfVar;
04283         if (iNumberOfVariables <= -1) return false;
04284         int nSols = this->getSolutionNumber();
04285         if (nSols <= 0) return false;
04286         if (optimization == NULL) return false;
04287         if (optimization->solution == NULL || 
04288            solIdx < 0 || solIdx >=  nSols) return false;
04289         if (optimization->solution[solIdx] == NULL) return false;
04290         if (optimization->solution[solIdx]->variables == NULL) return false;
04291         if (optimization->solution[solIdx]->variables->other == NULL) return false;
04292         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04293         if (optimization->solution[solIdx]->variables->other[ otherIdx]->var == NULL)
04294                 optimization->solution[solIdx]->variables->other[ otherIdx]->var = new OtherVarResult*[numberOfVar];
04295         for(int i = 0; i < numberOfVar; i++)
04296                 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i] = new OtherVarResult();
04297         optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar = numberOfVar;
04298         return true;
04299 }//setOtherVariableResultNumberOfVar
04300 
04301 
04302 bool OSResult::setOtherVariableResultNumberOfEnumerations(int solIdx, int otherIdx, int numberOfEnumerations){
04303         int iNumberOfEnumerations = numberOfEnumerations;
04304         if (iNumberOfEnumerations <= -1) return false;
04305         int nSols = this->getSolutionNumber();
04306         if (nSols <= 0) return false;
04307         if (optimization == NULL) return false;
04308         if (optimization->solution == NULL || 
04309            solIdx < 0 || solIdx >=  nSols) return false;
04310         if (optimization->solution[solIdx] == NULL) return false;
04311         if (optimization->solution[solIdx]->variables == NULL) return false;
04312         if (optimization->solution[solIdx]->variables->other == NULL) return false;
04313         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04314         if (optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration == NULL)
04315                 optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration = new OtherOptionEnumeration*[numberOfEnumerations];
04316         for(int i = 0; i < numberOfEnumerations; i++)
04317                 optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration[i] = new OtherOptionEnumeration();
04318         optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfEnumerations = numberOfEnumerations;
04319         return true;
04320 }//setOtherVariableResultNumberOfEnumerations
04321 
04322 bool OSResult::setOtherVariableResultName(int solIdx, int otherIdx, std::string name){
04323         int numberOfVar = this->getVariableNumber();
04324         int iNumberOfVariables = numberOfVar;
04325         if (iNumberOfVariables <= -1) return false;
04326         int nSols = this->getSolutionNumber();
04327         if (optimization == NULL) return false;
04328         if (nSols <= 0) return false;
04329         if (optimization == NULL) return false;
04330         if (optimization->solution == NULL || 
04331            solIdx < 0 || solIdx >=  nSols) return false;
04332         if (optimization->solution[solIdx] == NULL) return false;
04333         if (optimization->solution[solIdx]->variables == NULL)return false;
04334         if (optimization->solution[solIdx]->variables->other == NULL) return false;
04335         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04336         optimization->solution[solIdx]->variables->other[ otherIdx]->name = name;
04337         return true;
04338 }//setOtherVariableResultName
04339 
04340 bool OSResult::setOtherVariableResultValue(int solIdx, int otherIdx, std::string value){
04341         int numberOfVar = this->getVariableNumber();
04342         int iNumberOfVariables = numberOfVar;
04343         if (iNumberOfVariables <= -1) return false;
04344         int nSols = this->getSolutionNumber();
04345         if (optimization == NULL) return false;
04346         if (nSols <= 0) return false;
04347         if (optimization == NULL) return false;
04348         if (optimization->solution == NULL || 
04349            solIdx < 0 || solIdx >=  nSols) return false;
04350         if (optimization->solution[solIdx] == NULL) return false;
04351         if (optimization->solution[solIdx]->variables == NULL)return false;
04352         if (optimization->solution[solIdx]->variables->other == NULL) return false;
04353         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04354         optimization->solution[solIdx]->variables->other[ otherIdx]->value = value;
04355         return true;
04356 }//setOtherVariableResultValue
04357 
04358 bool OSResult::setOtherVariableResultDescription(int solIdx, int otherIdx, std::string description){
04359         int numberOfVar = this->getVariableNumber();
04360         int iNumberOfVariables = numberOfVar;
04361         if (iNumberOfVariables <= -1) return false;
04362         int nSols = this->getSolutionNumber();
04363         if (optimization == NULL) return false;
04364         if (nSols <= 0) return false;
04365         if (optimization == NULL) return false;
04366         if (optimization->solution == NULL || 
04367            solIdx < 0 || solIdx >=  nSols) return false;
04368         if (optimization->solution[solIdx] == NULL) return false;
04369         if (optimization->solution[solIdx]->variables == NULL)return false;
04370         if (optimization->solution[solIdx]->variables->other == NULL) return false;
04371         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04372         optimization->solution[solIdx]->variables->other[ otherIdx]->description = description;
04373         return true;
04374 }//setOtherVariableResultDescription
04375 
04376 bool OSResult::setOtherVariableResultVarIdx(int solIdx, int otherIdx, int varIdx, int idx){
04377         int nSols = this->getSolutionNumber();
04378         if(nSols <= 0) return false;
04379         if(optimization == NULL) return false;
04380         if(optimization->solution == NULL || 
04381            solIdx < 0 || solIdx >=  nSols) return false;
04382         if(optimization->solution[solIdx] == NULL) return false;
04383         if(optimization->solution[solIdx]->variables == NULL) return false;
04384         if(optimization->solution[solIdx]->variables->other[otherIdx] == NULL) return false;
04385         if(optimization->solution[solIdx]->variables->other[otherIdx]->var == NULL) return false;
04386         optimization->solution[solIdx]->variables->other[otherIdx]->var[varIdx]->idx = idx;
04387         return true;
04388 }//setOtherVariableResultVarIdx
04389 
04390 bool OSResult::setOtherVariableResultVar(int solIdx, int otherIdx, int varIdx, std::string value){
04391         int nSols = this->getSolutionNumber();
04392         if(nSols <= 0) return false;
04393         if(optimization == NULL) return false;
04394         if(optimization->solution == NULL || 
04395            solIdx < 0 || solIdx >=  nSols) return false;
04396         if(optimization->solution[solIdx] == NULL) return false;
04397         if(optimization->solution[solIdx]->variables == NULL) return false;
04398         if(optimization->solution[solIdx]->variables->other[otherIdx] == NULL) return false;
04399         if(optimization->solution[solIdx]->variables->other[otherIdx]->var == NULL) return false;
04400         optimization->solution[solIdx]->variables->other[otherIdx]->var[varIdx]->value = value;
04401         return true;            
04402 }//setOtherVariableResultVar
04403 
04404 bool OSResult::setOtherOptionEnumeration(int solIdx, int otherIdx, int object, int enumIdx, std::string value, std::string description, int *i, int ni)
04405 {
04406         if (optimization == NULL || optimization->solution == NULL)
04407                 return false;
04408         int nSols = optimization->numberOfSolutions;
04409         if (solIdx < 0 || solIdx >=  nSols)
04410                 return false;
04411         if (optimization->solution[solIdx] == NULL) return false;
04412 
04413         switch (object) 
04414         {
04415                 case ENUM_PROBLEM_COMPONENT_variables:
04416                 {
04417                         if (optimization->solution[solIdx]->variables == NULL) return false;
04418                         if (optimization->solution[solIdx]->variables->other == NULL) return false;
04419                         int n_other = optimization->solution[solIdx]->variables->numberOfOtherVariableResults;
04420                         if (otherIdx < 0 || otherIdx >= n_other) return false; 
04421                         if (optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
04422                         if (optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration == NULL) return false;
04423                         int n_enum = optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfEnumerations;
04424                         if (enumIdx < 0 || enumIdx >= n_enum) return false;
04425                         if (optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration[enumIdx] == NULL) 
04426                                 optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration[enumIdx] = new OtherOptionEnumeration();
04427                         for (int j=0; j<ni; j++) if (i[j] < 0) return false;
04428                         return optimization->solution[solIdx]->variables->other[ otherIdx]->enumeration[enumIdx]->setOtherOptionEnumeration(value, description, i, ni);
04429                 }
04430                 case ENUM_PROBLEM_COMPONENT_objectives:
04431                 {
04432                         if (optimization->solution[solIdx]->objectives == NULL) return false;
04433                         if (optimization->solution[solIdx]->objectives->other == NULL) return false;
04434                         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return false;
04435                         if (optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration == NULL) return false;
04436                         int n_enum = optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfEnumerations;
04437                         if (enumIdx < 0 || enumIdx >= n_enum) return false;
04438                         if (optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration[enumIdx] == NULL) 
04439                                 optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration[enumIdx] = new OtherOptionEnumeration();
04440                         for (int j=0; j<ni; j++) if (i[j] >= 0) return false;
04441                         return optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration[enumIdx]->setOtherOptionEnumeration(value, description, i, ni);
04442                 }
04443                 case ENUM_PROBLEM_COMPONENT_constraints:
04444                 {
04445                         if (optimization->solution[solIdx]->constraints == NULL) return false;
04446                         if (optimization->solution[solIdx]->constraints->other == NULL) return false;
04447                         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return false;
04448                         if (optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration == NULL) return false;
04449                         int n_enum = optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfEnumerations;
04450                         if (enumIdx < 0 || enumIdx >= n_enum) return false;
04451                         if (optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration[enumIdx] == NULL) 
04452                                 optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration[enumIdx] = new OtherOptionEnumeration();
04453                         for (int j=0; j<ni; j++) if (i[j] < 0) return false;
04454                         return optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration[enumIdx]->setOtherOptionEnumeration(value, description, i, ni);
04455                 }
04456 
04457                 default: 
04458                         throw ErrorClass("target object not implemented in setOtherOptionEnumeration");
04459         }
04460 }//setOtherOptionEnumeration
04461 
04462 
04463 bool OSResult::setNumberOfOtherObjectiveResults(int solIdx, int num){
04464         int nSols = this->getSolutionNumber();
04465         if (nSols <= 0) return false;
04466         if (optimization == NULL) return false;
04467         if (optimization->solution == NULL || 
04468                 solIdx < 0 || solIdx >=  nSols) return false;
04469         if (optimization->solution[solIdx] == NULL){
04470                 optimization->solution[solIdx] = new OptimizationSolution();
04471         }
04472         if (optimization->solution[solIdx]->objectives == NULL){
04473                 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
04474         }
04475         if (num < 0) return false;
04476         if (optimization->solution[solIdx]->objectives->other != NULL) return false;
04477         optimization->solution[solIdx]->objectives->numberOfOtherObjectiveResults = num;
04478         if (num > 0)
04479         {       optimization->solution[solIdx]->objectives->other = new OtherObjectiveResult*[num];
04480                 for(int i = 0; i < num; i++){
04481                         optimization->solution[solIdx]->objectives->other[ i]  = new OtherObjectiveResult();
04482                 }
04483         }
04484         return true;
04485 }//setNumberOfOtherObjectiveResults
04486 
04487 bool OSResult::setNumberOfObjValues(int solIdx, int numberOfObj){
04488         if (optimization == NULL || optimization->solution == NULL)
04489         {//     throw ErrorClass("No optimization or solution object defined");  
04490                 return false;
04491         }
04492         int nSols = optimization->numberOfSolutions;
04493         if (solIdx < 0 || solIdx >=  nSols)
04494         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04495                 return false;
04496         }
04497         if (optimization->solution[solIdx] == NULL)
04498                 optimization->solution[solIdx] = new OptimizationSolution();    
04499         if (optimization->solution[solIdx]->objectives == NULL)
04500                 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
04501         if (optimization->solution[solIdx]->objectives->values == NULL)
04502                 optimization->solution[solIdx]->objectives->values = new ObjectiveValues();
04503         if (optimization->solution[solIdx]->objectives->values->numberOfObj > 0)
04504                 return false;
04505         if (numberOfObj < 0) return false;
04506         if (optimization->solution[solIdx]->objectives->values->obj != NULL) return false;
04507         optimization->solution[solIdx]->objectives->values->numberOfObj = numberOfObj;
04508         if (numberOfObj > 0)
04509         {       optimization->solution[solIdx]->objectives->values->obj = new ObjValue*[numberOfObj];
04510                 for(int i = 0; i < numberOfObj; i++)
04511                         optimization->solution[solIdx]->objectives->values->obj[i] = new ObjValue();
04512         }
04513         return true;
04514 }//setNumberOfObjValues
04515 
04516 
04517 bool OSResult::setNumberOfObjectiveValues(int solIdx, int numberOfObj){
04518         int nSols = this->getSolutionNumber();
04519         int nObj  = this->getObjectiveNumber();
04520         if (numberOfObj <= 0 || numberOfObj > nObj) return false;
04521         if (optimization == NULL) return false;
04522         if (nSols <= 0) return false;
04523         if (optimization->solution == NULL || 
04524            solIdx < 0 || solIdx >=  nSols) return false;
04525         if (optimization->solution[solIdx] == NULL){
04526                 optimization->solution[solIdx] = new OptimizationSolution();
04527         }
04528         if (optimization->solution[solIdx]->objectives == NULL){
04529                 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
04530         }
04531         if (optimization->solution[solIdx]->objectives->values == NULL){
04532                 optimization->solution[solIdx]->objectives->values = new ObjectiveValues();
04533         }
04534         optimization->solution[solIdx]->objectives->values->numberOfObj = numberOfObj;
04535 //      optimization->solution[solIdx]->objectives->values->obj = new ObjValue*[numberOfObj];
04536 
04537         return true;
04538 }//setNumberOfObjectiveValues
04539 
04540 
04541 
04542 bool OSResult::setObjectiveValuesSparse(int solIdx, std::vector<IndexValuePair*> x){
04543         int numberOfObj = x.size();
04544         int iNumberOfObjectives = numberOfObj;
04545         if(iNumberOfObjectives < 0) return false;
04546         if(iNumberOfObjectives == 0) return true;
04547         if(x.size() == 0) return false;
04548         int nSols = this->getSolutionNumber();
04549         if(optimization == NULL) return false;
04550         if(nSols <= 0) return false;
04551         if(optimization == NULL) return false;
04552         if(optimization->solution == NULL || 
04553            solIdx < 0 || solIdx >=  nSols) return false;
04554         if(optimization->solution[solIdx] == NULL){
04555                 optimization->solution[solIdx] = new OptimizationSolution();
04556         }
04557         if(optimization->solution[solIdx]->objectives == NULL){
04558                 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
04559         }
04560         if(optimization->solution[solIdx]->objectives->values == NULL){
04561                 optimization->solution[solIdx]->objectives->values = new ObjectiveValues();
04562         }
04563         if(optimization->solution[solIdx]->objectives->values->obj == NULL){
04564                 optimization->solution[solIdx]->objectives->values->obj = new ObjValue*[iNumberOfObjectives];
04565         }
04566         optimization->solution[solIdx]->objectives->values->numberOfObj = iNumberOfObjectives;
04567         for(int i = 0; i < iNumberOfObjectives; i++){
04568                 optimization->solution[solIdx]->objectives->values->obj[i] = new ObjValue();
04569                 optimization->solution[solIdx]->objectives->values->obj[i]->idx = x[i]->idx;
04570                 optimization->solution[solIdx]->objectives->values->obj[i]->value = x[i]->value;
04571         }
04572         return true;
04573 }//setObjectiveValuesSparse
04574 
04575 
04576 bool OSResult::setObjectiveValuesDense(int solIdx, double *objectiveValues){
04577         int numberOfObj = this->getObjectiveNumber();
04578         int iNumberOfObjectives = numberOfObj;
04579         if (iNumberOfObjectives < 0) return false;
04580         if (iNumberOfObjectives == 0) return true;
04581         if (objectiveValues == NULL) return false;
04582         int nSols = this->getSolutionNumber();
04583         if (optimization == NULL) return false;
04584         if (nSols <= 0) return false;
04585         if (optimization == NULL) return false;
04586         if (optimization->solution == NULL || 
04587                 solIdx < 0 || solIdx >=  nSols) return false;
04588         if (optimization->solution[solIdx] == NULL){
04589                 optimization->solution[solIdx] = new OptimizationSolution();
04590         }
04591         if (optimization->solution[solIdx]->objectives == NULL){
04592                 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
04593         }
04594         if (optimization->solution[solIdx]->objectives->values == NULL){
04595                 optimization->solution[solIdx]->objectives->values = new ObjectiveValues();
04596         }
04597         if (optimization->solution[solIdx]->objectives->values->obj == NULL){
04598                 optimization->solution[solIdx]->objectives->values->obj = new ObjValue*[iNumberOfObjectives];
04599         }
04600 
04601         optimization->solution[solIdx]->objectives->values->numberOfObj = iNumberOfObjectives;
04602         for(int i = 0; i < iNumberOfObjectives; i++){
04603                 optimization->solution[solIdx]->objectives->values->obj[i] = new ObjValue();
04604                 optimization->solution[solIdx]->objectives->values->obj[i]->idx = -(i+1);
04605                 optimization->solution[solIdx]->objectives->values->obj[i]->value = objectiveValues[i];
04606         }
04607 
04608         return true;
04609 }//setObjectiveValuesDense
04610 
04611 
04612 
04613 bool OSResult::setObjValue(int solIdx, int number, int idx, double val){
04614         if (optimization == NULL || optimization->solution == NULL)
04615         {//     throw ErrorClass("No optimization or solution object defined");  
04616                 return false;
04617         }
04618         int nSols = optimization->numberOfSolutions;
04619         if (solIdx < 0 || solIdx >=  nSols)
04620         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04621                 return false;
04622         }
04623         if (optimization->solution[solIdx] == NULL)
04624         {//     throw ErrorClass("Solution object not previously defined");  
04625                 return false;
04626         }
04627         if (optimization->solution[solIdx]->objectives == NULL)
04628         {//     throw ErrorClass("objectives object not previously defined");  
04629                 return false;
04630         }
04631         if (optimization->solution[solIdx]->objectives->values == NULL)
04632         {//     throw ErrorClass("values object not previously defined");  
04633                 return false;
04634         }
04635         int nObj =      optimization->solution[solIdx]->objectives->values->numberOfObj;
04636         if (number < 0 || number >= nObj)
04637         {//     throw ErrorClass("Trying to set value outside of obj array boundaries");
04638                 return false;
04639         }
04640         if (idx >= 0)
04641         {//     throw ErrorClass("Objective index must be negative.");
04642                 return false;
04643         }
04644         optimization->solution[solIdx]->objectives->values->obj[number]->idx   = idx;
04645         optimization->solution[solIdx]->objectives->values->obj[number]->value = val;
04646         return true;
04647 }//setObjValue
04648 
04649 bool OSResult::setOtherObjectiveResultNumberOfObj(int solIdx, int otherIdx, int numberOfObj){
04650         int iNumberOfObjectives = numberOfObj;
04651         if (iNumberOfObjectives <= -1) return false;
04652         int nSols = this->getSolutionNumber();
04653         if (optimization == NULL) return false;
04654         if (nSols <= 0) return false;
04655         if (optimization == NULL) return false;
04656         if (optimization->solution == NULL || 
04657            solIdx < 0 || solIdx >=  nSols) return false;
04658         if (optimization->solution[solIdx] == NULL) return false;
04659         if (optimization->solution[solIdx]->objectives == NULL)return false;
04660         if (optimization->solution[solIdx]->objectives->other == NULL) return false;
04661         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return false;
04662         if (optimization->solution[solIdx]->objectives->other[ otherIdx]->obj == NULL)
04663                 optimization->solution[solIdx]->objectives->other[ otherIdx]->obj = new OtherObjResult*[numberOfObj];
04664         for(int i = 0; i < numberOfObj; i++)
04665         {
04666                 optimization->solution[solIdx]->objectives->other[ otherIdx]->obj[i] = new OtherObjResult();
04667         }
04668         optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfObj = numberOfObj;
04669         return true;
04670 }//setOtherObjectiveResultNumberOfObj
04671 
04672 
04673 bool OSResult::setOtherObjectiveResultNumberOfEnumerations(int solIdx, int otherIdx, int numberOfEnumerations){
04674         int iNumberOfEnumerations = numberOfEnumerations;
04675         if (iNumberOfEnumerations <= -1) return false;
04676         int nSols = this->getSolutionNumber();
04677         if (nSols <= 0) return false;
04678         if (optimization == NULL) return false;
04679         if (optimization->solution == NULL || 
04680            solIdx < 0 || solIdx >=  nSols) return false;
04681         if (optimization->solution[solIdx] == NULL) return false;
04682         if (optimization->solution[solIdx]->objectives == NULL) return false;
04683         if (optimization->solution[solIdx]->objectives->other == NULL) return false;
04684         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return false;
04685         if (optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration == NULL)
04686                 optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration = new OtherOptionEnumeration*[numberOfEnumerations];
04687         for(int i = 0; i < numberOfEnumerations; i++)
04688                 optimization->solution[solIdx]->objectives->other[ otherIdx]->enumeration[i] = new OtherOptionEnumeration();
04689         optimization->solution[solIdx]->objectives->other[ otherIdx]->numberOfEnumerations = numberOfEnumerations;
04690         return true;
04691 }//setOtherObjectiveResultNumberOfEnumerations
04692 
04693 bool OSResult::setOtherObjectiveResultName(int solIdx, int otherIdx, std::string name){
04694         int numberOfObj = this->getObjectiveNumber();
04695         int iNumberOfObjectives = numberOfObj;
04696         if (iNumberOfObjectives <= -1) return false;
04697         int nSols = this->getSolutionNumber();
04698         if (optimization == NULL) return false;
04699         if (nSols <= 0) return false;
04700         if (optimization == NULL) return false;
04701         if (optimization->solution == NULL || 
04702            solIdx < 0 || solIdx >=  nSols) return false;
04703         if (optimization->solution[solIdx] == NULL) return false;
04704         if (optimization->solution[solIdx]->objectives == NULL)return false;
04705         if (optimization->solution[solIdx]->objectives->other == NULL) return false;
04706         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return false;
04707         optimization->solution[solIdx]->objectives->other[ otherIdx]->name = name;
04708         return true;
04709 }//setOtherObjectiveResultName
04710 
04711 bool OSResult::setOtherObjectiveResultValue(int solIdx, int otherIdx, std::string value){
04712         int numberOfObj = this->getObjectiveNumber();
04713         int iNumberOfObjectives = numberOfObj;
04714         if (iNumberOfObjectives <= -1) return false;
04715         int nSols = this->getSolutionNumber();
04716         if (optimization == NULL) return false;
04717         if (nSols <= 0) return false;
04718         if (optimization == NULL) return false;
04719         if (optimization->solution == NULL || 
04720            solIdx < 0 || solIdx >=  nSols) return false;
04721         if (optimization->solution[solIdx] == NULL) return false;
04722         if (optimization->solution[solIdx]->objectives == NULL)return false;
04723         if (optimization->solution[solIdx]->objectives->other == NULL) return false;
04724         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return false;
04725         optimization->solution[solIdx]->objectives->other[ otherIdx]->value = value;
04726         return true;
04727 }//setOtherObjectiveResultValue
04728 
04729 bool OSResult::setOtherObjectiveResultDescription(int solIdx, int otherIdx, std::string description){
04730         int numberOfObj = this->getObjectiveNumber();
04731         int iNumberOfObjectives = numberOfObj;
04732         if (iNumberOfObjectives <= -1) return false;
04733         int nSols = this->getSolutionNumber();
04734         if (optimization == NULL) return false;
04735         if (nSols <= 0) return false;
04736         if (optimization == NULL) return false;
04737         if (optimization->solution == NULL || 
04738            solIdx < 0 || solIdx >=  nSols) return false;
04739         if (optimization->solution[solIdx] == NULL) return false;
04740         if (optimization->solution[solIdx]->objectives == NULL)return false;
04741         if (optimization->solution[solIdx]->objectives->other == NULL) return false;
04742         if (optimization->solution[solIdx]->objectives->other[ otherIdx] == NULL) return false;
04743         optimization->solution[solIdx]->objectives->other[ otherIdx]->description = description;
04744         return true;
04745 }//setOtherObjectiveResultDescription
04746 
04747 bool OSResult::setOtherObjectiveResultObjIdx(int solIdx, int otherIdx, int objIdx, int idx){
04748         int nSols = this->getSolutionNumber();
04749         if (nSols <= 0) return false;
04750         if (optimization == NULL) return false;
04751         if (optimization->solution == NULL || 
04752                 solIdx < 0 || solIdx >=  nSols) return false;
04753         if (optimization->solution[solIdx] == NULL) return false;
04754         if (optimization->solution[solIdx]->objectives == NULL) return false;
04755         if (optimization->solution[solIdx]->objectives->other[otherIdx] == NULL) return false;
04756         if (optimization->solution[solIdx]->objectives->other[otherIdx]->obj == NULL) return false;
04757         if (idx >= 0) return false;
04758         optimization->solution[solIdx]->objectives->other[otherIdx]->obj[objIdx]->idx = idx;
04759         return true;
04760 }//setOtherObjectiveResultObjIdx
04761 
04762 bool OSResult::setOtherObjectiveResultObj(int solIdx, int otherIdx, int objIdx, std::string value){
04763         int nSols = this->getSolutionNumber();
04764         if (nSols <= 0) return false;
04765         if (optimization == NULL) return false;
04766         if (optimization->solution == NULL || 
04767                 solIdx < 0 || solIdx >=  nSols) return false;
04768         if (optimization->solution[solIdx] == NULL) return false;
04769         if (optimization->solution[solIdx]->objectives == NULL) return false;
04770         if (optimization->solution[solIdx]->objectives->other[otherIdx] == NULL) return false;
04771         if (optimization->solution[solIdx]->objectives->other[otherIdx]->obj == NULL) return false;
04772         optimization->solution[solIdx]->objectives->other[otherIdx]->obj[objIdx]->value = value;
04773         return true;
04774 }//setOtherObjectiveResultObj
04775 
04776 bool OSResult::setNumberOfOtherConstraintResults(int solIdx, int num){
04777         int nSols = this->getSolutionNumber();
04778         if (nSols <= 0) return false;
04779         if (optimization == NULL) return false;
04780         if (optimization->solution == NULL || 
04781                 solIdx < 0 || solIdx >=  nSols) return false;
04782         if (optimization->solution[solIdx] == NULL){
04783                 optimization->solution[solIdx] = new OptimizationSolution();
04784         }
04785         if (optimization->solution[solIdx]->constraints == NULL){
04786                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04787         }
04788         if (num < 0) return false;
04789         if (optimization->solution[solIdx]->constraints->other != NULL) return false;
04790         optimization->solution[solIdx]->constraints->numberOfOtherConstraintResults =  num;
04791         if (num > 0)
04792         {       optimization->solution[solIdx]->constraints->other = new OtherConstraintResult*[num];
04793                 for(int i = 0; i < num; i++){
04794                         optimization->solution[solIdx]->constraints->other[ i]  = new OtherConstraintResult();
04795                 }
04796         }
04797         return true;
04798 }//setNumberOfOtherConstraintResults
04799 
04800 bool OSResult::setNumberOfDualValues(int solIdx, int numberOfCon){
04801         if (optimization == NULL || optimization->solution == NULL)
04802         {//     throw ErrorClass("No optimization or solution object defined");  
04803                 return false;
04804         }
04805         int nSols = optimization->numberOfSolutions;
04806         if (solIdx < 0 || solIdx >=  nSols)
04807         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04808                 return false;
04809         }
04810         if (optimization->solution[solIdx] == NULL)
04811                 optimization->solution[solIdx] = new OptimizationSolution();    
04812         if (optimization->solution[solIdx]->constraints == NULL)
04813                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04814         if (optimization->solution[solIdx]->constraints->dualValues == NULL)
04815                 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
04816         if (optimization->solution[solIdx]->constraints->dualValues->numberOfCon > 0)
04817                 return false;
04818         if (numberOfCon < 0) return false;
04819         if (optimization->solution[solIdx]->constraints->dualValues->con != NULL) return false;
04820         optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
04821         if (numberOfCon > 0)
04822         {       optimization->solution[solIdx]->constraints->dualValues->con = new DualVarValue*[numberOfCon];
04823                 for(int i = 0; i < numberOfCon; i++)
04824                         optimization->solution[solIdx]->constraints->dualValues->con[i] = new DualVarValue();
04825         }
04826         return true;
04827 }//setNumberOfDualValues
04828 
04829 
04830 bool OSResult::setNumberOfDualVariableValues(int solIdx, int numberOfCon){
04831         int nSols = this->getSolutionNumber();
04832         int nCon  = this->getConstraintNumber();
04833         if (numberOfCon <= 0 || numberOfCon > nCon) return false;
04834         if (optimization == NULL) return false;
04835         if (nSols <= 0) return false;
04836         if (optimization->solution == NULL || 
04837            solIdx < 0 || solIdx >=  nSols) return false;
04838         if (optimization->solution[solIdx] == NULL){
04839                 optimization->solution[solIdx] = new OptimizationSolution();
04840         }
04841         if (optimization->solution[solIdx]->constraints == NULL){
04842                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04843         }
04844         if (optimization->solution[solIdx]->constraints->dualValues == NULL){
04845                 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
04846         }
04847         optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
04848 //      optimization->solution[solIdx]->constraints->dualValues->con = new DualVarValue*[numberOfCon];
04849 
04850         return true;
04851 }//setNumberOfDualVariableValues
04852 
04853    
04854 
04855 bool OSResult::setDualVariableValuesSparse(int solIdx, std::vector<IndexValuePair*> x){
04856         int numberOfCon = x.size();
04857         int iNumberOfConstraints = numberOfCon;
04858         if(iNumberOfConstraints < 0) return false;
04859         if(iNumberOfConstraints == 0) return true;
04860         int nSols = this->getSolutionNumber();
04861         if(optimization == NULL) return false;
04862         if(nSols <= 0) return false;
04863         if(optimization == NULL) return false;
04864         if(optimization->solution == NULL || 
04865            solIdx < 0 || solIdx >=  nSols) return false;
04866         if(optimization->solution[solIdx] == NULL){
04867                 optimization->solution[solIdx] = new OptimizationSolution();
04868         }
04869         if(optimization->solution[solIdx]->constraints == NULL){
04870                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04871         }
04872         if(optimization->solution[solIdx]->constraints->dualValues == NULL){
04873                 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
04874         }
04875         if(optimization->solution[solIdx]->constraints->dualValues->con == NULL){
04876                 optimization->solution[solIdx]->constraints->dualValues->con = new DualVarValue*[numberOfCon];
04877         }
04878         if(x.size() == 0){
04879                 optimization->solution[solIdx]->constraints->dualValues = NULL;
04880                 return true;
04881         } 
04882         optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
04883         for(int i = 0; i < iNumberOfConstraints; i++){
04884                 optimization->solution[solIdx]->constraints->dualValues->con[i] = new DualVarValue();
04885                 optimization->solution[solIdx]->constraints->dualValues->con[i]->idx = x[i]->idx;
04886                 optimization->solution[solIdx]->constraints->dualValues->con[i]->value = x[i]->value;
04887         }
04888         return true;
04889 }//setDualVariableValuesSparse
04890 
04891 bool OSResult::setDualVariableValuesDense(int solIdx, double *y){
04892         int numberOfCon = this->getConstraintNumber();
04893         int iNumberOfConstraints = numberOfCon;
04894         if (iNumberOfConstraints < 0) return false;
04895         if (iNumberOfConstraints == 0) return true;
04896         int nSols = this->getSolutionNumber();
04897         if (optimization == NULL) return false;
04898         if (nSols <= 0) return false;
04899         if (optimization == NULL) return false;
04900         if (optimization->solution == NULL || 
04901            solIdx < 0 || solIdx >=  nSols) return false;
04902         if (optimization->solution[solIdx] == NULL){
04903                 optimization->solution[solIdx] = new OptimizationSolution();
04904         }
04905         if (optimization->solution[solIdx]->constraints == NULL){
04906                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04907         }
04908         if (optimization->solution[solIdx]->constraints->dualValues == NULL){
04909                 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
04910         }
04911         if (optimization->solution[solIdx]->constraints->dualValues->con == NULL){
04912                 optimization->solution[solIdx]->constraints->dualValues->con = new DualVarValue*[numberOfCon];
04913         }
04914         if (y == NULL){
04915                 optimization->solution[solIdx]->constraints->dualValues = NULL;
04916                 return true;
04917         } 
04918         optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
04919         for(int i = 0; i < iNumberOfConstraints; i++){
04920                 optimization->solution[solIdx]->constraints->dualValues->con[i] = new DualVarValue();
04921                 optimization->solution[solIdx]->constraints->dualValues->con[i]->idx = i;
04922                 optimization->solution[solIdx]->constraints->dualValues->con[i]->value = y[i];
04923         }
04924         return true;
04925 }//setDualVariableValuesDense
04926 
04927 bool OSResult::setConstraintValuesDense(int solIdx, double *dualVarValues){
04928         int numberOfCon = this->getConstraintNumber();
04929         int iNumberOfConstraints = numberOfCon;
04930         if (iNumberOfConstraints <= 0) return false;
04931         int nSols = this->getSolutionNumber();
04932         if (optimization == NULL) return false;
04933         if (nSols <= 0) return false;
04934         if (optimization == NULL) return false;
04935         if (optimization->solution == NULL || 
04936            solIdx < 0 || solIdx >=  nSols) return false;
04937         if (optimization->solution[solIdx] == NULL){
04938                 optimization->solution[solIdx] = new OptimizationSolution();
04939         }
04940         if (optimization->solution[solIdx]->constraints == NULL){
04941                 optimization->solution[solIdx]->constraints = new ConstraintSolution();
04942         }
04943         if (optimization->solution[solIdx]->constraints->dualValues == NULL){
04944                 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
04945         }
04946         if (optimization->solution[solIdx]->constraints->dualValues->con == NULL){
04947                 optimization->solution[solIdx]->constraints->dualValues->con = new DualVarValue*[numberOfCon];
04948         }
04949         if (dualVarValues == NULL){
04950                 optimization->solution[solIdx]->constraints->dualValues = NULL;
04951                 return true;
04952         }
04953         //optimization->solution[solIdx]->constraints->dualValues->con = new ConValue*[ iNumberOfConstraints];
04954         optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
04955         for(int i = 0; i < iNumberOfConstraints; i++){
04956                 optimization->solution[solIdx]->constraints->dualValues->con[i] = new DualVarValue();
04957                 //optimization->solution[solIdx]->constraints->dualValues->con[i] = new ConValue();
04958                 optimization->solution[solIdx]->constraints->dualValues->con[i]->idx = i;
04959                 optimization->solution[solIdx]->constraints->dualValues->con[i]->value = dualVarValues[i];
04960         }
04961         return true;
04962 }//setConstraintValuesDense
04963 
04964 bool OSResult::setDualValue(int solIdx, int number, int idx, double val){
04965         if (optimization == NULL || optimization->solution == NULL)
04966         {//     throw ErrorClass("No optimization or solution object defined");  
04967                 return false;
04968         }
04969         int nSols = optimization->numberOfSolutions;
04970         if (solIdx < 0 || solIdx >=  nSols)
04971         {//     throw ErrorClass("Trying to use a solution that was not previously declared");  
04972                 return false;
04973         }
04974         if (optimization->solution[solIdx] == NULL)
04975         {//     throw ErrorClass("Solution object not previously defined");  
04976                 return false;
04977         }
04978         if (optimization->solution[solIdx]->constraints == NULL)
04979         {//     throw ErrorClass("constraints object not previously defined");  
04980                 return false;
04981         }
04982         if (optimization->solution[solIdx]->constraints->dualValues == NULL)
04983         {//     throw ErrorClass("values object not previously defined");  
04984                 return false;
04985         }
04986         int nCon =      optimization->solution[solIdx]->constraints->dualValues->numberOfCon;
04987         if (number < 0 || number >= nCon)
04988         {//     throw ErrorClass("Trying to set value outside of con array boundaries");
04989                 return false;
04990         }
04991         if (idx < 0)
04992         {//     throw ErrorClass("Constraint index cannot be negative.");
04993                 return false;
04994         }
04995         optimization->solution[solIdx]->constraints->dualValues->con[number]->idx   = idx;
04996         optimization->solution[solIdx]->constraints->dualValues->con[number]->value = val;
04997         return true;
04998 }//setDualValue
04999 
05000 bool OSResult::setOtherConstraintResultNumberOfCon(int solIdx, int otherIdx, int numberOfCon){
05001         int iNumberOfConstraints = numberOfCon;
05002         if (iNumberOfConstraints <= -1) return false;
05003         int nSols = this->getSolutionNumber();
05004         if (optimization == NULL) return false;
05005         if (nSols <= 0) return false;
05006         if (optimization == NULL) return false;
05007         if (optimization->solution == NULL || 
05008            solIdx < 0 || solIdx >=  nSols) return false;
05009         if (optimization->solution[solIdx] == NULL) return false;
05010         if (optimization->solution[solIdx]->constraints == NULL)return false;
05011         if (optimization->solution[solIdx]->constraints->other == NULL) return false;
05012         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return false;
05013         if (optimization->solution[solIdx]->constraints->other[ otherIdx]->con == NULL)
05014                 optimization->solution[solIdx]->constraints->other[ otherIdx]->con = new OtherConResult*[numberOfCon];
05015         for(int i = 0; i < numberOfCon; i++)
05016                 optimization->solution[solIdx]->constraints->other[ otherIdx]->con[i] = new OtherConResult();
05017         optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfCon = numberOfCon;
05018         return true;
05019 }//setOtherConstraintResultNumberOfCon
05020 
05021 
05022 bool OSResult::setOtherConstraintResultNumberOfEnumerations(int solIdx, int otherIdx, int numberOfEnumerations){
05023         int iNumberOfEnumerations = numberOfEnumerations;
05024         if (iNumberOfEnumerations <= -1) return false;
05025         int nSols = this->getSolutionNumber();
05026         if (nSols <= 0) return false;
05027         if (optimization == NULL) return false;
05028         if (optimization->solution == NULL || 
05029            solIdx < 0 || solIdx >=  nSols) return false;
05030         if (optimization->solution[solIdx] == NULL) return false;
05031         if (optimization->solution[solIdx]->constraints == NULL) return false;
05032         if (optimization->solution[solIdx]->constraints->other == NULL) return false;
05033         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return false;
05034         if (optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration == NULL)
05035                 optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration = new OtherOptionEnumeration*[numberOfEnumerations];
05036         for(int i = 0; i < numberOfEnumerations; i++)
05037                 optimization->solution[solIdx]->constraints->other[ otherIdx]->enumeration[i] = new OtherOptionEnumeration();
05038         optimization->solution[solIdx]->constraints->other[ otherIdx]->numberOfEnumerations = numberOfEnumerations;
05039         return true;
05040 }//setOtherConstraintResultNumberOfEnumerations
05041 
05042 bool OSResult::setOtherConstraintResultName(int solIdx, int otherIdx, std::string name){
05043         int numberOfCon = this->getConstraintNumber();
05044         int iNumberOfConstraints = numberOfCon;
05045         if (iNumberOfConstraints <= -1) return false;
05046         int nSols = this->getSolutionNumber();
05047         if (optimization == NULL) return false;
05048         if (nSols <= 0) return false;
05049         if (optimization == NULL) return false;
05050         if (optimization->solution == NULL || 
05051            solIdx < 0 || solIdx >=  nSols) return false;
05052         if (optimization->solution[solIdx] == NULL) return false;
05053         if (optimization->solution[solIdx]->constraints == NULL)return false;
05054         if (optimization->solution[solIdx]->constraints->other == NULL) return false;
05055         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return false;
05056         optimization->solution[solIdx]->constraints->other[ otherIdx]->name = name;
05057         return true;
05058 }//setOtherConstraintResultName
05059 
05060 bool OSResult::setOtherConstraintResultValue(int solIdx, int otherIdx, std::string value){
05061         int numberOfCon = this->getConstraintNumber();
05062         int iNumberOfConstraints = numberOfCon;
05063         if (iNumberOfConstraints <= -1) return false;
05064         int nSols = this->getSolutionNumber();
05065         if (optimization == NULL) return false;
05066         if (nSols <= 0) return false;
05067         if (optimization == NULL) return false;
05068         if (optimization->solution == NULL || 
05069            solIdx < 0 || solIdx >=  nSols) return false;
05070         if (optimization->solution[solIdx] == NULL) return false;
05071         if (optimization->solution[solIdx]->constraints == NULL)return false;
05072         if (optimization->solution[solIdx]->constraints->other == NULL) return false;
05073         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return false;
05074         optimization->solution[solIdx]->constraints->other[ otherIdx]->value = value;
05075         return true;
05076 }//setOtherConstraintResultValue
05077 
05078 bool OSResult::setOtherConstraintResultDescription(int solIdx, int otherIdx, std::string description){
05079         int numberOfCon = this->getConstraintNumber();
05080         int iNumberOfConstraints = numberOfCon;
05081         if (iNumberOfConstraints <= -1) return false;
05082         int nSols = this->getSolutionNumber();
05083         if (optimization == NULL) return false;
05084         if (nSols <= 0) return false;
05085         if (optimization == NULL) return false;
05086         if (optimization->solution == NULL || 
05087            solIdx < 0 || solIdx >=  nSols) return false;
05088         if (optimization->solution[solIdx] == NULL) return false;
05089         if (optimization->solution[solIdx]->constraints == NULL)return false;
05090         if (optimization->solution[solIdx]->constraints->other == NULL) return false;
05091         if (optimization->solution[solIdx]->constraints->other[ otherIdx] == NULL) return false;
05092         optimization->solution[solIdx]->constraints->other[ otherIdx]->description = description;
05093         return true;
05094 }//setOtherConstraintResultDescription
05095 
05096 bool OSResult::setOtherConstraintResultConIdx(int solIdx, int otherIdx, int conIdx, int idx){
05097         int nSols = this->getSolutionNumber();
05098         if (nSols <= 0) return false;
05099         if (optimization == NULL) return false;
05100         if (optimization->solution == NULL || 
05101                 solIdx < 0 || solIdx >=  nSols) return false;
05102         if (optimization->solution[solIdx] == NULL) return false;
05103         if (optimization->solution[solIdx]->constraints == NULL) return false;
05104         if (optimization->solution[solIdx]->constraints->other[otherIdx] == NULL) return false;
05105         if (optimization->solution[solIdx]->constraints->other[otherIdx]->con == NULL) return false;
05106         optimization->solution[solIdx]->constraints->other[otherIdx]->con[conIdx]->idx = idx;
05107         return true;
05108 }//setOtherConstraintResultConIdx
05109 
05110 bool OSResult::setOtherConstraintResultCon(int solIdx, int otherIdx, int conIdx, std::string value){
05111         int nSols = this->getSolutionNumber();
05112         if (nSols <= 0) return false;
05113         if (optimization == NULL) return false;
05114         if (optimization->solution == NULL || 
05115                 solIdx < 0 || solIdx >=  nSols) return false;
05116         if (optimization->solution[solIdx] == NULL) return false;
05117         if (optimization->solution[solIdx]->constraints == NULL) return false;
05118         if (optimization->solution[solIdx]->constraints->other[otherIdx] == NULL) return false;
05119         if (optimization->solution[solIdx]->constraints->other[otherIdx]->con == NULL) return false;
05120         optimization->solution[solIdx]->constraints->other[otherIdx]->con[conIdx]->value = value;
05121         return true;
05122 }//setOtherConstraintResultCon
05123 
05124 bool OSResult::setNumberOfOtherSolutionResults(int solIdx, int num){
05125         int nSols = this->getSolutionNumber();
05126         if (nSols <= 0) return false;
05127         if (optimization == NULL) return false;
05128         if (optimization->solution == NULL || 
05129                 solIdx < 0 || solIdx >=  nSols) return false;
05130         if (optimization->solution[solIdx] == NULL){
05131                 optimization->solution[solIdx] = new OptimizationSolution();
05132         }
05133         if (optimization->solution[solIdx]->otherSolutionResults == NULL){
05134                 optimization->solution[solIdx]->otherSolutionResults = new OtherSolutionResults();
05135         }
05136         if (num < 0) return false;
05137         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult != NULL) return false;
05138         optimization->solution[solIdx]->otherSolutionResults->numberOfOtherSolutionResults = num;
05139         if (num > 0) 
05140         {       optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult = new OtherSolutionResult*[num];
05141                 for(int i = 0; i < num; i++){
05142                         optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[i] = new OtherSolutionResult();
05143                 }
05144         }
05145         return true;
05146 }//setNumberOfOtherSolutionResults
05147 
05148 bool OSResult::setOtherSolutionResultName(int solIdx, int otherIdx, std::string name){
05149         int nSols = this->getSolutionNumber();
05150         if (nSols <= 0) return false;
05151         if (optimization == NULL) return false;
05152         if (optimization->solution == NULL || 
05153                 solIdx < 0 || solIdx >=  nSols) return false;
05154         if (optimization->solution[solIdx] == NULL) return false;
05155         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return false;
05156         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return false;
05157         optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->name = name;
05158         return true;
05159 }//setOtherSolutionResultName
05160 
05161 bool OSResult::setOtherSolutionResultCategory(int solIdx, int otherIdx, std::string category){
05162         int nSols = this->getSolutionNumber();
05163         if (nSols <= 0) return false;
05164         if (optimization == NULL) return false;
05165         if (optimization->solution == NULL || 
05166                 solIdx < 0 || solIdx >=  nSols) return false;
05167         if (optimization->solution[solIdx] == NULL) return false;
05168         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return false;
05169         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return false;
05170         optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->category = category;
05171         return true;
05172 }//setOtherSolutionResultCategory
05173 
05174 
05175 bool OSResult::setOtherSolutionResultDescription(int solIdx, int otherIdx, std::string description){
05176         int nSols = this->getSolutionNumber();
05177         if (nSols <= 0) return false;
05178         if (optimization == NULL) return false;
05179         if (optimization->solution == NULL || 
05180                 solIdx < 0 || solIdx >=  nSols) return false;
05181         if (optimization->solution[solIdx] == NULL) return false;
05182         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return false;
05183         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return false;
05184         optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->description = description;
05185         return true;
05186 }//setOtherSolutionResultDescription
05187 
05188 
05189 bool OSResult::setOtherSolutionResultNumberOfItems(int solIdx, int otherIdx, int numberOfItems){
05190         int nSols = this->getSolutionNumber();
05191         if (nSols <= 0) return false;
05192         if (optimization == NULL) return false;
05193         if (optimization->solution == NULL || 
05194                 solIdx < 0 || solIdx >=  nSols) return false;
05195         if (optimization->solution[solIdx] == NULL) return false;
05196         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return false;
05197         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) 
05198                 optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] = new OtherSolutionResult();
05199         if (numberOfItems < 0) return false;
05200         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->item != NULL) return false;
05201         optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->numberOfItems = numberOfItems;
05202         if (numberOfItems > 0)
05203                 optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->item = new std::string[numberOfItems];
05204         return true;
05205 }//setOtherSolutionResultNumberOfItems
05206 
05207 bool OSResult::setOtherSolutionResultItem(int solIdx, int otherIdx, int itemIdx, std::string item){
05208         int nSols = this->getSolutionNumber();
05209         if (nSols <= 0) return false;
05210         if (optimization == NULL) return false;
05211         if (optimization->solution == NULL || 
05212                 solIdx < 0 || solIdx >=  nSols) return false;
05213         if (optimization->solution[solIdx] == NULL) return false;
05214         if (optimization->solution[solIdx]->otherSolutionResults == NULL) return false;
05215         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx] == NULL) return false;
05216         if (optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->item == NULL) return false;
05217         optimization->solution[solIdx]->otherSolutionResults->otherSolutionResult[otherIdx]->item[itemIdx] = item;
05218         return true;
05219 }//setOtherSolutionResultItem
05220 
05221 bool OSResult::setNumberOfSolverOutputs(int num){
05222         if (optimization == NULL) return false;
05223         if (optimization->otherSolverOutput == NULL){
05224                 optimization->otherSolverOutput = new OtherSolverOutput();
05225         }
05226         if (num < 0) return false;
05227         if (optimization->otherSolverOutput->solverOutput != NULL) return false;
05228         optimization->otherSolverOutput->numberOfSolverOutputs = num;
05229         if (num > 0)
05230         {       optimization->otherSolverOutput->solverOutput = new SolverOutput*[num];
05231                 for(int i = 0; i < num; i++){
05232                         optimization->otherSolverOutput->solverOutput[ i]  = new SolverOutput();
05233                 }
05234         }
05235         return true;
05236 }//setNumberOfSolverOutputs
05237 
05238 bool OSResult::setSolverOutputName(int otherIdx, std::string name){
05239         if (optimization == NULL) return false;
05240         if (optimization->otherSolverOutput == NULL) return false;
05241         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return false;
05242         optimization->otherSolverOutput->solverOutput[otherIdx]->name = name;
05243         return true;
05244 }//setSolverOutputName
05245 
05246 bool OSResult::setSolverOutputCategory(int otherIdx, std::string category){
05247         if (optimization == NULL) return false;
05248         if (optimization->otherSolverOutput == NULL) return false;
05249         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return false;
05250         optimization->otherSolverOutput->solverOutput[otherIdx]->category = category;
05251         return true;
05252 }//setSolverOutputCategory
05253 
05254 bool OSResult::setSolverOutputDescription(int otherIdx, std::string description){
05255         if (optimization == NULL) return false;
05256         if (optimization->otherSolverOutput == NULL) return false;
05257         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return false;
05258         optimization->otherSolverOutput->solverOutput[otherIdx]->description = description;
05259         return true;
05260 }//setSolverOutputDescription
05261 
05262 bool OSResult::setSolverOutputNumberOfItems(int otherIdx, int numberOfItems){
05263         if (optimization == NULL) return false;
05264         if (optimization->otherSolverOutput == NULL) return false;
05265         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) 
05266                 optimization->otherSolverOutput->solverOutput[otherIdx] = new SolverOutput();
05267         if (numberOfItems < 0) return false;
05268         if (optimization->otherSolverOutput->solverOutput[otherIdx]->item != NULL) return false;
05269         optimization->otherSolverOutput->solverOutput[otherIdx]->numberOfItems = numberOfItems;
05270         if (numberOfItems > 0) 
05271                 optimization->otherSolverOutput->solverOutput[otherIdx]->item = new std::string[numberOfItems];
05272         return true;
05273 }//setSolverOutputNumberOfItems
05274 
05275 bool OSResult::setSolverOutputItem(int otherIdx, int itemIdx, std::string item){
05276         if (optimization == NULL) return false;
05277         if (optimization->otherSolverOutput == NULL) return false;
05278         if (optimization->otherSolverOutput->solverOutput == NULL) return false;
05279         if (optimization->otherSolverOutput->solverOutput[otherIdx] == NULL) return false;
05280         if (optimization->otherSolverOutput->solverOutput[otherIdx]->item == NULL) return false;
05281         optimization->otherSolverOutput->solverOutput[otherIdx]->item[itemIdx] = item;
05282         return true;
05283 }//setSolverOutputItem
05284 
05285 
05286 
05287 /***************************************************
05288  * methods to test whether two OSResult objects 
05289  * or their components are equal to each other
05290  ***************************************************/
05291 bool OSResult::IsEqual(OSResult *that)
05292 {
05293         #if DEBUG_ISEQUAL_ROUTINES == 2
05294                 cout << "Start comparing in OSResult" << endl;
05295         #endif
05296         if (this == NULL)
05297         {       if (that == NULL)
05298                         return true;
05299                 else
05300                 {
05301                         #if DEBUG_ISEQUAL_ROUTINES > 0
05302                                 cout << "Differences in OSResult" << endl;
05303                                 cout << "First object is NULL, second is not" << endl;
05304                         #endif
05305                         return false;
05306                 }
05307         }
05308         else 
05309         {       if (that == NULL)
05310                 {
05311                         #if DEBUG_ISEQUAL_ROUTINES > 0
05312                                 cout << "Differences in OSResult" << endl;
05313                                 cout << "Second object is NULL, first is not" << endl;
05314                         #endif
05315                         return false;
05316                 }
05317                 else    
05318                 {
05319                         if (!this->general->IsEqual(that->general))
05320                                 return false;
05321                         if (!this->system->IsEqual(that->system))
05322                                 return false;
05323                         if (!this->service->IsEqual(that->service))
05324                                 return false;
05325                         if (!this->job->IsEqual(that->job))
05326                                 return false;
05327                         if (!this->optimization->IsEqual(that->optimization))
05328                                 return false;
05329 
05330                         return true;
05331                 }
05332         }
05333 }//OSResult::IsEqual
05334 
05335 bool GeneralResult::IsEqual(GeneralResult *that)
05336 {
05337         #if DEBUG_ISEQUAL_ROUTINES == 2
05338                 cout << "Start comparing in GeneralResult" << endl;
05339         #endif
05340         if (this == NULL)
05341         {       if (that == NULL)
05342                         return true;
05343                 else
05344                 {
05345                         #if DEBUG_ISEQUAL_ROUTINES > 0
05346                                 cout << "Differences in GeneralResult" << endl;
05347                                 cout << "First object is NULL, second is not" << endl;
05348                         #endif
05349                         return false;
05350                 }
05351         }
05352         else 
05353         {       if (that == NULL)
05354                 {
05355                         #if DEBUG_ISEQUAL_ROUTINES > 0
05356                                 cout << "Differences in GeneralResult" << endl;
05357                                 cout << "Second object is NULL, first is not" << endl;
05358                         #endif
05359                         return false;
05360                 }
05361                 else    
05362                 {
05363                         if (this->message       != that->message       || 
05364                                 this->serviceURI    != that->serviceURI    || 
05365                                 this->serviceName   != that->serviceName   || 
05366                                 this->instanceName  != that->instanceName  || 
05367                                 this->jobID         != that->jobID         || 
05368                                 this->solverInvoked != that->solverInvoked || 
05369                                 this->timeStamp     != that->timeStamp ) 
05370                         {
05371 #if DEBUG_ISEQUAL_ROUTINES > 0
05372                                 cout << "Differences in GeneralResult" << endl;
05373                                 cout << "message:       " << this->message       << " vs. " << that->message       << endl;
05374                                 cout << "serviceURI:    " << this->serviceURI    << " vs. " << that->serviceURI    << endl;
05375                                 cout << "serviceName:   " << this->serviceName   << " vs. " << that->serviceName   << endl;
05376                                 cout << "instanceName:  " << this->instanceName  << " vs. " << that->instanceName  << endl;
05377                                 cout << "jobID:         " << this->jobID         << " vs. " << that->jobID         << endl;
05378                                 cout << "solverInvoked: " << this->solverInvoked << " vs. " << that->solverInvoked << endl;
05379                                 cout << "timeStamp:     " << this->timeStamp     << " vs. " << that->timeStamp     << endl;
05380 #endif  
05381 
05382                                 return false;
05383                         }
05384                         if (!this->generalStatus->IsEqual(that->generalStatus))
05385                                 return false;
05386                         if (!this->otherResults->IsEqual(that->otherResults))
05387                                 return false;
05388                         return true;
05389                 }
05390         }
05391 }//GeneralResult::IsEqual
05392 
05393 
05394 bool GeneralStatus::IsEqual(GeneralStatus *that)
05395 {
05396         #if DEBUG_ISEQUAL_ROUTINES == 2
05397                 cout << "Start comparing in GeneralStatus" << endl;
05398         #endif
05399         if (this == NULL)
05400         {       if (that == NULL)
05401                         return true;
05402                 else
05403                 {
05404                         #if DEBUG_ISEQUAL_ROUTINES > 0
05405                                 cout << "Differences in GeneralStatus" << endl;
05406                                 cout << "First object is NULL, second is not" << endl;
05407                         #endif
05408                         return false;
05409                 }
05410         }
05411         else 
05412         {       if (that == NULL)
05413                 {
05414                         #if DEBUG_ISEQUAL_ROUTINES > 0
05415                                 cout << "Differences in GeneralStatus" << endl;
05416                                 cout << "Second object is NULL, first is not" << endl;
05417                         #endif
05418                         return false;
05419                 }
05420                 else    
05421                 {
05422                         if (this->numberOfSubstatuses != that->numberOfSubstatuses || 
05423                                 this->type                != that->type                || 
05424                                 this->description         != that->description  ) 
05425                         {
05426 #if DEBUG_ISEQUAL_ROUTINES > 0
05427                                 cout << "Differences in GeneralStatus" << endl;
05428                                 cout << "numberOfSubstatuses: " << this->numberOfSubstatuses << " vs. " << that->numberOfSubstatuses << endl;
05429                                 cout << "type:                " << this->type                << " vs. " << that->type                << endl;
05430                                 cout << "description:         " << this->description         << " vs. " << that->description         << endl;
05431 #endif  
05432                                 return false;
05433                         }
05434                 
05435                         for (int i = 0; i < numberOfSubstatuses; i++)
05436                                 if (!this->substatus[i]->IsEqual(that->substatus[i]))
05437                                         return false;
05438                 }
05439                 return true;
05440         }
05441 }//GeneralStatus::IsEqual
05442 
05443 bool GeneralSubstatus::IsEqual(GeneralSubstatus *that)
05444 {
05445         #if DEBUG_ISEQUAL_ROUTINES == 2
05446                 cout << "Start comparing in GeneralSubstatus" << endl;
05447         #endif
05448         if (this == NULL)
05449         {       if (that == NULL)
05450                         return true;
05451                 else
05452                 {
05453                         #if DEBUG_ISEQUAL_ROUTINES > 0
05454                                 cout << "Differences in GeneralSubstatus" << endl;
05455                                 cout << "First object is NULL, second is not" << endl;
05456                         #endif
05457                         return false;
05458                 }
05459         }
05460         else 
05461         {       if (that == NULL)
05462                 {
05463                         #if DEBUG_ISEQUAL_ROUTINES > 0
05464                                 cout << "Differences in GeneralSubstatus" << endl;
05465                                 cout << "Second object is NULL, first is not" << endl;
05466                         #endif
05467                         return false;
05468                 }
05469                 else    
05470                 {
05471                         if (this->name        != that->name          || 
05472                                 this->description != that->description  ) 
05473                         {
05474 #if DEBUG_ISEQUAL_ROUTINES > 0
05475                                 cout << "Differences in GeneralSubstatus" << endl;
05476                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
05477                                 cout << "description: " << this->description << " vs. " << that->description << endl;
05478 #endif  
05479                                 return false;
05480                         }
05481                 }
05482                 return true;
05483         }
05484 }//GeneralSubstatus::IsEqual
05485 
05486 
05487 bool OtherResults::IsEqual(OtherResults *that)
05488 {
05489         #if DEBUG_ISEQUAL_ROUTINES == 2
05490                 cout << "Start comparing in OtherResults" << endl;
05491         #endif
05492         if (this == NULL)
05493         {       if (that == NULL)
05494                         return true;
05495                 else
05496                 {
05497                         #if DEBUG_ISEQUAL_ROUTINES > 0
05498                                 cout << "Differences in OtherResults" << endl;
05499                                 cout << "First object is NULL, second is not" << endl;
05500                         #endif
05501                         return false;
05502                 }
05503         }
05504         else 
05505         {       if (that == NULL)
05506                 {
05507                         #if DEBUG_ISEQUAL_ROUTINES > 0
05508                                 cout << "Differences in OtherResults" << endl;
05509                                 cout << "Second object is NULL, first is not" << endl;
05510                         #endif
05511                         return false;
05512                 }
05513                 else    
05514                 {
05515                         if (this->numberOfOtherResults != that->numberOfOtherResults)
05516                         {
05517 #if DEBUG_ISEQUAL_ROUTINES > 0
05518                                 cout << "Differences in OtherResults" << endl;
05519                                 cout << "numberOfOtherResults: " << this->numberOfOtherResults << " vs. " << that->numberOfOtherResults << endl;
05520 #endif  
05521 
05522                                 return false;
05523                         }
05524 
05525                         for (int i = 0; i < numberOfOtherResults; i++)
05526                                 if (!this->other[i]->IsEqual(that->other[i]))
05527                                         return false;
05528                         return true;
05529                 }
05530         }
05531 }//OtherResults::IsEqual
05532 
05533 
05534 bool OtherResult::IsEqual(OtherResult *that)
05535 {
05536         #if DEBUG_ISEQUAL_ROUTINES == 2
05537                 cout << "Start comparing in OtherResult" << endl;
05538         #endif
05539         if (this == NULL)
05540         {       if (that == NULL)
05541                         return true;
05542                 else
05543                 {
05544                         #if DEBUG_ISEQUAL_ROUTINES > 0
05545                                 cout << "Differences in OtherResult" << endl;
05546                                 cout << "First object is NULL, second is not" << endl;
05547                         #endif
05548                         return false;
05549                 }
05550         }
05551         else 
05552         {       if (that == NULL)
05553                 {
05554                         #if DEBUG_ISEQUAL_ROUTINES > 0
05555                                 cout << "Differences in OtherResult" << endl;
05556                                 cout << "Second object is NULL, first is not" << endl;
05557                         #endif
05558                         return false;
05559                 }
05560                 else    
05561                 {
05562                         if (this->name        != that->name          || 
05563                                 this->value       != that->value         || 
05564                                 this->description != that->description  ) 
05565                         {
05566 #if DEBUG_ISEQUAL_ROUTINES > 0
05567                                 cout << "Differences in OtherResult" << endl;
05568                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
05569                                 cout << "value:       " << this->value       << " vs. " << that->value       << endl;
05570                                 cout << "description: " << this->description << " vs. " << that->description << endl;
05571 #endif  
05572                                 return false;
05573                         }
05574                         return true;
05575                 }
05576         }
05577 }//OtherResult::IsEqual
05578 
05579 
05580 bool SystemResult::IsEqual(SystemResult *that)
05581 {
05582         #if DEBUG_ISEQUAL_ROUTINES == 2
05583                 cout << "Start comparing in SystemResult" << endl;
05584         #endif
05585         if (this == NULL)
05586         {       if (that == NULL)
05587                         return true;
05588                 else
05589                 {
05590                         #if DEBUG_ISEQUAL_ROUTINES > 0
05591                                 cout << "Differences in SystemResult" << endl;
05592                                 cout << "First object is NULL, second is not" << endl;
05593                         #endif
05594                         return false;
05595                 }
05596         }
05597         else 
05598         {       if (that == NULL)
05599                 {
05600                         #if DEBUG_ISEQUAL_ROUTINES > 0
05601                                 cout << "Differences in SystemResult" << endl;
05602                                 cout << "Second object is NULL, first is not" << endl;
05603                         #endif
05604                         return false;
05605                 }
05606                 else    
05607                 {
05608                         if (this->systemInformation != that->systemInformation) 
05609                         {
05610 #if DEBUG_ISEQUAL_ROUTINES > 0
05611                                 cout << "Differences in SystemResult" << endl;
05612                                 cout << "systemInformation: " << this->systemInformation << " vs. " << that->systemInformation << endl;
05613 #endif  
05614                                 return false;
05615                         }
05616 
05617                         if (!this->availableDiskSpace->IsEqual(that->availableDiskSpace))
05618                                 return false;
05619                         if (!this->availableMemory->IsEqual(that->availableMemory))
05620                                 return false;
05621                         if (!this->availableCPUSpeed->IsEqual(that->availableCPUSpeed))
05622                                 return false;
05623                         if (!this->availableCPUNumber->IsEqual(that->availableCPUNumber))
05624                                 return false;
05625                         if (!this->otherResults->IsEqual(that->otherResults))
05626                                 return false;
05627 
05628                         return true;
05629                 }
05630         }
05631 }//SystemResult::IsEqual
05632 
05633 
05634 
05635 bool ServiceResult::IsEqual(ServiceResult *that)
05636 {
05637         #if DEBUG_ISEQUAL_ROUTINES == 2
05638                 cout << "Start comparing in ServiceResult" << endl;
05639         #endif
05640         if (this == NULL)
05641         {       if (that == NULL)
05642                         return true;
05643                 else
05644                 {
05645                         #if DEBUG_ISEQUAL_ROUTINES > 0
05646                                 cout << "Differences in ServiceResult" << endl;
05647                                 cout << "First object is NULL, second is not" << endl;
05648                         #endif
05649                         return false;
05650                 }
05651         }
05652         else 
05653         {       if (that == NULL)
05654                 {
05655                         #if DEBUG_ISEQUAL_ROUTINES > 0
05656                                 cout << "Differences in ServiceResult" << endl;
05657                                 cout << "Second object is NULL, first is not" << endl;
05658                         #endif
05659                         return false;
05660                 }
05661                 else    
05662                 {
05663                         if (this->currentState       != that->currentState ||
05664                                 this->currentJobCount    != that->currentJobCount ||
05665                                 this->totalJobsSoFar     != that->totalJobsSoFar  ||
05666                                 this->timeServiceStarted != that->timeServiceStarted ||
05667                                 !isEqual(this->serviceUtilization, that->serviceUtilization) )
05668                         {
05669 #if DEBUG_ISEQUAL_ROUTINES > 0
05670                                 cout << "Differences in ServiceResult" << endl;
05671                                 cout << "currentState:       " << this->currentState       << " vs. " << that->currentState       << endl;
05672                                 cout << "currentJobCount:    " << this->currentJobCount    << " vs. " << that->currentJobCount    << endl;
05673                                 cout << "totalJobsSoFar:     " << this->totalJobsSoFar     << " vs. " << that->totalJobsSoFar     << endl;
05674                                 cout << "timeServiceStarted: " << this->timeServiceStarted << " vs. " << that->timeServiceStarted << endl;
05675                                 cout << "serviceUtilization: " << this->serviceUtilization << " vs. " << that->serviceUtilization << endl;
05676 #endif  
05677                                 return false;
05678                         }
05679 
05680                         if (!this->otherResults->IsEqual(that->otherResults))
05681                                 return false;
05682                 }
05683                 return true;
05684         }
05685 }//ServiceResult::IsEqual
05686 
05687 
05688 bool JobResult::IsEqual(JobResult *that)
05689 {
05690         #if DEBUG_ISEQUAL_ROUTINES == 2
05691                 cout << "Start comparing in JobResult" << endl;
05692         #endif
05693         if (this == NULL)
05694         {       if (that == NULL)
05695                         return true;
05696                 else
05697                 {
05698                         #if DEBUG_ISEQUAL_ROUTINES > 0
05699                                 cout << "Differences in JobResult" << endl;
05700                                 cout << "First object is NULL, second is not" << endl;
05701                         #endif
05702                         return false;
05703                 }
05704         }
05705         else 
05706         {       if (that == NULL)
05707                 {
05708                         #if DEBUG_ISEQUAL_ROUTINES > 0
05709                                 cout << "Differences in JobResult" << endl;
05710                                 cout << "Second object is NULL, first is not" << endl;
05711                         #endif
05712                         return false;
05713                 }
05714                 else    
05715                 {
05716                         if (this->status             != that->status             ||
05717                                 this->submitTime         != that->submitTime         ||
05718                                 this->scheduledStartTime != that->scheduledStartTime ||
05719                                 this->actualStartTime    != that->actualStartTime    ||
05720                                 this->endTime            != that->endTime          )
05721                         {
05722 #if DEBUG_ISEQUAL_ROUTINES > 0
05723                                 cout << "Differences in JobResult" << endl;
05724                                 cout << "status:             " << this->status             << " vs. " << that->status             << endl;
05725                                 cout << "submitTime:         " << this->submitTime         << " vs. " << that->submitTime         << endl;
05726                                 cout << "scheduledStartTime: " << this->scheduledStartTime << " vs. " << that->scheduledStartTime << endl;
05727                                 cout << "actualStartTime:    " << this->actualStartTime    << " vs. " << that->actualStartTime    << endl;
05728                                 cout << "endTime:            " << this->endTime            << " vs. " << that->endTime            << endl;
05729 #endif  
05730                                 return false;
05731                         }
05732 
05733                         if (!this->timingInformation->IsEqual(that->timingInformation))
05734                                 return false;
05735                         if (!this->usedDiskSpace->IsEqual(that->usedDiskSpace))
05736                                 return false;
05737                         if (!this->usedMemory->IsEqual(that->usedMemory))
05738                                 return false;
05739                         if (!this->usedCPUSpeed->IsEqual(that->usedCPUSpeed))
05740                                 return false;
05741                         if (!this->usedCPUNumber->IsEqual(that->usedCPUNumber))
05742                                 return false;
05743                         if (!this->otherResults->IsEqual(that->otherResults))
05744                                 return false;
05745 
05746                         return true;
05747                 }
05748         }
05749 }//JobResult::IsEqual
05750 
05751 
05752 bool TimingInformation::IsEqual(TimingInformation *that)
05753 {
05754         #if DEBUG_ISEQUAL_ROUTINES == 2
05755                 cout << "Start comparing in TimingInformation" << endl;
05756         #endif
05757         if (this == NULL)
05758         {       if (that == NULL)
05759                         return true;
05760                 else
05761                 {
05762                         #if DEBUG_ISEQUAL_ROUTINES > 0
05763                                 cout << "Differences in TimingInformation" << endl;
05764                                 cout << "First object is NULL, second is not" << endl;
05765                         #endif
05766                         return false;
05767                 }
05768         }
05769         else 
05770         {       if (that == NULL)
05771                 {
05772                         #if DEBUG_ISEQUAL_ROUTINES > 0
05773                                 cout << "Differences in TimingInformation" << endl;
05774                                 cout << "Second object is NULL, first is not" << endl;
05775                         #endif
05776                         return false;
05777                 }
05778                 else    
05779                 {
05780                         if (this->numberOfTimes != that->numberOfTimes)
05781                         {
05782 #if DEBUG_ISEQUAL_ROUTINES > 0
05783                                 cout << "Differences in TimingInformation" << endl;
05784                                 cout << "numberOfTimes: " << this->numberOfTimes << " vs. " << that->numberOfTimes << endl;
05785 #endif  
05786 
05787                                 return false;
05788                         }
05789 
05790                         for (int i = 0; i < numberOfTimes; i++)
05791                                 if (!this->time[i]->IsEqual(that->time[i]))
05792                                         return false;
05793                         return true;
05794                 }
05795         }
05796 }//TimingInformation::IsEqual
05797 
05798 #if 0
05799 bool Time::IsEqual(Time *that)
05800 {
05801         #if DEBUG_ISEQUAL_ROUTINES == 2
05802                 cout << "Start comparing in Time" << endl;
05803         #endif
05804         if (this == NULL)
05805         {       if (that == NULL)
05806                         return true;
05807                 else
05808                 {
05809                         #if DEBUG_ISEQUAL_ROUTINES > 0
05810                                 cout << "Differences in Time" << endl;
05811                                 cout << "First object is NULL, second is not" << endl;
05812                         #endif
05813                         return false;
05814                 }
05815         }
05816         else 
05817         {       if (that == NULL)
05818                 {
05819                         #if DEBUG_ISEQUAL_ROUTINES > 0
05820                                 cout << "Differences in Time" << endl;
05821                                 cout << "Second object is NULL, first is not" << endl;
05822                         #endif
05823                         return false;
05824                 }
05825                 else    
05826                 {
05827                         if (!isEqual(this->value,         that->value)    || 
05828                                                  this->unit        != that->unit      || 
05829                                                  this->type        != that->type      || 
05830                                                  this->category    != that->category  || 
05831                                                  this->description != that->description  ) 
05832                         {
05833 #if DEBUG_ISEQUAL_ROUTINES > 0
05834                                 cout << "Differences in Time" << endl;
05835                                 cout << "unit:        " << this->unit        << " vs. " << that->unit        << endl;
05836                                 cout << "type:        " << this->type        << " vs. " << that->type        << endl;
05837                                 cout << "value:       " << this->value       << " vs. " << that->value       << endl;
05838                                 cout << "category:    " << this->category    << " vs. " << that->category    << endl;
05839                                 cout << "description: " << this->description << " vs. " << that->description << endl;
05840 #endif  
05841                                 return false;
05842                         }
05843                         return true;
05844                 }
05845         }
05846 }//Time::IsEqual
05847 #endif
05848 
05849 
05850 
05851 bool TimeMeasurement::IsEqual(TimeMeasurement *that)
05852 {
05853         #if DEBUG_ISEQUAL_ROUTINES == 2
05854                 cout << "Start comparing in TimeMeasurement" << endl;
05855         #endif
05856         if (this == NULL)
05857         {       if (that == NULL)
05858                         return true;
05859                 else
05860                 {
05861                         #if DEBUG_ISEQUAL_ROUTINES > 0
05862                                 cout << "Differences in Time" << endl;
05863                                 cout << "First object is NULL, second is not" << endl;
05864                         #endif
05865                         return false;
05866                 }
05867         }
05868         else 
05869         {       if (that == NULL)
05870                 {
05871                         #if DEBUG_ISEQUAL_ROUTINES > 0
05872                                 cout << "Differences in Time" << endl;
05873                                 cout << "Second object is NULL, first is not" << endl;
05874                         #endif
05875                         return false;
05876                 }
05877                 else    
05878                 {
05879                         if (this->type        != that->type      || 
05880                                 this->category    != that->category  || 
05881                                 this->description != that->description  ) 
05882                         {
05883 #if DEBUG_ISEQUAL_ROUTINES > 0
05884                                 cout << "Differences in TimeMeasurement" << endl;
05885                                 cout << "type:        " << this->type        << " vs. " << that->type        << endl;
05886                                 cout << "category:    " << this->category    << " vs. " << that->category    << endl;
05887                                 cout << "description: " << this->description << " vs. " << that->description << endl;
05888 #endif  
05889                                 return false;
05890                         }
05891                         return this->TimeSpan::IsEqual(that);
05892                 }
05893         }
05894 }//TimeMeasurement::IsEqual
05895 
05896 
05897 bool OptimizationResult::IsEqual(OptimizationResult *that)
05898 {
05899         #if DEBUG_ISEQUAL_ROUTINES == 2
05900                 cout << "Start comparing in OptimizationResult" << endl;
05901         #endif
05902         if (this == NULL)
05903         {       if (that == NULL)
05904                         return true;
05905                 else
05906                 {
05907                         #if DEBUG_ISEQUAL_ROUTINES > 0
05908                                 cout << "Differences in OptimizationResult" << endl;
05909                                 cout << "First object is NULL, second is not" << endl;
05910                         #endif
05911                         return false;
05912                 }
05913         }
05914         else 
05915         {       if (that == NULL)
05916                 {
05917                         #if DEBUG_ISEQUAL_ROUTINES > 0
05918                                 cout << "Differences in OptimizationResult" << endl;
05919                                 cout << "Second object is NULL, first is not" << endl;
05920                         #endif
05921                         return false;
05922                 }
05923                 else    
05924                 {
05925                         if (this->numberOfSolutions   != that->numberOfSolutions   || 
05926                                 this->numberOfVariables   != that->numberOfVariables   || 
05927                                 this->numberOfObjectives  != that->numberOfObjectives  || 
05928                                 this->numberOfConstraints != that->numberOfConstraints  ) 
05929                         {
05930 #if DEBUG_ISEQUAL_ROUTINES > 0
05931                                 cout << "Differences in OptimizationResult" << endl;
05932                                 cout << "numberOfSolutions:   " << this->numberOfSolutions   << " vs. " << that->numberOfSolutions   << endl;
05933                                 cout << "numberOfVariables:   " << this->numberOfVariables   << " vs. " << that->numberOfVariables   << endl;
05934                                 cout << "numberOfObjectives:  " << this->numberOfObjectives  << " vs. " << that->numberOfObjectives  << endl;
05935                                 cout << "numberOfConstraints: " << this->numberOfConstraints << " vs. " << that->numberOfConstraints << endl;
05936 #endif  
05937                                 return false;
05938                         }
05939 
05940                         for (int i = 0; i < numberOfSolutions; i++)
05941                                 if (!this->solution[i]->IsEqual(that->solution[i]))
05942                                         return false;
05943 
05944                         if (!this->otherSolverOutput->IsEqual(that->otherSolverOutput))
05945                                 return false;
05946 
05947                         return true;
05948                 }
05949         }
05950 }//OptimizationResult::IsEqual
05951 
05952 
05953 bool OptimizationSolution::IsEqual(OptimizationSolution  *that)
05954 {
05955         #if DEBUG_ISEQUAL_ROUTINES == 2
05956                 cout << "Start comparing in OptimizationSolution " << endl;
05957         #endif
05958         if (this == NULL)
05959         {       if (that == NULL)
05960                         return true;
05961                 else
05962                 {
05963                         #if DEBUG_ISEQUAL_ROUTINES > 0
05964                                 cout << "Differences in OptimizationSolution" << endl;
05965                                 cout << "First object is NULL, second is not" << endl;
05966                         #endif
05967                         return false;
05968                 }
05969         }
05970         else 
05971         {       if (that == NULL)
05972                 {
05973                         #if DEBUG_ISEQUAL_ROUTINES > 0
05974                                 cout << "Differences in OptimizationSolution" << endl;
05975                                 cout << "Second object is NULL, first is not" << endl;
05976                         #endif
05977                         return false;
05978                 }
05979                 else    
05980                 {
05981                         if (this->targetObjectiveIdx != that->targetObjectiveIdx)
05982                         {
05983 #if DEBUG_ISEQUAL_ROUTINES > 0
05984                                 cout << "Differences in OptimizationSolution" << endl;
05985                                 cout << "targetObjectiveIdx: " << this->targetObjectiveIdx << " vs. " << that->targetObjectiveIdx << endl;
05986 #endif  
05987                                 return false;
05988                         }
05989 
05990                         if (this->weightedObjectives != that->weightedObjectives)
05991                         {
05992 #if DEBUG_ISEQUAL_ROUTINES > 0
05993                                 cout << "Differences in OptimizationSolution" << endl;
05994                                 cout << "weightedObjectives: " << this->weightedObjectives << " vs. " << that->weightedObjectives << endl;
05995 #endif  
05996                                 return false;
05997                         }
05998 
05999                         if (this->message != that->message) 
06000                         {
06001 #if DEBUG_ISEQUAL_ROUTINES > 0
06002                                 cout << "Differences in OptimizationSolution" << endl;
06003                                 cout << "message: \'" << this->message << "\' vs. \'" << that->message << "\'" << endl;
06004 #endif  
06005                                 return false;
06006                         }
06007 
06008                         if (!this->status->IsEqual(that->status))
06009                                 return false;
06010                         if (!this->variables->IsEqual(that->variables))
06011                                 return false;
06012                         if (!this->objectives->IsEqual(that->objectives))
06013                                 return false;
06014                         if (!this->constraints->IsEqual(that->constraints))
06015                                 return false;
06016                         if (!this->otherSolutionResults->IsEqual(that->otherSolutionResults))
06017                                 return false;
06018 
06019                         return true;
06020                 }
06021         }
06022 }//OptimizationSolution ::IsEqual
06023 
06024 
06025 bool OptimizationSolutionStatus::IsEqual(OptimizationSolutionStatus *that)
06026 {
06027         #if DEBUG_ISEQUAL_ROUTINES == 2
06028                 cout << "Start comparing in OptimizationSolutionStatus" << endl;
06029         #endif
06030         if (this == NULL)
06031         {       if (that == NULL)
06032                         return true;
06033                 else
06034                 {
06035                         #if DEBUG_ISEQUAL_ROUTINES > 0
06036                                 cout << "Differences in OptimizationSolutionStatus" << endl;
06037                                 cout << "First object is NULL, second is not" << endl;
06038                         #endif
06039                         return false;
06040                 }
06041         }
06042         else 
06043         {       if (that == NULL)
06044                 {
06045                         #if DEBUG_ISEQUAL_ROUTINES > 0
06046                                 cout << "Differences in OptimizationSolutionStatus" << endl;
06047                                 cout << "Second object is NULL, first is not" << endl;
06048                         #endif
06049                         return false;
06050                 }
06051                 else    
06052                 {
06053                         if (this->type        != that->type          || 
06054                                 this->description != that->description  ) 
06055                         {
06056 #if DEBUG_ISEQUAL_ROUTINES > 0
06057                                 cout << "Differences in OptimizationSolutionStatus" << endl;
06058                                 cout << "type:        " << this->type        << " vs. " << that->type        << endl;
06059                                 cout << "description: " << this->description << " vs. " << that->description << endl;
06060 #endif  
06061                                 return false;
06062                         }
06063 
06064                         if (this->numberOfSubstatuses != that->numberOfSubstatuses)
06065                         {
06066 #if DEBUG_ISEQUAL_ROUTINES > 0
06067                                 cout << "Differences in OptimizationSolutionStatus" << endl;
06068                                 cout << "numberOfSubstatuses: " << this->numberOfSubstatuses << " vs. " << that->numberOfSubstatuses << endl;
06069 #endif  
06070 
06071                                 return false;
06072                         }
06073 
06074                         for (int i = 0; i < numberOfSubstatuses; i++)
06075                                 if (!this->substatus[i]->IsEqual(that->substatus[i]))
06076                                         return false;
06077 
06078                         return true;
06079                 }
06080         }
06081 }//OptimizationSolutionStatus::IsEqual
06082 
06083 
06084 bool OptimizationSolutionSubstatus::IsEqual(OptimizationSolutionSubstatus *that)
06085 {
06086         #if DEBUG_ISEQUAL_ROUTINES == 2
06087                 cout << "Start comparing in OptimizationSolutionSubstatus" << endl;
06088         #endif
06089         if (this == NULL)
06090         {       if (that == NULL)
06091                         return true;
06092                 else
06093                 {
06094                         #if DEBUG_ISEQUAL_ROUTINES > 0
06095                                 cout << "Differences in OptimizationSolutionSubstatus" << endl;
06096                                 cout << "First object is NULL, second is not" << endl;
06097                         #endif
06098                         return false;
06099                 }
06100         }
06101         else 
06102         {       if (that == NULL)
06103                 {
06104                         #if DEBUG_ISEQUAL_ROUTINES > 0
06105                                 cout << "Differences in OptimizationSolutionSubstatus" << endl;
06106                                 cout << "Second object is NULL, first is not" << endl;
06107                         #endif
06108                         return false;
06109                 }
06110                 else    
06111                 {
06112                         if (this->type        != that->type          || 
06113                                 this->description != that->description  ) 
06114                         {
06115 #if DEBUG_ISEQUAL_ROUTINES > 0
06116                                 cout << "Differences in OptimizationSolutionSubstatus" << endl;
06117                                 cout << "type:        " << this->type        << " vs. " << that->type        << endl;
06118                                 cout << "description: " << this->description << " vs. " << that->description << endl;
06119 #endif  
06120                                 return false;
06121                         }
06122 
06123                         return true;
06124                 }
06125         }
06126 }//OptimizationSolutionSubstatus::IsEqual
06127 
06128 
06129 bool VariableSolution::IsEqual(VariableSolution *that)
06130 {
06131         #if DEBUG_ISEQUAL_ROUTINES == 2
06132                 cout << "Start comparing in VariableSolution" << endl;
06133         #endif
06134         if (this == NULL)
06135         {       if (that == NULL)
06136                         return true;
06137                 else
06138                 {
06139                         #if DEBUG_ISEQUAL_ROUTINES > 0
06140                                 cout << "Differences in VariableSolution" << endl;
06141                                 cout << "First object is NULL, second is not" << endl;
06142                         #endif
06143                         return false;
06144                 }
06145         }
06146         else 
06147         {       if (that == NULL)
06148                 {
06149                         #if DEBUG_ISEQUAL_ROUTINES > 0
06150                                 cout << "Differences in VariableSolution" << endl;
06151                                 cout << "Second object is NULL, first is not" << endl;
06152                         #endif
06153                         return false;
06154                 }
06155                 else    
06156                 {
06157                         if (this->numberOfOtherVariableResults != that->numberOfOtherVariableResults)
06158                         {
06159 #if DEBUG_ISEQUAL_ROUTINES > 0
06160                                 cout << "Differences in VariableSolution" << endl;
06161                                 cout << "numberOfOtherVariableResults: " << this->numberOfOtherVariableResults << " vs. " << that->numberOfOtherVariableResults << endl;
06162 #endif  
06163 
06164                                 return false;
06165                         }
06166 
06167                         for (int i = 0; i < numberOfOtherVariableResults; i++)
06168                                 if (!this->other[i]->IsEqual(that->other[i]))
06169                                         return false;
06170 
06171                         if (!this->values->IsEqual(that->values))
06172                                 return false;
06173                         if (!this->valuesString->IsEqual(that->valuesString))
06174                                 return false;
06175                         if (!this->basisStatus->IsEqual(that->basisStatus))
06176                                 return false;
06177 
06178                         return true;
06179                 }
06180         }
06181 }//VariableSolution::IsEqual
06182 
06183 bool VariableValues::IsEqual(VariableValues *that)
06184 {
06185         #if DEBUG_ISEQUAL_ROUTINES == 2
06186                 cout << "Start comparing in VariableValues" << endl;
06187         #endif
06188         if (this == NULL)
06189         {       if (that == NULL)
06190                         return true;
06191                 else
06192                 {
06193                         #if DEBUG_ISEQUAL_ROUTINES > 0
06194                                 cout << "Differences in VariableValues" << endl;
06195                                 cout << "First object is NULL, second is not" << endl;
06196                         #endif
06197                         return false;
06198                 }
06199         }
06200         else 
06201         {       if (that == NULL)
06202                 {
06203                         #if DEBUG_ISEQUAL_ROUTINES > 0
06204                                 cout << "Differences in VariableValues" << endl;
06205                                 cout << "Second object is NULL, first is not" << endl;
06206                         #endif
06207                         return false;
06208                 }
06209                 else    
06210                 {
06211                         if (this->numberOfVar != that->numberOfVar)
06212                         {
06213 #if DEBUG_ISEQUAL_ROUTINES > 0
06214                                 cout << "Differences in VariableValues" << endl;
06215                                 cout << "numberOfVar: " << this->numberOfVar << " vs. " << that->numberOfVar << endl;
06216 #endif  
06217 
06218                                 return false;
06219                         }
06220 
06221                         for (int i = 0; i < numberOfVar; i++)
06222                                 if (!this->var[i]->IsEqual(that->var[i]))
06223                                         return false;
06224 
06225                         return true;
06226                 }
06227         }
06228 }//VariableValues::IsEqual
06229 
06230 
06231 bool VarValue::IsEqual(VarValue *that)
06232 {
06233         #if DEBUG_ISEQUAL_ROUTINES == 2
06234                 cout << "Start comparing in VarValue" << endl;
06235         #endif
06236         if (this == NULL)
06237         {       if (that == NULL)
06238                         return true;
06239                 else
06240                 {
06241                         #if DEBUG_ISEQUAL_ROUTINES > 0
06242                                 cout << "Differences in VarValue" << endl;
06243                                 cout << "First object is NULL, second is not" << endl;
06244                         #endif
06245                         return false;
06246                 }
06247         }
06248         else 
06249         {       if (that == NULL)
06250                 {
06251                         #if DEBUG_ISEQUAL_ROUTINES > 0
06252                                 cout << "Differences in VarValue" << endl;
06253                                 cout << "Second object is NULL, first is not" << endl;
06254                         #endif
06255                         return false;
06256                 }
06257                 else    
06258                 {
06259                         if (this->idx != that->idx || !isEqual(this->value, that->value) )
06260                         {
06261 #if DEBUG_ISEQUAL_ROUTINES > 0
06262                                 cout << "Differences in VarValue" << endl;
06263                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
06264                                 cout << "value: " << this->value << " vs. " << that->value << endl;
06265 #endif  
06266                                 return false;
06267                         }
06268 
06269                         return true;
06270                 }
06271         }
06272 }//VarValue::IsEqual
06273 
06274 
06275 bool VariableValuesString::IsEqual(VariableValuesString *that)
06276 {
06277         #if DEBUG_ISEQUAL_ROUTINES == 2
06278                 cout << "Start comparing in VariableValuesString" << endl;
06279         #endif
06280         if (this == NULL)
06281         {       if (that == NULL)
06282                         return true;
06283                 else
06284                 {
06285                         #if DEBUG_ISEQUAL_ROUTINES > 0
06286                                 cout << "Differences in VariableValuesString" << endl;
06287                                 cout << "First object is NULL, second is not" << endl;
06288                         #endif
06289                         return false;
06290                 }
06291         }
06292         else 
06293         {       if (that == NULL)
06294                 {
06295                         #if DEBUG_ISEQUAL_ROUTINES > 0
06296                                 cout << "Differences in VariableValuesString" << endl;
06297                                 cout << "Second object is NULL, first is not" << endl;
06298                         #endif
06299                         return false;
06300                 }
06301                 else    
06302                 {
06303                         if (this->numberOfVar != that->numberOfVar)
06304                         {
06305 #if DEBUG_ISEQUAL_ROUTINES > 0
06306                                 cout << "Differences in VariableValuesString" << endl;
06307                                 cout << "numberOfVar: " << this->numberOfVar << " vs. " << that->numberOfVar << endl;
06308 #endif  
06309 
06310                                 return false;
06311                         }
06312 
06313                         for (int i = 0; i < numberOfVar; i++)
06314                                 if (!this->var[i]->IsEqual(that->var[i]))
06315                                         return false;
06316 
06317                         return true;
06318                 }
06319         }
06320 }//VariableValuesString::IsEqual
06321 
06322 
06323 bool VarValueString::IsEqual(VarValueString *that)
06324 {
06325         #if DEBUG_ISEQUAL_ROUTINES == 2
06326                 cout << "Start comparing in VarValueString" << endl;
06327         #endif
06328         if (this == NULL)
06329         {       if (that == NULL)
06330                         return true;
06331                 else
06332                 {
06333                         #if DEBUG_ISEQUAL_ROUTINES > 0
06334                                 cout << "Differences in VarValueString" << endl;
06335                                 cout << "First object is NULL, second is not" << endl;
06336                         #endif
06337                         return false;
06338                 }
06339         }
06340         else 
06341         {       if (that == NULL)
06342                 {
06343                         #if DEBUG_ISEQUAL_ROUTINES > 0
06344                                 cout << "Differences in VarValueString" << endl;
06345                                 cout << "Second object is NULL, first is not" << endl;
06346                         #endif
06347                         return false;
06348                 }
06349                 else    
06350                 {
06351                         if (this->idx   != that->idx  || 
06352                                 this->value != that->value )
06353                         {
06354 #if DEBUG_ISEQUAL_ROUTINES > 0
06355                                 cout << "Differences in VarValueString" << endl;
06356                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
06357                                 cout << "value: " << this->value << " vs. " << that->value << endl;
06358 #endif  
06359                                 return false;
06360                         }
06361 
06362                         return true;
06363                 }
06364         }
06365 }//VarValueString::IsEqual
06366 
06367 
06368 bool OtherVariableResult::IsEqual(OtherVariableResult *that)
06369 {
06370         #if DEBUG_ISEQUAL_ROUTINES == 2
06371                 cout << "Start comparing in OtherVariableResult" << endl;
06372         #endif
06373         if (this == NULL)
06374         {       if (that == NULL)
06375                         return true;
06376                 else
06377                 {
06378                         #if DEBUG_ISEQUAL_ROUTINES > 0
06379                                 cout << "Differences in OtherVariableResult" << endl;
06380                                 cout << "First object is NULL, second is not" << endl;
06381                         #endif
06382                         return false;
06383                 }
06384         }
06385         else 
06386         {       if (that == NULL)
06387                 {
06388                         #if DEBUG_ISEQUAL_ROUTINES > 0
06389                                 cout << "Differences in OtherVariableResult" << endl;
06390                                 cout << "Second object is NULL, first is not" << endl;
06391                         #endif
06392                         return false;
06393                 }
06394                 else    
06395                 {
06396                         if (this->name        != that->name          || 
06397                                 this->value       != that->value         || 
06398                                 this->description != that->description  ) 
06399                         {
06400 #if DEBUG_ISEQUAL_ROUTINES > 0
06401                                 cout << "Differences in OtherVariableResult" << endl;
06402                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
06403                                 cout << "value:       " << this->value       << " vs. " << that->value       << endl;
06404                                 cout << "description: " << this->description << " vs. " << that->description << endl;
06405 #endif  
06406                                 return false;
06407                         }
06408 
06409                         if (this->numberOfVar != that->numberOfVar)
06410                         {
06411 #if DEBUG_ISEQUAL_ROUTINES == 2
06412                                 cout << "numberOfVar: " << this->numberOfVar << " vs. " << that->numberOfVar << endl;
06413 #endif  
06414 
06415                                 return false;
06416                         }
06417 
06418                         for (int i = 0; i < numberOfVar; i++)
06419                                 if (!this->var[i]->IsEqual(that->var[i]))
06420                                         return false;
06421 
06422                         if (this->numberOfEnumerations != that->numberOfEnumerations)
06423                         {
06424 #if DEBUG_ISEQUAL_ROUTINES > 0
06425                                 cout << "Differences in OtherVariableResult" << endl;
06426                                 cout << "numberOfEnumerations: " << this->numberOfEnumerations << " vs. " << that->numberOfEnumerations << endl;
06427 #endif  
06428 
06429                                 return false;
06430                         }
06431 
06432                         for (int i = 0; i < numberOfEnumerations; i++)
06433                                 if (!this->enumeration[i]->IsEqual(that->enumeration[i]))
06434                                         return false;
06435 
06436                         return true;
06437                 }
06438         }
06439 }//OtherVariableResult::IsEqual
06440 
06441 
06442 bool OtherVarResult::IsEqual(OtherVarResult *that)
06443 {
06444         #if DEBUG_ISEQUAL_ROUTINES == 2
06445                 cout << "Start comparing in OtherVarResult" << endl;
06446         #endif
06447         if (this == NULL)
06448         {       if (that == NULL)
06449                         return true;
06450                 else
06451                 {
06452                         #if DEBUG_ISEQUAL_ROUTINES > 0
06453                                 cout << "Differences in OtherVarResult" << endl;
06454                                 cout << "First object is NULL, second is not" << endl;
06455                         #endif
06456                         return false;
06457                 }
06458         }
06459         else 
06460         {       if (that == NULL)
06461                 {
06462                         #if DEBUG_ISEQUAL_ROUTINES > 0
06463                                 cout << "Differences in OtherVarResult" << endl;
06464                                 cout << "Second object is NULL, first is not" << endl;
06465                         #endif
06466                         return false;
06467                 }
06468                 else    
06469                 {
06470                         if (this->idx   != that->idx  || 
06471                                 this->value != that->value ) 
06472                         {
06473 #if DEBUG_ISEQUAL_ROUTINES > 0
06474                                 cout << "Differences in OtherVarResult" << endl;
06475                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
06476                                 cout << "value: " << this->value << " vs. " << that->value << endl;
06477 #endif  
06478                                 return false;
06479                         }
06480 
06481                         return true;
06482                 }
06483         }
06484 }//OtherVarResult::IsEqual
06485 
06486 
06487 bool ObjectiveSolution::IsEqual(ObjectiveSolution *that)
06488 {
06489         #if DEBUG_ISEQUAL_ROUTINES == 2
06490                 cout << "Start comparing in ObjectiveSolution" << endl;
06491         #endif
06492         if (this == NULL)
06493         {       if (that == NULL)
06494                         return true;
06495                 else
06496                 {
06497                         #if DEBUG_ISEQUAL_ROUTINES > 0
06498                                 cout << "Differences in ObjectiveSolution" << endl;
06499                                 cout << "First object is NULL, second is not" << endl;
06500                         #endif
06501                         return false;
06502                 }
06503         }
06504         else 
06505         {       if (that == NULL)
06506                 {
06507                         #if DEBUG_ISEQUAL_ROUTINES > 0
06508                                 cout << "Differences in ObjectiveSolution" << endl;
06509                                 cout << "Second object is NULL, first is not" << endl;
06510                         #endif
06511                         return false;
06512                 }
06513                 else    
06514                 {
06515                         if (this->numberOfOtherObjectiveResults != that->numberOfOtherObjectiveResults)
06516                         {
06517 #if DEBUG_ISEQUAL_ROUTINES > 0
06518                                 cout << "Differences in ObjectiveSolution" << endl;
06519 
06520                                 cout << "numberOfOtherObjectiveResults: " << this->numberOfOtherObjectiveResults << " vs. " << that->numberOfOtherObjectiveResults << endl;
06521 #endif  
06522 
06523                                 return false;
06524                         }
06525 
06526                         for (int i = 0; i < numberOfOtherObjectiveResults; i++)
06527                                 if (!this->other[i]->IsEqual(that->other[i]))
06528                                         return false;
06529 
06530                         if (!this->values->IsEqual(that->values))
06531                                 return false;
06532                         if (!this->basisStatus->IsEqual(that->basisStatus))
06533                                 return false;
06534 
06535                         return true;
06536                 }
06537         }
06538 }//ObjectiveSolution::IsEqual
06539 
06540 
06541 bool ObjectiveValues::IsEqual(ObjectiveValues *that)
06542 {
06543         #if DEBUG_ISEQUAL_ROUTINES == 2
06544                 cout << "Start comparing in ObjectiveValues" << endl;
06545         #endif
06546         if (this == NULL)
06547         {       if (that == NULL)
06548                         return true;
06549                 else
06550                 {
06551                         #if DEBUG_ISEQUAL_ROUTINES > 0
06552                                 cout << "Differences in ObjectiveValues" << endl;
06553                                 cout << "First object is NULL, second is not" << endl;
06554                         #endif
06555                         return false;
06556                 }
06557         }
06558         else 
06559         {       if (that == NULL)
06560                 {
06561                         #if DEBUG_ISEQUAL_ROUTINES > 0
06562                                 cout << "Differences in ObjectiveValues" << endl;
06563                                 cout << "Second object is NULL, first is not" << endl;
06564                         #endif
06565                         return false;
06566                 }
06567                 else    
06568                 {
06569                         if (this->numberOfObj != that->numberOfObj)
06570                         {
06571 #if DEBUG_ISEQUAL_ROUTINES > 0
06572                                 cout << "Differences in ObjectiveValues" << endl;
06573                                 cout << "numberOfObj: " << this->numberOfObj << " vs. " << that->numberOfObj << endl;
06574 #endif  
06575 
06576                                 return false;
06577                         }
06578 
06579                         for (int i = 0; i < numberOfObj; i++)
06580                                 if (!this->obj[i]->IsEqual(that->obj[i]))
06581                                         return false;
06582 
06583                         return true;
06584                 }
06585         }
06586 }//ObjectiveValues::IsEqual
06587 
06588 
06589 bool ObjValue::IsEqual(ObjValue *that)
06590 {
06591         #if DEBUG_ISEQUAL_ROUTINES == 2
06592                 cout << "Start comparing in ObjValue" << endl;
06593         #endif
06594         if (this == NULL)
06595         {       if (that == NULL)
06596                         return true;
06597                 else
06598                 {
06599                         #if DEBUG_ISEQUAL_ROUTINES > 0
06600                                 cout << "Differences in ObjValue" << endl;
06601                                 cout << "First object is NULL, second is not" << endl;
06602                         #endif
06603                         return false;
06604                 }
06605         }
06606         else 
06607         {       if (that == NULL)
06608                 {
06609                         #if DEBUG_ISEQUAL_ROUTINES > 0
06610                                 cout << "Differences in ObjValue" << endl;
06611                                 cout << "Second object is NULL, first is not" << endl;
06612                         #endif
06613                         return false;
06614                 }
06615                 else    
06616                 {
06617                         if (this->idx   != that->idx  || 
06618                                 this->value != that->value )
06619                         {
06620 #if DEBUG_ISEQUAL_ROUTINES > 0
06621                                 cout << "Differences in ObjValue" << endl;
06622                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
06623                                 cout << "value: " << this->value << " vs. " << that->value << endl;
06624 #endif  
06625                                 return false;
06626                         }
06627 
06628                         return true;
06629                 }
06630         }
06631 }//ObjValue::IsEqual
06632 
06633 
06634 bool OtherObjectiveResult::IsEqual(OtherObjectiveResult *that)
06635 {
06636         #if DEBUG_ISEQUAL_ROUTINES == 2
06637                 cout << "Start comparing in OtherObjectiveResult" << endl;
06638         #endif
06639         if (this == NULL)
06640         {       if (that == NULL)
06641                         return true;
06642                 else
06643                 {
06644                         #if DEBUG_ISEQUAL_ROUTINES > 0
06645                                 cout << "Differences in OtherObjectiveResult" << endl;
06646                                 cout << "First object is NULL, second is not" << endl;
06647                         #endif
06648                         return false;
06649                 }
06650         }
06651         else 
06652         {       if (that == NULL)
06653                 {
06654                         #if DEBUG_ISEQUAL_ROUTINES > 0
06655                                 cout << "Differences in OtherObjectiveResult" << endl;
06656                                 cout << "Second object is NULL, first is not" << endl;
06657                         #endif
06658                         return false;
06659                 }
06660                 else    
06661                 {
06662                         if (this->value       != that->value   || 
06663                                 this->name        != that->name    ||                           
06664                                 this->description != that->description  ) 
06665                         {
06666 #if DEBUG_ISEQUAL_ROUTINES > 0
06667                                 cout << "Differences in OtherObjectiveResult" << endl;
06668                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
06669                                 cout << "value:       " << this->value       << " vs. " << that->value       << endl;
06670                                 cout << "description: " << this->description << " vs. " << that->description << endl;
06671 #endif  
06672                                 return false;
06673                         }
06674 
06675                         if (this->numberOfObj != that->numberOfObj)
06676                         {
06677 #if DEBUG_ISEQUAL_ROUTINES > 0
06678                                 cout << "Differences in OtherObjectiveResult" << endl;
06679                                 cout << "numberOfObj: " << this->numberOfObj << " vs. " << that->numberOfObj << endl;
06680 #endif  
06681 
06682                                 return false;
06683                         }
06684 
06685                         for (int i = 0; i < numberOfObj; i++)
06686                                 if (!this->obj[i]->IsEqual(that->obj[i]))
06687                                         return false;
06688 
06689                         if (this->numberOfEnumerations != that->numberOfEnumerations)
06690                         {
06691 #if DEBUG_ISEQUAL_ROUTINES > 0
06692                                 cout << "Differences in OtherObjectiveResult" << endl;
06693                                 cout << "numberOfEnumerations: " << this->numberOfEnumerations << " vs. " << that->numberOfEnumerations << endl;
06694 #endif  
06695 
06696                                 return false;
06697                         }
06698 
06699                         for (int i = 0; i < numberOfEnumerations; i++)
06700                                 if (!this->enumeration[i]->IsEqual(that->enumeration[i]))
06701                                         return false;
06702 
06703                         return true;
06704                 }
06705         }
06706 }//OtherObjectiveResult::IsEqual
06707 
06708 
06709 bool OtherObjResult::IsEqual(OtherObjResult *that)
06710 {
06711         #if DEBUG_ISEQUAL_ROUTINES == 2
06712                 cout << "Start comparing in OtherObjResult" << endl;
06713         #endif
06714         if (this == NULL)
06715         {       if (that == NULL)
06716                         return true;
06717                 else
06718                 {
06719                         #if DEBUG_ISEQUAL_ROUTINES > 0
06720                                 cout << "Differences in OtherObjResult" << endl;
06721                                 cout << "First object is NULL, second is not" << endl;
06722                         #endif
06723                         return false;
06724                 }
06725         }
06726         else 
06727         {       if (that == NULL)
06728                 {
06729                         #if DEBUG_ISEQUAL_ROUTINES > 0
06730                                 cout << "Differences in OtherObjResult" << endl;
06731                                 cout << "Second object is NULL, first is not" << endl;
06732                         #endif
06733                         return false;
06734                 }
06735                 else    
06736                 {
06737                         if (this->idx   != that->idx  || 
06738                                 this->value != that->value )
06739                         {
06740 #if DEBUG_ISEQUAL_ROUTINES > 0
06741                                 cout << "Differences in OtherObjResult" << endl;
06742                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
06743                                 cout << "value: " << this->value << " vs. " << that->value << endl;
06744 #endif  
06745                                 return false;
06746                         }
06747 
06748                         return true;
06749                 }
06750         }
06751 }//OtherObjResult::IsEqual
06752 
06753 
06754 bool ConstraintSolution::IsEqual(ConstraintSolution *that)
06755 {
06756         #if DEBUG_ISEQUAL_ROUTINES == 2
06757                 cout << "Start comparing in ConstraintSolution" << endl;
06758         #endif
06759         if (this == NULL)
06760         {       if (that == NULL)
06761                         return true;
06762                 else
06763                 {
06764                         #if DEBUG_ISEQUAL_ROUTINES > 0
06765                                 cout << "Differences in ConstraintSolution" << endl;
06766                                 cout << "First object is NULL, second is not" << endl;
06767                         #endif
06768                         return false;
06769                 }
06770         }
06771         else 
06772         {       if (that == NULL)
06773                 {
06774                         #if DEBUG_ISEQUAL_ROUTINES > 0
06775                                 cout << "Differences in ConstraintSolution" << endl;
06776                                 cout << "Second object is NULL, first is not" << endl;
06777                         #endif
06778                         return false;
06779                 }
06780                 else    
06781                 {
06782                         if (this->numberOfOtherConstraintResults != that->numberOfOtherConstraintResults)
06783                         {
06784 #if DEBUG_ISEQUAL_ROUTINES > 0
06785                                 cout << "Differences in ConstraintSolution" << endl;
06786                                 cout << "numberOfOtherConstraintResults: " << this->numberOfOtherConstraintResults << " vs. " << that->numberOfOtherConstraintResults << endl;
06787 #endif  
06788 
06789                                 return false;
06790                         }
06791 
06792                         for (int i = 0; i < numberOfOtherConstraintResults; i++)
06793                                 if (!this->other[i]->IsEqual(that->other[i]))
06794                                         return false;
06795 
06796                         if (!this->dualValues->IsEqual(that->dualValues))
06797                                 return false;
06798                         if (!this->basisStatus->IsEqual(that->basisStatus))
06799                                 return false;
06800 
06801                         return true;
06802                 }
06803         }
06804 }//ConstraintSolution::IsEqual
06805 
06806         
06807 bool DualVariableValues::IsEqual(DualVariableValues *that)
06808 {
06809 #if DEBUG_ISEQUAL_ROUTINES == 2
06810         cout << "Start comparing in DualVariableValues" << endl;
06811 #endif
06812         if (this == NULL)
06813         {       if (that == NULL)
06814                         return true;
06815                 else
06816                 {
06817                         #if DEBUG_ISEQUAL_ROUTINES > 0
06818                                 cout << "Differences in DualVariableValues" << endl;
06819                                 cout << "First object is NULL, second is not" << endl;
06820                         #endif
06821                         return false;
06822                 }
06823         }
06824         else 
06825         {       if (that == NULL)
06826                 {
06827                         #if DEBUG_ISEQUAL_ROUTINES > 0
06828                                 cout << "Differences in DualVariableValues" << endl;
06829                                 cout << "Second object is NULL, first is not" << endl;
06830                         #endif
06831                         return false;
06832                 }
06833                 else    
06834                 {
06835                         if (this->numberOfCon != that->numberOfCon)
06836                         {
06837 #if DEBUG_ISEQUAL_ROUTINES > 0
06838                                 cout << "Differences in DualVariableValues" << endl;
06839                                 cout << "numberOfCon: " << this->numberOfCon << " vs. " << that->numberOfCon << endl;
06840 #endif  
06841 
06842                                 return false;
06843                         }
06844 
06845                         for (int i = 0; i < numberOfCon; i++)
06846                                 if (!this->con[i]->IsEqual(that->con[i]))
06847                                         return false;
06848 
06849                         return true;
06850                 }
06851         }
06852 }//DualVariableValues::IsEqual
06853 
06854 bool DualVarValue::IsEqual(DualVarValue *that)
06855 {
06856 #if DEBUG_ISEQUAL_ROUTINES == 2
06857         cout << "Start comparing in DualVarValue" << endl;
06858 #endif
06859         if (this == NULL)
06860         {       if (that == NULL)
06861                         return true;
06862                 else
06863                 {
06864                         #if DEBUG_ISEQUAL_ROUTINES > 0
06865                                 cout << "Differences in DualVarValue" << endl;
06866                                 cout << "First object is NULL, second is not" << endl;
06867                         #endif
06868                         return false;
06869                 }
06870         }
06871         else 
06872         {       if (that == NULL)
06873                 {
06874                         #if DEBUG_ISEQUAL_ROUTINES > 0
06875                                 cout << "Differences in DualVarValue" << endl;
06876                                 cout << "Second object is NULL, first is not" << endl;
06877                         #endif
06878                         return false;
06879                 }
06880                 else    
06881                 {
06882                         if (this->idx != that->idx || !isEqual(this->value, that->value) )
06883                         {
06884 #if DEBUG_ISEQUAL_ROUTINES > 0
06885                                 cout << "Differences in DualVarValue" << endl;
06886                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
06887                                 cout << "value: " << this->value << " vs. " << that->value << endl;
06888 #endif  
06889                                 return false;
06890                         }
06891 
06892                         return true;
06893                 }
06894         }
06895 }//DualVarValue::IsEqual
06896 
06897 bool OtherConstraintResult::IsEqual(OtherConstraintResult *that)
06898 {
06899         #if DEBUG_ISEQUAL_ROUTINES == 2
06900                 cout << "Start comparing in OtherConstraintResult" << endl;
06901         #endif
06902         if (this == NULL)
06903         {       if (that == NULL)
06904                         return true;
06905                 else
06906                 {
06907                         #if DEBUG_ISEQUAL_ROUTINES > 0
06908                                 cout << "Differences in OtherConstraintResult" << endl;
06909                                 cout << "First object is NULL, second is not" << endl;
06910                         #endif
06911                         return false;
06912                 }
06913         }
06914         else 
06915         {       if (that == NULL)
06916                 {
06917                         #if DEBUG_ISEQUAL_ROUTINES > 0
06918                                 cout << "Differences in OtherConstraintResult" << endl;
06919                                 cout << "Second object is NULL, first is not" << endl;
06920                         #endif
06921                         return false;
06922                 }
06923                 else    
06924                 {
06925                         if (this->name        != that->name          || 
06926                                 this->value       != that->value         || 
06927                                 this->description != that->description  ) 
06928                         {
06929 #if DEBUG_ISEQUAL_ROUTINES > 0
06930                                 cout << "Differences in OtherConstraintResult" << endl;
06931                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
06932                                 cout << "value:       " << this->value       << " vs. " << that->value       << endl;
06933                                 cout << "description: " << this->description << " vs. " << that->description << endl;
06934 #endif  
06935                                 return false;
06936                         }
06937 
06938                         if (this->numberOfCon != that->numberOfCon)
06939                         {
06940 #if DEBUG_ISEQUAL_ROUTINES > 0
06941                                 cout << "Differences in OtherConstraintResult" << endl;
06942                                 cout << "numberOfCon: " << this->numberOfCon << " vs. " << that->numberOfCon << endl;
06943 #endif  
06944 
06945                                 return false;
06946                         }
06947 
06948                         for (int i = 0; i < numberOfCon; i++)
06949                                 if (!this->con[i]->IsEqual(that->con[i]))
06950                                         return false;
06951 
06952                         if (this->numberOfEnumerations != that->numberOfEnumerations)
06953                         {
06954 #if DEBUG_ISEQUAL_ROUTINES > 0
06955                                 cout << "Differences in OtherConstraintResult" << endl;
06956                                 cout << "numberOfEnumerations: " << this->numberOfEnumerations << " vs. " << that->numberOfEnumerations << endl;
06957 #endif  
06958 
06959                                 return false;
06960                         }
06961 
06962                         for (int i = 0; i < numberOfEnumerations; i++)
06963                                 if (!this->enumeration[i]->IsEqual(that->enumeration[i]))
06964                                         return false;
06965 
06966                         return true;
06967                 }
06968         }
06969 }//OtherConstraintResult::IsEqual
06970 
06971 
06972 bool OtherConResult::IsEqual(OtherConResult *that)
06973 {
06974         #if DEBUG_ISEQUAL_ROUTINES == 2
06975                 cout << "Start comparing in OtherConResult" << endl;
06976         #endif
06977         if (this == NULL)
06978         {       if (that == NULL)
06979                         return true;
06980                 else
06981                 {
06982                         #if DEBUG_ISEQUAL_ROUTINES > 0
06983                                 cout << "Differences in OtherConResult" << endl;
06984                                 cout << "First object is NULL, second is not" << endl;
06985                         #endif
06986                         return false;
06987                 }
06988         }
06989         else 
06990         {       if (that == NULL)
06991                 {
06992                         #if DEBUG_ISEQUAL_ROUTINES > 0
06993                                 cout << "Differences in OtherConResult" << endl;
06994                                 cout << "Second object is NULL, first is not" << endl;
06995                         #endif
06996                         return false;
06997                 }
06998                 else    
06999                 {
07000                         if (this->idx   != that->idx  || 
07001                                 this->value != that->value )
07002                         {
07003 #if DEBUG_ISEQUAL_ROUTINES > 0
07004                                 cout << "Differences in OtherConResult" << endl;
07005                                 cout << "idx:   " << this->idx   << " vs. " << that->idx   << endl;
07006                                 cout << "value: " << this->value << " vs. " << that->value << endl;
07007 #endif  
07008                                 return false;
07009                         }
07010 
07011                         return true;
07012                 }
07013         }
07014 }//OtherConResult::IsEqual
07015 
07016 
07017 bool OtherSolutionResults::IsEqual(OtherSolutionResults *that)
07018 {
07019         #if DEBUG_ISEQUAL_ROUTINES == 2
07020                 cout << "Start comparing in OtherSolutionResults" << endl;
07021         #endif
07022         if (this == NULL)
07023         {       if (that == NULL)
07024                         return true;
07025                 else
07026                 {
07027                         #if DEBUG_ISEQUAL_ROUTINES > 0
07028                                 cout << "Differences in OtherSolutionResults" << endl;
07029                                 cout << "First object is NULL, second is not" << endl;
07030                         #endif
07031                         return false;
07032                 }
07033         }
07034         else 
07035         {       if (that == NULL)
07036                 {
07037                         #if DEBUG_ISEQUAL_ROUTINES > 0
07038                                 cout << "Differences in OtherSolutionResults" << endl;
07039                                 cout << "Second object is NULL, first is not" << endl;
07040                         #endif
07041                         return false;
07042                 }
07043                 else    
07044                 {
07045                         if (this->numberOfOtherSolutionResults != that->numberOfOtherSolutionResults)
07046                         {
07047 #if DEBUG_ISEQUAL_ROUTINES > 0
07048                                 cout << "Differences in OtherSolutionResults" << endl;
07049                                 cout << "numberOfOtherSolutionResults: " << this->numberOfOtherSolutionResults << " vs. " << that->numberOfOtherSolutionResults << endl;
07050 #endif  
07051 
07052                                 return false;
07053                         }
07054 
07055                         for (int i = 0; i < numberOfOtherSolutionResults; i++)
07056                                 if (!this->otherSolutionResult[i]->IsEqual(that->otherSolutionResult[i]))
07057                                         return false;
07058 
07059                         return true;
07060                 }
07061         }
07062 }//OtherSolutionResults::IsEqual
07063 
07064 bool OtherSolutionResult::IsEqual(OtherSolutionResult *that)
07065 {
07066         #if DEBUG_ISEQUAL_ROUTINES == 2
07067                 cout << "Start comparing in OtherSolutionResult" << endl;
07068         #endif
07069         if (this == NULL)
07070         {       if (that == NULL)
07071                         return true;
07072                 else
07073                 {
07074                         #if DEBUG_ISEQUAL_ROUTINES > 0
07075                                 cout << "Differences in OtherSolutionResult" << endl;
07076                                 cout << "First object is NULL, second is not" << endl;
07077                         #endif
07078                         return false;
07079                 }
07080         }
07081         else 
07082         {       if (that == NULL)
07083                 {
07084                         #if DEBUG_ISEQUAL_ROUTINES > 0
07085                                 cout << "Differences in OtherSolutionResult" << endl;
07086                                 cout << "Second object is NULL, first is not" << endl;
07087                         #endif
07088                         return false;
07089                 }
07090                 else    
07091                 {
07092 
07093                         if (this->name        != that->name          || 
07094                                 this->category    != that->category      || 
07095                                 this->description != that->description  ) 
07096                         {
07097 #if DEBUG_ISEQUAL_ROUTINES > 0
07098                                 cout << "Differences in OtherSolutionResult" << endl;
07099                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
07100                                 cout << "category:    " << this->category    << " vs. " << that->category    << endl;
07101                                 cout << "description: " << this->description << " vs. " << that->description << endl;
07102 #endif  
07103                                 return false;
07104                         }
07105 
07106                         if (this->numberOfItems != that->numberOfItems)
07107                         {
07108 #if DEBUG_ISEQUAL_ROUTINES > 0
07109                                 cout << "Differences in OtherSolutionResult" << endl;
07110                                 cout << "numberOfItems: " << this->numberOfItems << " vs. " << that->numberOfItems << endl;
07111 #endif  
07112 
07113                                 return false;
07114                         }
07115 
07116                         for (int i = 0; i < numberOfItems; i++)
07117                                 if (this->item[i] != that->item[i])
07118                                 {
07119 #if DEBUG_ISEQUAL_ROUTINES > 0
07120                                 cout << "Differences in OtherSolutionResult" << endl;
07121                                 cout << "item: " << this->item[i] << " vs. " << that->item[i] << endl;
07122 #endif  
07123                                         return false;
07124                                 }
07125 
07126                         return true;
07127                 }
07128         }
07129 }//OtherSolutionResult::IsEqual
07130 
07131 
07132 bool OtherSolverOutput::IsEqual(OtherSolverOutput *that)
07133 {
07134         #if DEBUG_ISEQUAL_ROUTINES == 2
07135                 cout << "Start comparing in OtherSolverOutput" << endl;
07136         #endif
07137         if (this == NULL)
07138         {       if (that == NULL)
07139                         return true;
07140                 else
07141                 {
07142                         #if DEBUG_ISEQUAL_ROUTINES > 0
07143                                 cout << "Differences in OtherSolverOutput" << endl;
07144                                 cout << "First object is NULL, second is not" << endl;
07145                         #endif
07146                         return false;
07147                 }
07148         }
07149         else 
07150         {       if (that == NULL)
07151                 {
07152                         #if DEBUG_ISEQUAL_ROUTINES > 0
07153                                 cout << "Differences in OtherSolverOutput" << endl;
07154                                 cout << "Second object is NULL, first is not" << endl;
07155                         #endif
07156                         return false;
07157                 }
07158                 else    
07159                 {
07160                         if (this->numberOfSolverOutputs != that->numberOfSolverOutputs)
07161                         {
07162 #if DEBUG_ISEQUAL_ROUTINES > 0
07163                                 cout << "Differences in OtherSolverOutput" << endl;
07164                                 cout << "numberOfSolverOutputs: " << this->numberOfSolverOutputs << " vs. " << that->numberOfSolverOutputs << endl;
07165 #endif  
07166 
07167                                 return false;
07168                         }
07169 
07170                         for (int i = 0; i < numberOfSolverOutputs; i++)
07171                                 if (!this->solverOutput[i]->IsEqual(that->solverOutput[i]))
07172                                         return false;
07173 
07174                         return true;
07175                 }
07176         }
07177 }//OtherSolverOutput::IsEqual
07178 
07179 
07180 bool SolverOutput::IsEqual(SolverOutput *that)
07181 {
07182         #if DEBUG_ISEQUAL_ROUTINES == 2
07183                 cout << "Start comparing in SolverOutput" << endl;
07184         #endif
07185         if (this == NULL)
07186         {       if (that == NULL)
07187                         return true;
07188                 else
07189                 {
07190                         #if DEBUG_ISEQUAL_ROUTINES > 0
07191                                 cout << "Differences in SolverOutput" << endl;
07192                                 cout << "First object is NULL, second is not" << endl;
07193                         #endif
07194                         return false;
07195                 }
07196         }
07197         else 
07198         {       if (that == NULL)
07199                 {
07200                         #if DEBUG_ISEQUAL_ROUTINES > 0
07201                                 cout << "Differences in SolverOutput" << endl;
07202                                 cout << "Second object is NULL, first is not" << endl;
07203                         #endif
07204                         return false;
07205                 }
07206                 else    
07207                 {
07208                         if (this->name        != that->name          || 
07209                                 this->category    != that->category      || 
07210                                 this->description != that->description  ) 
07211                         {
07212 #if DEBUG_ISEQUAL_ROUTINES > 0
07213                                 cout << "Differences in SolverOutput" << endl;
07214                                 cout << "name:        " << this->name        << " vs. " << that->name        << endl;
07215                                 cout << "category:    " << this->category    << " vs. " << that->category    << endl;
07216                                 cout << "description: " << this->description << " vs. " << that->description << endl;
07217 #endif  
07218                                 return false;
07219                         }
07220 
07221                         if (this->numberOfItems != that->numberOfItems)
07222                         {
07223 #if DEBUG_ISEQUAL_ROUTINES > 0
07224                                 cout << "Differences in SolverOutput" << endl;
07225                                 cout << "numberOfItems: " << this->numberOfItems << " vs. " << that->numberOfItems << endl;
07226 #endif  
07227 
07228                                 return false;
07229                         }
07230 
07231                         for (int i = 0; i < numberOfItems; i++)
07232                                 if (this->item[i] != that->item[i])
07233                                 {
07234 #if DEBUG_ISEQUAL_ROUTINES > 0
07235                                 cout << "Differences in SolverOutput" << endl;
07236                                 cout << "item: " << this->item[i] << " vs. " << that->item[i] << endl;
07237 #endif  
07238                                         return false;
07239                                 }
07240 
07241                         return true;
07242                 }
07243         }
07244 }//SolverOutput::IsEqual
07245 
07246 
07247 /******************************************************
07248  * methods to set random objects and their components
07249  ******************************************************/
07250 bool OSResult::setRandom(double density, bool conformant)
07251 {
07252 #ifdef DEBUG_OSRESULT
07253         cout << "Set random OSResult" << endl;
07254 #endif
07255         if (OSRand() <= density)
07256         {
07257                 resultHeader = new GeneralFileHeader();
07258                 resultHeader->setRandom(density, conformant);
07259         }
07260         if (OSRand() <= density)
07261         {
07262                 general = new GeneralResult();
07263                 general->setRandom(density, conformant);
07264         }
07265         if (OSRand() <= density)       
07266         {
07267                 system = new SystemResult();
07268                 system->setRandom(density, conformant);
07269         }
07270         if (OSRand() <= density)      
07271         {
07272                 service = new ServiceResult();
07273                 service->setRandom(density, conformant);
07274         }
07275         if (OSRand() <= density)          
07276         {
07277                 job = new JobResult();
07278                 job->setRandom(density, conformant);
07279         }
07280         if (OSRand() <= density) 
07281         {
07282                 optimization = new OptimizationResult();
07283                 optimization->setRandom(density, conformant);
07284         }
07285         return true;
07286 }//OSResult::setRandom
07287 
07288 
07289 bool GeneralResult::setRandom(double density, bool conformant)
07290 {
07291 #ifdef DEBUG_OSRESULT
07292         cout << "Set random GeneralResult" << endl;
07293 #endif
07294         if (OSRand() <= density) this->message        = "random string";
07295         if (OSRand() <= density) this->serviceURI     = "random string";
07296         if (OSRand() <= density) this->serviceName    = "random string";
07297         if (OSRand() <= density) this->instanceName   = "random string";
07298         if (OSRand() <= density) this->jobID          = "random string";
07299         if (OSRand() <= density) this->solverInvoked  = "random string";
07300         if (OSRand() <= density) this->timeStamp      = "random string";
07301 
07302         if (OSRand() <= density)
07303         {
07304                 generalStatus = new GeneralStatus(); 
07305                 generalStatus->setRandom(density, conformant);
07306         }
07307         if (OSRand() <= density)     
07308         {
07309                 otherResults = new OtherResults(); 
07310                 otherResults->setRandom(density, conformant);
07311         }
07312         return true;
07313 }//GeneralResult::setRandom
07314 
07315 
07316 bool GeneralStatus::setRandom(double density, bool conformant)
07317 {
07318 #ifdef DEBUG_OSRESULT
07319         cout << "Set random GeneralStatus" << endl;
07320 #endif
07321         int n;
07322 
07323         if (OSRand() <= density) numberOfSubstatuses = (int)(1+4*OSRand());    
07324         if (OSRand() <= density) type = "normal"; else type = "error";
07325         if (OSRand() <= density) description = "random string";
07326 
07327         if (conformant) n = this->numberOfSubstatuses;
07328         else            n = (int)(1+4*OSRand());
07329          
07330         substatus = new GeneralSubstatus*[n];
07331 
07332         for (int i = 0; i < n; i++)
07333         {
07334                 substatus[i] = new GeneralSubstatus();
07335                 substatus[i]->setRandom(density, conformant);
07336         }
07337 
07338         return true;
07339 }//GeneralStatus::setRandom
07340 
07341 bool GeneralSubstatus::setRandom(double density, bool conformant)
07342 {
07343 #ifdef DEBUG_OSRESULT
07344         cout << "Set random GeneralSubstatus" << endl;
07345 #endif
07346         name = "substatus name";
07347         if (OSRand() <= density) description = "random string";
07348         return true;
07349 }//GeneralSubstatus::setRandom
07350 
07351 
07352 bool OtherResults::setRandom(double density, bool conformant)
07353 {
07354 #ifdef DEBUG_OSRESULT
07355         cout << "Set random OtherResults" << endl;
07356 #endif
07357         int n;
07358 
07359         this->numberOfOtherResults = (int)(1+4*OSRand());
07360 
07361         if (conformant) n = this->numberOfOtherResults;
07362         else            n = (int)(1+4*OSRand());
07363 
07364         other = new OtherResult*[n];
07365 
07366         for (int i = 0; i < n; i++)
07367         {
07368                 other[i] = new OtherResult();
07369                 other[i]->setRandom(density, conformant);
07370         }
07371 
07372         return true;
07373 }//OtherResults::setRandom
07374 
07375 
07376 bool OtherResult::setRandom(double density, bool conformant)
07377 {
07378 #ifdef DEBUG_OSRESULT
07379         cout << "Set random OtherResult" << endl;
07380 #endif
07381         name        = "other result";
07382         value       = "random string";
07383         description = "random string";
07384         return true;
07385 }//OtherResult::setRandom
07386 
07387 
07388 bool SystemResult::setRandom(double density, bool conformant)
07389 {
07390 #ifdef DEBUG_OSRESULT
07391         cout << "Set random SystemResult" << endl;
07392 #endif
07393         if (OSRand() <= density) systemInformation = "random string"; 
07394 
07395         if (OSRand() <= density)
07396         {
07397                 availableDiskSpace = new StorageCapacity(); 
07398                 availableDiskSpace->setRandom(density, conformant);
07399         }
07400 
07401         if (OSRand() <= density)
07402         {
07403                 availableMemory = new StorageCapacity(); 
07404                 availableMemory->setRandom(density, conformant);
07405         }
07406         if (OSRand() <= density)
07407         {
07408                 availableCPUSpeed = new CPUSpeed(); 
07409                 availableCPUSpeed->setRandom(density, conformant);
07410         }
07411 
07412         if (OSRand() <= density)
07413         {
07414                 availableCPUNumber = new CPUNumber(); 
07415                 availableCPUNumber->setRandom(density, conformant);
07416         }
07417 
07418         if (OSRand() <= density)     
07419         {
07420                 otherResults = new OtherResults(); 
07421                 otherResults->setRandom(density, conformant);
07422         }
07423         return true;
07424 }//SystemResult::setRandom
07425 
07426 bool ServiceResult::setRandom(double density, bool conformant)
07427 {
07428 #ifdef DEBUG_OSRESULT
07429         cout << "Set random ServiceResult" << endl;
07430 #endif
07431         if (OSRand() <= density) 
07432         {
07433                 double temp = OSRand();
07434                 if (conformant) temp = 0.5*temp;
07435 
07436                 if      (temp <= 0.25) this->currentState = "unknown";
07437                 else if (temp <= 0.50) this->currentState = "busy";
07438                 else if (temp <= 0.75) this->currentState = "";
07439                 else                   this->currentState = "known";
07440         } 
07441 
07442         if (OSRand() <= density) currentJobCount = (int) (-1+4*OSRand());
07443         if (OSRand() <= density) totalJobsSoFar  = (int) (-1+4*OSRand());
07444         if (OSRand() <= density) timeServiceStarted  = "2010-07-12T01:23:45-03:00";     
07445         
07446         if (OSRand() <= density)        
07447         {
07448                 double temp = OSRand();
07449 
07450                 if      (temp <= 0.25) this->serviceUtilization = OSRand();
07451                 else if (temp <= 0.50) this->serviceUtilization = -1.0;
07452                 else if (temp <= 0.75) this->serviceUtilization = OSDBL_MAX;
07453                 else                   this->serviceUtilization = OSNAN;
07454         } 
07455 
07456         if (OSRand() <= density)     
07457         {
07458                 otherResults = new OtherResults(); 
07459                 otherResults->setRandom(density, conformant);
07460         }
07461         return true;
07462 }//ServiceResult::setRandom
07463 
07464 
07465 bool JobResult::setRandom(double density, bool conformant)
07466 {
07467 #ifdef DEBUG_OSRESULT
07468         cout << "Set random SystemResult" << endl;
07469 #endif
07470         if (OSRand() <= density) 
07471         {
07472                 double temp = OSRand();
07473                 if (conformant) temp = 0.5*temp;
07474 
07475                 if      (temp <= 0.25) this->status = "finished";
07476                 else if (temp <= 0.50) this->status = "running";
07477                 else if (temp <= 0.75) this->status = "";
07478                 else                   this->status = "walking";
07479         } 
07480 
07481         if (OSRand() <= density) submitTime         = "1970-01-01T00:00:00-00:00";
07482         if (OSRand() <= density) scheduledStartTime = "1970-01-01T00:00:00-00:00";
07483         if (OSRand() <= density) actualStartTime    = "1970-01-01T00:00:00-00:00";
07484         if (OSRand() <= density) endTime            = "1970-01-01T00:00:00-00:00";
07485 
07486         if (OSRand() <= density)     
07487         {
07488                 timingInformation = new TimingInformation(); 
07489                 timingInformation->setRandom(density, conformant);
07490         }
07491 
07492         if (OSRand() <= density)     
07493         {
07494                 usedDiskSpace = new StorageCapacity(); 
07495                 usedDiskSpace->setRandom(density, conformant);
07496         }
07497 
07498         if (OSRand() <= density)     
07499         {
07500                 usedMemory = new StorageCapacity(); 
07501                 usedMemory->setRandom(density, conformant);
07502         }
07503 
07504         if (OSRand() <= density)     
07505         {
07506                 usedCPUSpeed = new CPUSpeed(); 
07507                 usedCPUSpeed->setRandom(density, conformant);
07508         }
07509 
07510         if (OSRand() <= density)     
07511         {
07512                 usedCPUNumber = new CPUNumber(); 
07513                 usedCPUNumber->setRandom(density, conformant);
07514         }
07515                                 
07516         if (OSRand() <= density)     
07517         {
07518                 otherResults = new OtherResults(); 
07519                 otherResults->setRandom(density, conformant);
07520         }
07521         return true;
07522 }//JobResult::setRandom
07523 
07524 
07525 bool TimingInformation::setRandom(double density, bool conformant)
07526 {
07527 #ifdef DEBUG_OSRESULT
07528         cout << "Set random TimingInformation" << endl;
07529 #endif
07530         int n;
07531 
07532         this->numberOfTimes = (int)(1+4*OSRand());
07533 
07534         if (conformant) n = this->numberOfTimes;
07535         else            n = (int)(1+4*OSRand());
07536 
07537         time = new TimeMeasurement*[n];
07538 
07539         for (int i = 0; i < n; i++)
07540         {
07541                 time[i] = new TimeMeasurement();
07542                 time[i]->setRandom(density, conformant);
07543         }
07544 
07545         return true;
07546 }//TimingInformation::setRandom
07547 
07548 #if 0
07549 bool Time::setRandom(double density, bool conformant)
07550 {
07551 #ifdef DEBUG_OSRESULT
07552         cout << "Set random TimingInformation" << endl;
07553 #endif
07554         if (OSRand() <= density) 
07555                 this->description = "random string"; 
07556 
07557         if (OSRand() <= density) 
07558         {
07559                 double temp = OSRand();
07560                 if (conformant) temp = 0.5*temp;
07561 
07562                 if      (temp <= 0.25) this->type = "elapsedTime";
07563                 else if (temp <= 0.50) this->type = "cpuTime";
07564                 else if (temp <= 0.75) this->type = "";
07565                 else                   this->type = "dinnerTime";
07566         } 
07567 
07568         if (OSRand() <= density) 
07569         {
07570                 double temp = OSRand();
07571                 if (conformant) temp = 0.5*temp;
07572 
07573                 if      (temp <= 0.25) this->category = "total";
07574                 else if (temp <= 0.50) this->category = "input";
07575                 else if (temp <= 0.75) this->category = "";
07576                 else                   this->category = "putin";
07577         } 
07578 
07579         if (OSRand() <= density) 
07580         {
07581                 double temp = OSRand();
07582                 if (conformant) temp = 0.5*temp;
07583 
07584                 if      (temp <= 0.25) this->unit = "second";
07585                 else if (temp <= 0.50) this->unit = "tick";
07586                 else if (temp <= 0.75) this->unit = "";
07587                 else                   this->unit = "flea";
07588         } 
07589 
07590         if (OSRand() <= density) 
07591         {
07592                 if (OSRand() <= 0.5) this->value = 3.14156;
07593                 else                 this->value = 2.71828;
07594         }
07595         return true;
07596 }//Time::setRandom
07597 #endif
07598 
07599 
07600 bool TimeMeasurement::setRandom(double density, bool conformant)
07601 {
07602 #ifdef DEBUG_OSRESULT
07603         cout << "Set random TimeMeasurement" << endl;
07604 #endif
07605         if (OSRand() <= density) 
07606                 this->description = "random string"; 
07607 
07608         if (OSRand() <= density) 
07609         {
07610                 double temp = OSRand();
07611                 if (conformant) temp = 0.5*temp;
07612 
07613                 if      (temp <= 0.25) this->type = "elapsedTime";
07614                 else if (temp <= 0.50) this->type = "cpuTime";
07615                 else if (temp <= 0.75) this->type = "";
07616                 else                   this->type = "dinnerTime";
07617         } 
07618 
07619         if (OSRand() <= density) 
07620         {
07621                 double temp = OSRand();
07622                 if (conformant) temp = 0.5*temp;
07623 
07624                 if      (temp <= 0.25) this->category = "total";
07625                 else if (temp <= 0.50) this->category = "input";
07626                 else if (temp <= 0.75) this->category = "";
07627                 else                   this->category = "putin";
07628         } 
07629 
07630         if (OSRand() <= density) this->TimeSpan::setRandom(density,conformant);
07631 
07632         return true;
07633 }//TimeMeasurement::setRandom
07634 
07635 bool OptimizationResult::setRandom(double density, bool conformant)
07636 {
07637 #ifdef DEBUG_OSRESULT
07638         cout << "Set random OptimizationResult" << endl;
07639 #endif
07640         numberOfSolutions = (int)(1+4*OSRand());
07641 
07642         numberOfVariables   = 10; 
07643         numberOfObjectives  = 2;
07644         numberOfConstraints = 5;
07645 
07646         int n;
07647 
07648         if (conformant) n = this->numberOfSolutions;
07649         else            n = (int)(1+4*OSRand());
07650 
07651         solution = new OptimizationSolution*[n];
07652         
07653         for (int i = 0; i < n; i++)
07654         {
07655                 solution[i] = new OptimizationSolution();
07656                 solution[i]->setRandom(density,conformant);
07657         }
07658 
07659         return true;
07660 }//OptimizationResult::setRandom
07661 
07662 bool OptimizationSolution::setRandom(double density, bool conformant)
07663 {
07664 #ifdef DEBUG_OSRESULT
07665         cout << "Set random OptimizationSolution" << endl;
07666 #endif
07667         if (OSRand() <= density)
07668         {
07669                 if (OSRand() <= density) targetObjectiveIdx = -1;
07670                 else                                     targetObjectiveIdx = -2;
07671         }
07672 
07673         if (OSRand() <= density) weightedObjectives = (OSRand() < 0.5);
07674 
07675         if (OSRand() <= density) message = "random string";
07676 
07677         status = new OptimizationSolutionStatus();
07678         status->setRandom(density, conformant);
07679 
07680         if (OSRand() <= density)
07681         {
07682                 variables = new VariableSolution();
07683                 variables->setRandom(density, conformant);
07684         }
07685 
07686         if (OSRand() <= density)
07687         {
07688                 objectives = new ObjectiveSolution();
07689                 objectives->setRandom(density, conformant);
07690         }
07691 
07692         if (OSRand() <= density)
07693         {
07694                 constraints = new ConstraintSolution();
07695                 constraints->setRandom(density, conformant);
07696         }
07697 
07698         if (OSRand() <= density)
07699         {
07700                 otherSolutionResults = new OtherSolutionResults();
07701                 otherSolutionResults->setRandom(density, conformant);
07702         }
07703 
07704         return true;
07705 }//OptimizationSolution::setRandom
07706 
07707 
07708 bool OptimizationSolutionStatus::setRandom(double density, bool conformant)
07709 {
07710 #ifdef DEBUG_OSRESULT
07711         cout << "Set random OptimizationSolutionStatus" << endl;
07712 #endif
07713         double temp = OSRand();
07714         if (conformant) temp = 0.5*temp;
07715 
07716         if      (temp <= 0.25) this->type = "optimal";
07717         else if (temp <= 0.50) this->type = "unsure";
07718         else if (temp <= 0.75) this->type = "";
07719         else                   this->type = "sure";
07720 
07721         if (OSRand() <= density) this->description = "random string";
07722 
07723         if (OSRand() <= density) 
07724         {
07725                 int n;
07726 
07727                 this->numberOfSubstatuses = (int)(1+4*OSRand());
07728 
07729                 if (conformant) n = this->numberOfSubstatuses;
07730                 else            n = (int)(1+4*OSRand());
07731 
07732                 substatus = new OptimizationSolutionSubstatus*[n];
07733 
07734                 for (int i = 0; i < n; i++)
07735                 {
07736                         substatus[i] = new OptimizationSolutionSubstatus();
07737                         substatus[i]->setRandom(density, conformant);
07738                 }
07739         }
07740 
07741         return true;
07742 }//OptimizationSolutionStatus::setRandom
07743 
07744 
07745 bool OptimizationSolutionSubstatus::setRandom(double density, bool conformant)
07746 {
07747 #ifdef DEBUG_OSRESULT
07748         cout << "Set random OptimizationSolutionSubstatus" << endl;
07749 #endif
07750         double temp = OSRand();
07751         if (conformant) temp = 0.5*temp;
07752 
07753         if      (temp <= 0.25) this->type = "stoppedByLimit";
07754         else if (temp <= 0.50) this->type = "stoppedByBounds";
07755         else if (temp <= 0.75) this->type = "";
07756         else                   this->type = "stoppedByPolice";
07757 
07758         if (OSRand() <= density) this->description = "random string";
07759 
07760         return true;
07761 }//OptimizationSolutionSubstatus::setRandom
07762 
07763 
07764 bool VariableSolution::setRandom(double density, bool conformant)
07765 {
07766 #ifdef DEBUG_OSRESULT
07767         cout << "Set random VariableSolution" << endl;
07768 #endif
07769         if (OSRand() <= density) 
07770         {
07771                 int n;
07772 
07773                 this->numberOfOtherVariableResults = (int)(1+4*OSRand());
07774 
07775                 if (conformant) n = this->numberOfOtherVariableResults;
07776                 else            n = (int)(1+4*OSRand());
07777 
07778                 other = new OtherVariableResult*[n];
07779         
07780                 for (int i = 0; i < n; i++)
07781                 {
07782                         other[i] = new OtherVariableResult();
07783                         other[i]->setRandom(density, conformant);
07784                 }
07785         }
07786 
07787         if (OSRand() <= density) 
07788         {
07789                 values = new VariableValues();
07790                 values->setRandom(density, conformant);
07791         }
07792 
07793         if (OSRand() <= density) 
07794         {
07795                 valuesString = new VariableValuesString();
07796                 valuesString->setRandom(density, conformant);
07797         }
07798 
07799         if (OSRand() <= density) 
07800         {
07801                 basisStatus = new BasisStatus();
07802                 basisStatus->setRandom(density, conformant, 0, 9);
07803         }
07804 
07805         return true;
07806 }//VariableSolution::setRandom
07807 
07808 bool VariableValues::setRandom(double density, bool conformant)
07809 {
07810 #ifdef DEBUG_OSRESULT
07811         cout << "Set random VariableValues" << endl;
07812 #endif
07813         int n;
07814 
07815         this->numberOfVar = (int)(1+4*OSRand());
07816 
07817         if (conformant) n = this->numberOfVar;
07818         else            n = (int)(1+4*OSRand());
07819 
07820         var = new VarValue*[n];
07821 
07822         for (int i = 0; i < n; i++)
07823         {
07824                 var[i] = new VarValue();
07825                 var[i]->setRandom(density, conformant);
07826         }
07827 
07828         return true;
07829 }//VariableValues::setRandom
07830 
07831 
07832 bool VarValue::setRandom(double density, bool conformant)
07833 {
07834 #ifdef DEBUG_OSRESULT
07835         cout << "Set random VarValue" << endl;
07836 #endif
07837         this->idx = (10*OSRand());
07838         if (OSRand() <= 0.5) this->value = 3.14156;
07839         else                 this->value = 2.71828;
07840 
07841         return true;
07842 }//VarValue::setRandom
07843 
07844 
07845 bool VariableValuesString::setRandom(double density, bool conformant)
07846 {
07847 #ifdef DEBUG_OSRESULT
07848         cout << "Set random VariableValuesString" << endl;
07849 #endif
07850         int n;
07851 
07852         this->numberOfVar = (int)(1+4*OSRand());
07853 
07854         if (conformant) n = this->numberOfVar;
07855         else            n = (int)(1+4*OSRand());
07856 
07857         var = new VarValueString*[n];
07858 
07859         for (int i = 0; i < n; i++)
07860         {
07861                 var[i] = new VarValueString();
07862                 var[i]->setRandom(density, conformant);
07863         }
07864 
07865         return true;
07866 }//VariableValuesString::setRandom
07867 
07868 
07869 bool VarValueString::setRandom(double density, bool conformant)
07870 {
07871 #ifdef DEBUG_OSRESULT
07872         cout << "Set random VarValueString" << endl;
07873 #endif
07874         this->idx = (10*OSRand());
07875         if (OSRand() <= 0.5) this->value = "random string";
07876         else                 this->value = "";
07877 
07878         return true;
07879 }//VarValueString::setRandom
07880 
07881 
07882 bool OtherVariableResult::setRandom(double density, bool conformant)
07883 {
07884 #ifdef DEBUG_OSRESULT
07885         cout << "Set random OtherVariableResult" << endl;
07886 #endif
07887         this->name = "random string";
07888         if (OSRand() <= density) this->value       = "random string"; 
07889         if (OSRand() <= density) this->description = "random string"; 
07890 
07891         if (OSRand() <= density) 
07892         {
07893                 if (OSRand() <= 0.5)
07894                 {
07895                         int n;
07896 
07897                         this->numberOfVar = (int)(1+4*OSRand());
07898 
07899                         if (conformant) n = this->numberOfVar;
07900                         else            n = (int)(1+4*OSRand());
07901 
07902                         var = new OtherVarResult*[n];
07903 
07904                         for (int i = 0; i < n; i++)
07905                         {
07906                                 var[i] = new OtherVarResult();
07907                                 var[i]->setRandom(density, conformant);
07908                         }
07909                 }
07910                 else
07911                 {
07912                         int n;
07913 
07914                         this->numberOfEnumerations = (int)(1+4*OSRand());
07915 
07916                         if (conformant) n = this->numberOfEnumerations;
07917                         else            n = (int)(1+4*OSRand());
07918 
07919                         enumeration = new OtherOptionEnumeration*[n];
07920 
07921                         for (int i = 0; i < n; i++)
07922                         {
07923                                 enumeration[i] = new OtherOptionEnumeration();
07924                                 enumeration[i]->setRandom(density, conformant, 0, 9);
07925                         }
07926                 }
07927         }
07928         
07929         return true;
07930 }//OtherVariableResult::setRandom
07931 
07932 
07933 bool OtherVarResult::setRandom(double density, bool conformant)
07934 {
07935 #ifdef DEBUG_OSRESULT
07936         cout << "Set random OtherVarResult" << endl;
07937 #endif
07938         this->idx = (10*OSRand());
07939         if (OSRand() <= 0.5) this->value = "random string";
07940         else                 this->value = "";
07941 
07942         return true;
07943 }//OtherVarResult::setRandom
07944 
07945 
07946 bool ObjectiveSolution::setRandom(double density, bool conformant)
07947 {
07948 #ifdef DEBUG_OSRESULT
07949         cout << "Set random ObjectiveSolution" << endl;
07950 #endif
07951         if (OSRand() <= density) 
07952         {
07953                 int n;
07954 
07955                 this->numberOfOtherObjectiveResults = (int)(1+4*OSRand());
07956 
07957                 if (conformant) n = this->numberOfOtherObjectiveResults;
07958                 else            n = (int)(1+4*OSRand());
07959 
07960                 other = new OtherObjectiveResult*[n];
07961         
07962                 for (int i = 0; i < n; i++)
07963                 {
07964                         other[i] = new OtherObjectiveResult();
07965                         other[i]->setRandom(density, conformant);
07966                 }
07967         }
07968 
07969 
07970         if (OSRand() <= density) 
07971         {
07972                 values = new ObjectiveValues();
07973                 values->setRandom(density, conformant);
07974         }
07975 
07976         if (OSRand() <= density) 
07977         {
07978                 basisStatus = new BasisStatus();
07979                 basisStatus->setRandom(density, conformant, -2, -1);
07980         }
07981 
07982         return true;
07983 }//ObjectiveSolution::setRandom
07984 
07985 
07986 bool ObjectiveValues::setRandom(double density, bool conformant)
07987 {
07988 #ifdef DEBUG_OSRESULT
07989         cout << "Set random ObjectiveValues" << endl;
07990 #endif
07991         int n;
07992 
07993         this->numberOfObj = (int)(1+4*OSRand());
07994 
07995         if (conformant) n = this->numberOfObj;
07996         else            n = (int)(1+4*OSRand());
07997 
07998         obj = new ObjValue*[n];
07999 
08000         for (int i = 0; i < n; i++)
08001         {
08002                 obj[i] = new ObjValue();
08003                 obj[i]->setRandom(density, conformant);
08004         }
08005 
08006         return true;
08007 }//ObjectiveValues::setRandom
08008 
08009 
08010 bool ObjValue::setRandom(double density, bool conformant)
08011 {
08012 #ifdef DEBUG_OSRESULT
08013         cout << "Set random ObjValue" << endl;
08014 #endif
08015         if (OSRand() <= 0.5) this->idx = -1;
08016         else                 this->idx = -2;
08017 
08018         if (OSRand() <= 0.5) this->value = 3.14156;
08019         else                 this->value = 2.71828;
08020 
08021         return true;
08022 }//ObjValue::setRandom
08023 
08024 
08025 bool OtherObjectiveResult::setRandom(double density, bool conformant)
08026 {
08027 #ifdef DEBUG_OSRESULT
08028         cout << "Set random OtherObjectiveResult" << endl;
08029 #endif
08030         this->name = "random string";
08031         if (OSRand() <= density) this->value       = "random string"; 
08032         if (OSRand() <= density) this->description = "random string"; 
08033 
08034         if (OSRand() <= density) 
08035         {
08036                 if (OSRand() <= 0.5)
08037                 {
08038                         int n;
08039 
08040                         this->numberOfObj = (int)(1+4*OSRand());
08041 
08042                         if (conformant) n = this->numberOfObj;
08043                         else            n = (int)(1+4*OSRand());
08044 
08045                         obj = new OtherObjResult*[n];
08046 
08047                         for (int i = 0; i < n; i++)
08048                         {
08049                                 obj[i] = new OtherObjResult();
08050                                 obj[i]->setRandom(density, conformant);
08051                         }
08052                 }
08053                 else
08054                 {
08055                         int n;
08056 
08057                         this->numberOfEnumerations = (int)(1+4*OSRand());
08058 
08059                         if (conformant) n = this->numberOfEnumerations;
08060                         else            n = (int)(1+4*OSRand());
08061 
08062                         enumeration = new OtherOptionEnumeration*[n];
08063 
08064                         for (int i = 0; i < n; i++)
08065                         {
08066                                 enumeration[i] = new OtherOptionEnumeration();
08067                                 enumeration[i]->setRandom(density, conformant, -2, -1);
08068                         }
08069                 }
08070         }
08071         
08072         return true;
08073 }//OtherObjectiveResult::setRandom
08074 
08075 
08076 bool OtherObjResult::setRandom(double density, bool conformant)
08077 {
08078 #ifdef DEBUG_OSRESULT
08079         cout << "Set random OtherObjResult" << endl;
08080 #endif
08081         if (OSRand() <= 0.5) this->idx = -1;
08082         else                 this->idx = -2;
08083 
08084         if (OSRand() <= 0.5) this->value = "random string";
08085         else                 this->value = "";
08086 
08087         return true;
08088 }//OtherObjResult::setRandom
08089 
08090 
08091 bool ConstraintSolution::setRandom(double density, bool conformant)
08092 {
08093 #ifdef DEBUG_OSRESULT
08094         cout << "Set random ConstraintSolution" << endl;
08095 #endif
08096         if (OSRand() <= density) 
08097         {
08098                 int n;
08099 
08100                 this->numberOfOtherConstraintResults = (int)(1+4*OSRand());
08101 
08102                 if (conformant) n = this->numberOfOtherConstraintResults;
08103                 else            n = (int)(1+4*OSRand());
08104 
08105                 other = new OtherConstraintResult*[n];
08106         
08107                 for (int i = 0; i < n; i++)
08108                 {
08109                         other[i] = new OtherConstraintResult();
08110                         other[i]->setRandom(density, conformant);
08111                 }
08112         }
08113 
08114         if (OSRand() <= density) 
08115         {
08116                 dualValues = new DualVariableValues();
08117                 dualValues->setRandom(density, conformant);
08118         }
08119 
08120         if (OSRand() <= density) 
08121         {
08122                 basisStatus = new BasisStatus();
08123                 basisStatus->setRandom(density, conformant, 0 ,4);
08124         }
08125 
08126         return true;
08127 }//ConstraintSolution::setRandom
08128 
08129         
08130 bool DualVariableValues::setRandom(double density, bool conformant)
08131 {
08132 #ifdef DEBUG_OSRESULT
08133         cout << "Set random DualVariableValues" << endl;
08134 #endif
08135         int n;
08136 
08137         this->numberOfCon = (int)(1+4*OSRand());
08138 
08139         if (conformant) n = this->numberOfCon;
08140         else            n = (int)(1+4*OSRand());
08141 
08142         con = new DualVarValue*[n];
08143 
08144         for (int i = 0; i < n; i++)
08145         {
08146                 con[i] = new DualVarValue();
08147                 con[i]->setRandom(density, conformant);
08148         }
08149 
08150         return true;
08151 }//DualVariableValues::setRandom
08152 
08153 bool DualVarValue::setRandom(double density, bool conformant)
08154 {
08155 #ifdef DEBUG_OSRESULT
08156         cout << "Set random DualVarValue" << endl;
08157 #endif
08158         this->idx = (5*OSRand());
08159         if (OSRand() <= 0.5) this->value = 3.14156;
08160         else                 this->value = 2.71828;
08161 
08162         return true;
08163 }//DualVarValue::setRandom
08164 
08165 bool OtherConstraintResult::setRandom(double density, bool conformant)
08166 {
08167 #ifdef DEBUG_OSRESULT
08168         cout << "Set random OtherConstraintResult" << endl;
08169 #endif
08170         this->name = "random string";
08171         if (OSRand() <= density) this->value       = "random string"; 
08172         if (OSRand() <= density) this->description = "random string"; 
08173 
08174         if (OSRand() <= density) 
08175         {
08176                 if (OSRand() <= 0.5)
08177                 {
08178                         int n;
08179 
08180                         this->numberOfCon = (int)(1+4*OSRand());
08181 
08182                         if (conformant) n = this->numberOfCon;
08183                         else            n = (int)(1+4*OSRand());
08184 
08185                         con = new OtherConResult*[n];
08186 
08187                         for (int i = 0; i < n; i++)
08188                         {
08189                                 con[i] = new OtherConResult();
08190                                 con[i]->setRandom(density, conformant);
08191                         }
08192                 }
08193                 else
08194                 {
08195                         int n;
08196 
08197                         this->numberOfEnumerations = (int)(1+4*OSRand());
08198 
08199                         if (conformant) n = this->numberOfEnumerations;
08200                         else            n = (int)(1+4*OSRand());
08201 
08202                         enumeration = new OtherOptionEnumeration*[n];
08203 
08204                         for (int i = 0; i < n; i++)
08205                         {
08206                                 enumeration[i] = new OtherOptionEnumeration();
08207                                 enumeration[i]->setRandom(density, conformant, 0, 4);
08208                         }
08209                 }
08210         }
08211         
08212         return true;
08213 }//OtherConstraintResult::setRandom
08214 
08215 
08216 bool OtherConResult::setRandom(double density, bool conformant)
08217 {
08218 #ifdef DEBUG_OSRESULT
08219         cout << "Set random OtherConResult" << endl;
08220 #endif
08221         this->idx = (5*OSRand());
08222         if (OSRand() <= 0.5) this->value = "random string";
08223         else                 this->value = "";
08224 
08225         return true;
08226 }//OtherConResult::setRandom
08227 
08228 
08229 bool OtherSolutionResults::setRandom(double density, bool conformant)
08230 {
08231 #ifdef DEBUG_OSRESULT
08232         cout << "Set random OtherSolutionResults" << endl;
08233 #endif
08234         numberOfOtherSolutionResults = (int)(4*OSRand());
08235 
08236         int n;
08237 
08238         if (conformant) n = this->numberOfOtherSolutionResults;
08239         else            n = (int)(4*OSRand());
08240 
08241         otherSolutionResult = new OtherSolutionResult*[n];
08242 
08243         for (int i = 0; i < n; i++)
08244         {
08245                 otherSolutionResult[i] = new OtherSolutionResult();
08246                 otherSolutionResult[i]->setRandom(density, conformant);
08247         }
08248 
08249         return true;
08250 }//OtherSolutionResults::setRandom
08251 
08252 bool OtherSolutionResult::setRandom(double density, bool conformant)
08253 {
08254 #ifdef DEBUG_OSRESULT
08255         cout << "Set random OtherSolutionResult" << endl;
08256 #endif
08257         name = "random string";
08258         numberOfItems = (int) (4*OSRand());
08259 
08260         if (OSRand() <= density) category    = "random string";
08261         if (OSRand() <= density) description = "random string";
08262 
08263         int n;
08264 
08265         if (conformant) n = this->numberOfItems;
08266         else            n = (int)(1+4*OSRand());
08267 
08268         if (n > 0 || OSRand() <= density)
08269         {
08270                 item = new std::string[n];
08271 
08272                 for (int i = 0; i < n; i++)
08273                         item[i] = "random string";
08274         }
08275 
08276         return true;
08277 }//OtherSolutionResult::setRandom
08278 
08279 
08280 bool OtherSolverOutput::setRandom(double density, bool conformant)
08281 {
08282 #ifdef DEBUG_OSRESULT
08283         cout << "Set random OtherSolverOutput" << endl;
08284 #endif
08285         int n;
08286 
08287         this->numberOfSolverOutputs = (int)(1+4*OSRand());
08288 
08289         if (conformant) n = this->numberOfSolverOutputs;
08290         else            n = (int)(1+4*OSRand());
08291 
08292         solverOutput = new SolverOutput*[n];
08293 
08294         for (int i = 0; i < n; i++)
08295         {
08296                 solverOutput[i] = new SolverOutput();
08297                 solverOutput[i]->setRandom(density, conformant);
08298         }
08299 
08300         return true;
08301 }//OtherSolverOutput::setRandom
08302 
08303 
08304 bool SolverOutput::setRandom(double density, bool conformant)
08305 {
08306 #ifdef DEBUG_OSRESULT
08307         cout << "Set random SolverOutput" << endl;
08308 #endif
08309         name = "random string";
08310         numberOfItems = (int) (4*OSRand());
08311 
08312         if (OSRand() <= density) category    = "random string";
08313         if (OSRand() <= density) description = "random string";
08314 
08315         int n;
08316 
08317         if (conformant) n = this->numberOfItems;
08318         else            n = (int)(1+4*OSRand());
08319 
08320         if (n > 0 || OSRand() <= density)
08321         {
08322                 item = new std::string[n];
08323 
08324                 for (int i = 0; i < n; i++)
08325                         item[i] = "random string";
08326         }
08327 
08328         return true;
08329 }//SolverOutput::setRandom

Generated on Thu Mar 31 03:13:07 2011 by  doxygen 1.4.7