00001 /*------------------------------------------------------------------- 00002 * File: opEdges.H 00003 * 00004 * Designer: Willie Glover 00005 * 00006 * Description: opEdges is the base class which defines the arcs 00007 * between the region nodes 00008 * 00009 * 00010 * 12/05/96 WAH: Added copy constructor. 00011 * 2/27/97 WAH: Fixed ~opEdges to delete edgeAttrListPtr and 00012 * nextOpEdgePtr too. 00013 * 4/25/97 WAH: Added mark field and associated methods. 00014 * 5/21/97 WAH: Fixed newToOpId parameter of copy constructor (was NULL). 00015 * 8/1/97 WAH: Changed short mark to long long markfield; altered 00016 * methods to use constants EM_*; added UnmarkAll. 00017 * 9/4/97 WAH: Switched to enums in globals.H. 00018 * 9/9/97 WAH: Changed EM_EXIT to EM_LOOPEXIT; removed EM_INNER and 00019 * EM_OUTER. 00020 *--------------------------------------------------------------------*/ 00021 #ifndef OPEDGES_H 00022 #define OPEDGES_H 00023 00024 // The following #defines are used to mark an edge as a backedge or 00025 // whatever. To mark a region, call Mark with one of the following 00026 // parameters. To unmark it, call Unmark. To clear all marks, 00027 // call UnmarkAll. To check a mark, call IsMarked. 00028 #define EM_GENERAL ((long long) 0x1) 00029 #define EM_BACK ((long long) 0x2) 00030 #define EM_LOOPEXIT ((long long) 0x4) 00031 00032 class legoOp; 00033 //class attrList; 00034 #include "attrList.H" 00035 00036 class opEdges { 00037 enum edgeTypes edgeType; // see enumeration below (also in globals.H) 00038 int edgeId; // edge ID 00039 int oldEdgeId; // original edge ID from REBEL input 00040 int fromOpId; // from op ID 00041 legoOp *fromOpPtr; // from op ptr 00042 int srcPort; 00043 int altSrcPort; 00044 enum portTypes srcPortType; // see enumeration below (also in globals.H) 00045 int toOpId; // to op ID 00046 legoOp *toOpPtr; // to op ptr 00047 int destPort; 00048 int altDestPort; 00049 enum portTypes destPortType; // see enumeration below (also in globals.H) 00050 enum usageTypes edgeUsage; // see enumeration below (globals.H) 00051 enum statusTypes edgeStatus; // see enumeration below (globals.H) 00052 int edgeLat; // MAX_INT if undefined 00053 int edgeOmega; // MAX_INT if undefined 00054 attrList *edgeAttrListPtr; // ptr to list of attributes 00055 long long markfield; 00056 opEdges *nextOpEdgePtr; 00057 00058 public: 00059 opEdges(void) 00060 { 00061 // fprintf(stderr,"Creating OPEDGES %p\n",this); 00062 edgeType = ET_UNDEF; 00063 edgeId = -1; 00064 oldEdgeId = 0; 00065 fromOpId = 0; 00066 fromOpPtr = NULL; 00067 srcPort = 0; 00068 altSrcPort = 0; 00069 srcPortType = PT_UNDEF; 00070 toOpId = 0; 00071 toOpPtr = NULL; 00072 destPort = 0; 00073 altDestPort = 0; 00074 destPortType = PT_UNDEF; 00075 edgeUsage = USAGE_UNDEF; 00076 edgeStatus = STATUS_CERTAIN; 00077 edgeLat = MAX_INT; 00078 edgeOmega = MAX_INT; 00079 edgeAttrListPtr = NULL; 00080 markfield = (long long) 0; 00081 nextOpEdgePtr = NULL; 00082 } 00083 opEdges(const opEdges &orig, int newEdgeId = -1, int newFromOpId = -1, 00084 legoOp *newFromOpPtr = NULL, int newToOpId = -1, 00085 legoOp *newToOpPtr = NULL) 00086 { 00087 // fprintf(stderr,"Creating OPEDGES %p\n",this); 00088 edgeType = orig.edgeType; 00089 if (newEdgeId != -1) 00090 edgeId = newEdgeId; 00091 else 00092 edgeId = orig.edgeId; // will be changed anyway 00093 oldEdgeId = orig.oldEdgeId; 00094 if (newFromOpId != -1) 00095 fromOpId = newFromOpId; 00096 else 00097 fromOpId = orig.fromOpId; // will be changed anyway 00098 if (newFromOpPtr != NULL) 00099 fromOpPtr = newFromOpPtr; 00100 else 00101 fromOpPtr = orig.fromOpPtr; // will be changed anyway 00102 srcPort = orig.srcPort; 00103 altSrcPort = orig.altSrcPort; 00104 srcPortType = orig.srcPortType; 00105 if (newToOpId != -1) 00106 toOpId = newToOpId; 00107 else 00108 toOpId = orig.toOpId; // will be changed anyway 00109 if (newToOpPtr != NULL) 00110 toOpPtr = newToOpPtr; 00111 else 00112 toOpPtr = orig.toOpPtr; // will be changed anyway 00113 destPort = orig.destPort; 00114 altDestPort = orig.altDestPort; 00115 destPortType = orig.destPortType; 00116 edgeUsage = orig.edgeUsage; 00117 edgeStatus = orig.edgeStatus; 00118 edgeLat = orig.edgeLat; 00119 edgeOmega = orig.edgeOmega; 00120 if (orig.edgeAttrListPtr != NULL) 00121 edgeAttrListPtr = new attrList (*(orig.edgeAttrListPtr)); 00122 else 00123 edgeAttrListPtr = NULL; 00124 markfield = orig.markfield; 00125 nextOpEdgePtr = NULL; // will be changed anyway 00126 } // end copy constructor 00127 ~opEdges(void) 00128 { 00129 opEdges *temp; 00130 00131 delete edgeAttrListPtr; 00132 while (nextOpEdgePtr != NULL) 00133 { 00134 temp = nextOpEdgePtr; 00135 nextOpEdgePtr = temp->nextOpEdgePtr; 00136 temp->nextOpEdgePtr = NULL; 00137 delete temp; 00138 } // end while 00139 // fprintf(stderr,"Deleting OPEDGES %p\n",this); 00140 } // end destructor 00141 00142 /*------------------------------------------------------------------- 00143 * Get edgeType 00144 *-------------------------------------------------------------------*/ 00145 enum edgeTypes GetEdgeType(void) { return edgeType; } 00146 00147 /*------------------------------------------------------------------- 00148 * Get edgeId 00149 *-------------------------------------------------------------------*/ 00150 int GetEdgeId(void) { return edgeId; } 00151 00152 /*------------------------------------------------------------------- 00153 * Get oldEdgeId 00154 *-------------------------------------------------------------------*/ 00155 int GetOldEdgeId(void) { return oldEdgeId; } 00156 00157 /*------------------------------------------------------------------- 00158 * Get fromOpId 00159 *-------------------------------------------------------------------*/ 00160 int GetFromOpId(void) { return fromOpId; } 00161 00162 /*------------------------------------------------------------------- 00163 * Get fromOpPtr 00164 *-------------------------------------------------------------------*/ 00165 legoOp *GetFromOpPtr(void) { return fromOpPtr; } 00166 00167 /*------------------------------------------------------------------- 00168 * Get srcPort 00169 *-------------------------------------------------------------------*/ 00170 int GetSrcPort(void) { return srcPort; } 00171 00172 /*------------------------------------------------------------------- 00173 * Get altSrcPort 00174 *-------------------------------------------------------------------*/ 00175 int GetAltSrcPort(void) { return altSrcPort; } 00176 00177 /*------------------------------------------------------------------- 00178 * Get srcPortType 00179 *-------------------------------------------------------------------*/ 00180 enum portTypes GetSrcPortType(void) { return srcPortType; } 00181 00182 /*------------------------------------------------------------------- 00183 * Get toOpId 00184 *-------------------------------------------------------------------*/ 00185 int GetToOpId(void) { return toOpId; } 00186 00187 /*------------------------------------------------------------------- 00188 * Get toOpPtr 00189 *-------------------------------------------------------------------*/ 00190 legoOp *GetToOpPtr(void) { return toOpPtr; } 00191 00192 /*------------------------------------------------------------------- 00193 * Get destPort 00194 *-------------------------------------------------------------------*/ 00195 int GetDestPort(void) { return destPort; } 00196 00197 /*------------------------------------------------------------------- 00198 * Get altDestPort 00199 *-------------------------------------------------------------------*/ 00200 int GetAltDestPort(void) { return altDestPort; } 00201 00202 /*------------------------------------------------------------------- 00203 * Get destPortType 00204 *-------------------------------------------------------------------*/ 00205 enum portTypes GetDestPortType(void) { return destPortType; } 00206 00207 /*------------------------------------------------------------------- 00208 * Get edgeUsage 00209 *-------------------------------------------------------------------*/ 00210 enum usageTypes GetEdgeUsage(void) { return edgeUsage; } 00211 00212 /*------------------------------------------------------------------- 00213 * Get edgeStatus 00214 *-------------------------------------------------------------------*/ 00215 enum statusTypes GetEdgeStatus(void) { return edgeStatus; } 00216 00217 /*------------------------------------------------------------------- 00218 * Get edgeLat 00219 *-------------------------------------------------------------------*/ 00220 int GetEdgeLat(void) { return edgeLat; } 00221 00222 /*------------------------------------------------------------------- 00223 * Get edgeOmega 00224 *-------------------------------------------------------------------*/ 00225 int GetEdgeOmega(void) { return edgeOmega; } 00226 00227 /*------------------------------------------------------------------- 00228 * Get edgeAttrListPtr 00229 *-------------------------------------------------------------------*/ 00230 attrList *GetEdgeAttrListPtr(void) { return edgeAttrListPtr; } 00231 00232 /*------------------------------------------------------------------- 00233 * Get nextOpEdgePtr 00234 *-------------------------------------------------------------------*/ 00235 opEdges *GetNextOpEdgePtr(void) { return nextOpEdgePtr; } 00236 00237 /*------------------------------------------------------------------- 00238 * Set edgeType 00239 *-------------------------------------------------------------------*/ 00240 void SetEdgeType(enum edgeTypes newType) { edgeType = newType; } 00241 00242 /*------------------------------------------------------------------- 00243 * Set edgeId 00244 *-------------------------------------------------------------------*/ 00245 void SetEdgeId(int newId) { edgeId = newId; } 00246 00247 /*------------------------------------------------------------------- 00248 * Set oldEdgeId 00249 *-------------------------------------------------------------------*/ 00250 void SetOldEdgeId(int newId) { oldEdgeId = newId; } 00251 00252 /*------------------------------------------------------------------- 00253 * Set fromOpId 00254 *-------------------------------------------------------------------*/ 00255 void SetFromOpId(int newFromOpId) { fromOpId = newFromOpId; } 00256 00257 /*------------------------------------------------------------------- 00258 * Set fromOpPtr 00259 *-------------------------------------------------------------------*/ 00260 void SetFromOpPtr(legoOp* newFromOpPtr) { fromOpPtr = newFromOpPtr; } 00261 00262 /*------------------------------------------------------------------- 00263 * Set srcPort 00264 *-------------------------------------------------------------------*/ 00265 void SetSrcPort(int newPort) { srcPort = newPort; } 00266 00267 /*------------------------------------------------------------------- 00268 * Set altSrcPort 00269 *-------------------------------------------------------------------*/ 00270 void SetAltSrcPort(int newPort) { altSrcPort = newPort; } 00271 00272 /*------------------------------------------------------------------- 00273 * Set srcPortType 00274 *-------------------------------------------------------------------*/ 00275 void SetSrcPortType(enum portTypes newType) { srcPortType = newType; } 00276 00277 /*------------------------------------------------------------------- 00278 * Set toOpId 00279 *-------------------------------------------------------------------*/ 00280 void SetToOpId(int newToOpId) { toOpId = newToOpId; } 00281 00282 /*------------------------------------------------------------------- 00283 * Set toOpPtr 00284 *-------------------------------------------------------------------*/ 00285 void SetToOpPtr(legoOp* newToOpPtr) { toOpPtr = newToOpPtr; } 00286 00287 /*------------------------------------------------------------------- 00288 * Set destPort 00289 *-------------------------------------------------------------------*/ 00290 void SetDestPort(int newPort) { destPort = newPort; } 00291 00292 /*------------------------------------------------------------------- 00293 * Set altDestPort 00294 *-------------------------------------------------------------------*/ 00295 void SetAltDestPort(int newPort) { altDestPort = newPort; } 00296 00297 /*------------------------------------------------------------------- 00298 * Set destPortType 00299 *-------------------------------------------------------------------*/ 00300 void SetDestPortType(enum portTypes newType) { destPortType = newType; } 00301 00302 /*------------------------------------------------------------------- 00303 * Set edgeUsage 00304 *-------------------------------------------------------------------*/ 00305 void SetEdgeUsage(enum usageTypes newUsage) { edgeUsage = newUsage; } 00306 00307 /*------------------------------------------------------------------- 00308 * Set edgeStatus 00309 *-------------------------------------------------------------------*/ 00310 void SetEdgeStatus(enum statusTypes newStatus) { edgeStatus = newStatus; } 00311 00312 /*------------------------------------------------------------------- 00313 * Set edgeLat 00314 *-------------------------------------------------------------------*/ 00315 void SetEdgeLat(int newLat) { edgeLat = newLat; } 00316 00317 /*------------------------------------------------------------------- 00318 * Set edgeOmega 00319 *-------------------------------------------------------------------*/ 00320 void SetEdgeOmega(int newOmega) { edgeOmega = newOmega; } 00321 00322 /*------------------------------------------------------------------- 00323 * Set edgeAttrListPtr 00324 *-------------------------------------------------------------------*/ 00325 void SetEdgeAttrListPtr(attrList* newAttrListPtr) 00326 { edgeAttrListPtr = newAttrListPtr; } 00327 00328 /*------------------------------------------------------------------- 00329 * Set nextOpEdgePtr 00330 *-------------------------------------------------------------------*/ 00331 void SetNextOpEdgePtr(opEdges* newNext) 00332 { nextOpEdgePtr = newNext; } 00333 00334 // ---------------------------------------------------------------- 00335 // edgeType portType usage status 00336 // 00337 // 0=ET_UNDEF 0=PT_UNDEF 0=USAGE_UNDEF 0=STATUS_UNDEF 00338 // 1=ET_CNTL 1=PT_FIRST 1=USAGE_SEM 1=STATUS_CERTAIN 00339 // 2=ET_REGFLOW 2=PT_CTL 2=USAGE_ANN 2=STATUS_MAYBE 00340 // 3=ET_REGANTI 3=PT_MEM 00341 // 4=ET_REGOUT 4=PT_SRC 00342 // 5=ET_MEM 5=PT_DEST 00343 // ---------------------------------------------------------------- 00344 00345 void Mark (long long m) {markfield |= m; return;} 00346 void Unmark (long long m) {markfield &= (~m); return;} 00347 void UnmarkAll (void) {markfield = (long long) 0; return;} 00348 int IsMarked (long long m) {return ((markfield & m) != (long long) 0);} 00349 00350 }; 00351 #endif // OPEDGES_H
1.3.2