00001 /********************************************************************** 00002 * Name: flag.h 00003 * 00004 * Designer: Willie Glover 00005 * 00006 * Created: 4/02/96 00007 * 00008 * Description: This file contains the LEGO header file which 00009 * defines the flag structure of the LEGO IR. 00010 * 00011 * Location: /ncsu/tinker/LEGO/src/base/flag.h 00012 * 00013 * 4/02/96 WTG: Added structure for flags. Used by op and graph. 00014 * 6/19/96 WTG: Change to class. Add method to add to list. 00015 * 12/5/96 WAH: Added copy constructor. 00016 **********************************************************************/ 00017 00018 #ifndef FLAG_H 00019 #define FLAG_H 00020 00021 // struct flags { 00022 // int name; // add enum table for flags 00023 // flags *nextFlagPtr; 00024 // }; 00025 00026 class flags { 00027 00028 int flagName; // See tinker.tab.h for flag values 00029 // Use char *ParseMap(int) to get ASCII 00030 flags *nextFlagPtr; // pointer to next flag entry 00031 00032 public: 00033 00034 flags(void) 00035 { 00036 // fprintf(stderr,"Creating FLAGS %p\n",this); 00037 flagName = 0; 00038 nextFlagPtr = NULL; 00039 } 00040 00041 flags(const flags &orig) 00042 { 00043 // fprintf(stderr,"Creating FLAGS %p\n",this); 00044 flagName = orig.flagName; 00045 if (orig.nextFlagPtr != NULL) 00046 nextFlagPtr = new flags (*(orig.nextFlagPtr)); 00047 else 00048 nextFlagPtr = NULL; 00049 } // end copy constructor 00050 00051 ~flags(void) 00052 { 00053 flags* tmpFlagPtr; 00054 while (nextFlagPtr != NULL) { 00055 tmpFlagPtr = nextFlagPtr; 00056 nextFlagPtr = tmpFlagPtr->nextFlagPtr; 00057 tmpFlagPtr->nextFlagPtr = NULL; 00058 delete tmpFlagPtr; 00059 } 00060 // fprintf(stderr,"Deleting FLAGS %p\n",this); 00061 } 00062 00063 int GetFlagName(void) { return flagName; } 00064 flags *GetNextFlagPtr(void) { return nextFlagPtr; } 00065 void SetFlagName(unsigned newFlag) {flagName = newFlag; } 00066 void SetNextFlagPtr(flags *newPtr) {nextFlagPtr = newPtr; } 00067 00068 /* 00069 * Add a flag to the current flag structure. If the last flag in the list is 00070 * uninitialized, update it with newFlag. Otherwise allocate a new entry 00071 * and update. 00072 */ 00073 00074 void AddFlag(unsigned newFlag) 00075 { 00076 if ( flagName == 0 ) { 00077 flagName = newFlag; 00078 return; 00079 } 00080 else { 00081 flags *tmpFlgPtr = this; 00082 while ( tmpFlgPtr->nextFlagPtr != NULL ) { 00083 tmpFlgPtr = tmpFlgPtr->nextFlagPtr; 00084 } 00085 tmpFlgPtr->nextFlagPtr = new flags(); 00086 tmpFlgPtr->nextFlagPtr->flagName = newFlag; 00087 tmpFlgPtr->nextFlagPtr->nextFlagPtr = NULL; 00088 } 00089 } 00090 }; 00091 00092 // ------------------------------------------------------------ 00093 // flag definitions 00094 // 00095 // 00096 // 00097 // 00098 // 00099 // 00100 // 00101 // 00102 // ------------------------------------------------------------ 00103 #endif
1.3.2