Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

DC_BasicReconfigurer.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // DC_BasicReconfigurer.cpp 00005 // 00006 // Version 1.0 00007 // Date 13.05.03 (Version 1.1) 00008 // Author A. Pasetti (P&P Software) 00009 00010 #include "../GeneralInclude/CompilerSwitches.h" 00011 #include "../GeneralInclude/DebugSupport.h" 00012 #include "../GeneralInclude/Constants.h" 00013 #include "../GeneralInclude/ClassId.h" 00014 #include "../Base/CC_RootObject.h" 00015 #include "DC_BasicReconfigurer.h" 00016 00017 DC_BasicReconfigurer::DC_BasicReconfigurer(void) { 00018 setClassId(ID_BASICRECONFIGURER); 00019 numberOfConfig = 0; 00020 active = 0; 00021 enableStatus = ENABLED; 00022 isHealthy = pNULL; 00023 } 00024 00025 void DC_BasicReconfigurer::setActive(TD_Config activeConfig) { 00026 assert( isObjectConfigured() ); 00027 assert( activeConfig < numberOfConfig); 00028 00029 if ( activeConfig >= numberOfConfig ) { 00030 CC_RootObject::getEventRepository()->create(this,EVT_ILLEGAL_CONFIG); 00031 } else if ( active != activeConfig ) { 00032 active = activeConfig; 00033 CC_RootObject::getEventRepository()->create(this,EVT_RECONFIG); 00034 } 00035 } 00036 00037 void DC_BasicReconfigurer::reconfigure(void) { 00038 assert( isObjectConfigured() ); 00039 00040 if ( isEnabled() ) { 00041 for (TD_Config i=0; i<numberOfConfig; i++) { 00042 if ( (i!=active) && (isConfigurationHealthy(i)) ) { 00043 setHealthStatus(active,NOT_HEALTHY); 00044 active = i; 00045 CC_RootObject::getEventRepository()->create(this,EVT_RECONFIG); 00046 return; 00047 } 00048 } 00049 00050 CC_RootObject::getEventRepository()->create(this,EVT_RECONFIG_NO_HEALTHY); 00051 } 00052 else 00053 CC_RootObject::getEventRepository()->create(this,EVT_RECONFIG_DISABLED); 00054 } 00055 00056 void DC_BasicReconfigurer::setNumberOfConfigurations(TD_Config nOfConfig) { 00057 assert(numberOfConfig == 0); // should be called only once 00058 assert(nOfConfig > 0); 00059 00060 numberOfConfig = nOfConfig; 00061 isHealthy = new bool[numberOfConfig]; 00062 00063 active = 0; 00064 for (TD_Config i=0; i<numberOfConfig; i++) 00065 isHealthy[i] = HEALTHY; 00066 } 00067 00068 void DC_BasicReconfigurer::setHealthStatus(TD_Config i, bool healthStatus) { 00069 assert( isObjectConfigured() ); 00070 assert( i<numberOfConfig ); 00071 00072 if ( i<numberOfConfig ) 00073 isHealthy[i] = healthStatus; 00074 else 00075 CC_RootObject::getEventRepository()->create(this,EVT_ILLEGAL_CONFIG); 00076 } 00077 00078 bool DC_BasicReconfigurer::isConfigurationHealthy(TD_Config i) const { 00079 assert( isHealthy!=pNULL ); 00080 assert( i<numberOfConfig ); 00081 00082 return isHealthy[i]; 00083 } 00084 00085 void DC_BasicReconfigurer::setEnabled(bool enabled) { 00086 enableStatus = enabled; 00087 } 00088 00089 bool DC_BasicReconfigurer::isEnabled(void) const { 00090 return enableStatus; 00091 } 00092 00093 TD_Config DC_BasicReconfigurer::getActive(void) const { 00094 return active; 00095 } 00096 00097 TD_Config DC_BasicReconfigurer::getNumberOfConfigurations(void) const { 00098 return numberOfConfig; 00099 } 00100 00101 void DC_BasicReconfigurer::reset(void) { 00102 assert( isObjectConfigured() ); 00103 00104 active = 0; 00105 enableStatus = ENABLED; 00106 for (TD_Config i=0; i<numberOfConfig; i++) 00107 isHealthy[i] = HEALTHY; 00108 } 00109 00110 bool DC_BasicReconfigurer::isObjectConfigured(void) { 00111 return (CC_RootObject::isObjectConfigured() && numberOfConfig>0); 00112 } 00113
Copyright 2003 P&P Software GmbH - All Rights Reserved