
00001 00009 #include "convcomlibmanager.h" 00010 00011 Strategy::Strategy() : PUP::able() { 00012 ComlibPrintf("Creating new strategy (Strategy constructor)\n"); 00013 myHandle = CkpvAccess(conv_com_object).insertStrategy(this); 00014 type = CONVERSE_STRATEGY; 00015 //converseStrategy = this; 00016 //higherLevel = this; 00017 isStrategyBracketed = 0; 00018 //destinationHandler = 0; 00019 } 00020 00021 //Each strategy must define his own Pup interface. 00022 void Strategy::pup(PUP::er &p){ 00023 00024 //PUP::able::pup(p); 00025 00026 p | isStrategyBracketed; 00027 p | type; 00028 //p | destinationHandler; 00029 p | myHandle; 00030 00031 /*if (p.isUnpacking()) { 00032 converseStrategy = this; 00033 higherLevel = this; 00034 }*/ 00035 } 00036 00037 //Message holder functions. Message holder is a wrapper around a 00038 //message. Has other useful data like destination processor list for a 00039 //multicast etc. 00040 00041 void MessageHolder::pup(PUP::er &p) { 00042 //PUP::able::pup(p); 00043 00044 p | dest_proc; 00045 p | isDummy; 00046 p | size; 00047 p | npes; 00048 00049 if(p.isUnpacking()) { 00050 data = (char *)CmiAlloc(size); 00051 00052 if(npes >0) 00053 pelist = new int[npes]; 00054 } 00055 00056 p(data, size); 00057 if(npes > 0) 00058 p(pelist, npes); 00059 else 00060 pelist = 0; 00061 } 00062 00063 StrategyWrapper::StrategyWrapper(int count) { 00064 nstrats = count; 00065 strategy = new Strategy* [nstrats]; 00066 position = new int[nstrats]; 00067 replace = new CmiBool[nstrats]; 00068 } 00069 00070 StrategyWrapper::~StrategyWrapper() { 00071 delete[] strategy; 00072 delete[] position; 00073 delete[] replace; 00074 } 00075 00076 void StrategyWrapper::pup (PUP::er &p) { 00077 p | nstrats; 00078 //p | total_nstrats; 00079 00080 if(p.isUnpacking()) { 00081 strategy = new Strategy* [nstrats]; 00082 position = new int[nstrats]; 00083 replace = new CmiBool[nstrats]; 00084 } 00085 00086 for(int count = 0; count < nstrats; ++count) { 00087 p | strategy[count]; 00088 p | position[count]; 00089 p | replace[count]; 00090 } 00091 } 00092 00093 00094 StrategyTableEntry::StrategyTableEntry() { 00095 lastKnownIteration = STARTUP_ITERATION; 00096 strategy = NULL; 00097 isNew = 0; 00098 isReady = 0; 00099 // WARNING: This constructor is called before CkMyPe() returns the correct results 00100 errorMode = NORMAL_MODE; 00101 errorModeServer = NORMAL_MODE_SERVER; 00102 discoveryMode = NORMAL_DISCOVERY_MODE; 00103 bracketedSetupFinished = 0; 00104 00105 numBufferReleaseReady = 0; 00106 00107 numElements = 0; 00108 nBeginItr = 0; 00109 nEndItr = 0; 00110 call_doneInserting = 0; 00111 00112 // values used during bracketed error/confirm mode 00113 nEndSaved = 0; 00114 totalEndCounted = 0; 00115 nProcSync = 0; 00116 00117 peConfirmCounter=0; 00118 total=0; 00119 00120 // initialize values used during the discovery process 00121 peList = NULL; 00122 } 00123 00124 //called during learning, when all fields except 00125 //strategy need to be zeroed out 00126 void StrategyTableEntry::reset() { 00127 numElements = 0; //used by the array listener, 00128 //could also be used for other objects 00129 //elementCount = 0; //Count of how many elements have deposited 00130 //their data 00131 nEndItr = 0; //#elements that called end iteration 00132 call_doneInserting = 0; 00133 } 00134 00135 00136 const char *StrategyTableEntry::errorModeString(){ 00137 switch(errorMode) { 00138 case NORMAL_MODE: 00139 return "NORMAL_MODE "; 00140 case ERROR_MODE: 00141 return "ERROR_MODE "; 00142 case CONFIRM_MODE: 00143 return "CONFIRM_MODE "; 00144 case ERROR_FIXED_MODE: 00145 return "ERROR_FIXED_MODE "; 00146 default: 00147 return "Unknown Error Mode"; 00148 } 00149 } 00150 00151 00152 const char *StrategyTableEntry::errorModeServerString(){ 00153 if(CkMyPe() == 0){ 00154 switch(errorModeServer) { 00155 case NORMAL_MODE_SERVER: 00156 return "NORMAL_MODE_SERVER "; 00157 case ERROR_MODE_SERVER: 00158 return "ERROR_MODE_SERVER "; 00159 case CONFIRM_MODE_SERVER: 00160 return "CONFIRM_MODE_SERVER "; 00161 case ERROR_FIXED_MODE_SERVER: 00162 return "ERROR_FIXED_MODE_SERVER"; 00163 case NON_SERVER_MODE_SERVER: 00164 return "NON_SERVER_MODE_SERVER "; 00165 default: 00166 return "Unknown Server Error Mode"; 00167 } 00168 } else { 00169 return ""; 00170 } 00171 } 00172 00173 const char *StrategyTableEntry::discoveryModeString(){ 00174 switch(discoveryMode) { 00175 case NORMAL_DISCOVERY_MODE: 00176 return "NORMAL_DISCOVERY_MODE "; 00177 case STARTED_DISCOVERY_MODE: 00178 return "STARTED_DISCOVERY_MODE "; 00179 case FINISHED_DISCOVERY_MODE: 00180 return "FINISHED_DISCOVERY_MODE"; 00181 default: 00182 return "Unknown Discovery Mode "; 00183 } 00184 } 00185 00186 00187 00188 00189 00190 00191 //PUPable_def(Strategy); 00192 PUPable_def(MessageHolder) 00193 00194 //CsvDeclare(int, pipeBcastPropagateHandle); 00195 //CsvDeclare(int, pipeBcastPropagateHandle_frag); 00196 00197
1.5.5