//------------------------------------------------------------------------------ bool GroundStation::SetStringParameter(const Integer id, const std::string & value) { if (id == STATION_ID) { if (IsValidID(value)) { stationId = value; return true; } else { AssetException ae; ae.SetDetails(errorMessageFormat.c_str(), value.c_str(), "Id", "Must begin with a letter; may contain letters, integers, dashes, underscores"); throw ae; } } // made changes by Tuan Nguyen if (id == ADD_HARDWARE) { // Only add the hardware if it is not in the list already if (find(hardwareNames.begin(), hardwareNames.end(), value) == hardwareNames.end()) { hardwareNames.push_back(value); } return true; } return GroundstationInterface::SetStringParameter(id, value); }
CXObject* CXObjectPool::GetObj( identifier id, guid type ) { object_handle &h = (object_handle&)id; if( IsValidID( id ) && m_pObjectPool[h.position]->IsTypeOf( type ) ) { return m_pObjectPool[h.position]; } return NULL; }
int main(void) { MAPDUMP DMap; int i = 0; DMap.Layer = 2; while (varinfo[i].ID != ENDOFLIST) { strcpy(DMap.FileName, "<path>/"); DMap.Resolution = i % 2; if (DMap.Resolution == 0) DMap.Resolution += 2; DMap.ID = varinfo[i].ID; if (IsValidID(DMap.ID)) { /* only added to test IsvalidID */ GetVarAttr(&DMap); printf("************************************************************\n"); printf("ID : %d\n", DMap.ID); printf("Name : %s\n", DMap.Name); printf("LongName : %s\n", DMap.LongName); printf("FileName : %s\n", DMap.FileName); printf("FileLabel : %s\n", DMap.FileLabel); printf("Format : %s\n", DMap.Format); printf("Units : %s\n", DMap.Units); printf("NumberType: %d\n", DMap.NumberType); printf("NLayers : %d\n", GetVarNLayers(DMap.ID, 2, 3)); printf("FileName : %s\n", DMap.FileName); printf("************************************************************\n"); i++; } } DMap.ID = -1; if (IsValidID(DMap.ID)) { /* only added to test IsvalidID */ GetVarAttr(&DMap); } else return EXIT_SUCCESS; printf("Error: the test program should not have reached this line\n"); return EXIT_FAILURE; }
/******************************************************************************* Function name: InitMapDump() Purpose : Initialize the map dumps. This information is in the [OUTPUT] section of the input file Required : LISTPTR Input - Linked list with input strings MAPSIZE *MapDump - Information about areal extent int MaxSoilLayers - Maximum number of soil layers int MaxVegLayers - Maximum number of vegetation layers char *Path - Directory to write output to int NTotalMapImages - Total number of maps and images to dump int NMaps - Number of maps to dump MAPDUMP **DMap - Array of maps and images to dump Returns : void Modifies : DMap and its members Comments : *******************************************************************************/ void InitMapDump(LISTPTR Input, MAPSIZE * Map, int MaxSoilLayers, int MaxVegLayers, char *Path, int TotalMapImages, int NMaps, MAPDUMP ** DMap) { char *Routine = "InitMapDump"; int i; /* counter */ int j; /* counter */ int MaxLayers; /* Maximum number of layers allowed for this variable */ char KeyName[map_date + 1][BUFSIZE + 1]; char *KeyStr[] = { "MAP VARIABLE", "MAP LAYER", "NUMBER OF MAPS", "MAP DATE", }; char *SectionName = "OUTPUT"; char VarStr[map_date + 1][BUFSIZE + 1]; if (!(*DMap = (MAPDUMP *)calloc(TotalMapImages, sizeof(MAPDUMP)))) ReportError(Routine, 1); for (i = 0; i < NMaps; i++) { /* Read the key-entry pairs from the input file */ for (j = 0; j <= nmaps; j++) { sprintf(KeyName[j], "%s %d", KeyStr[j], i + 1); GetInitString(SectionName, KeyName[j], "", VarStr[j], (unsigned long)BUFSIZE, Input); } /* Assign the entries to the appropriate variables */ if (!CopyInt(&((*DMap)[i].ID), VarStr[map_variable], 1)) ReportError(KeyName[map_variable], 51); if (!IsValidID((*DMap)[i].ID)) ReportError("Input Options File", 19); if (IsMultiLayer((*DMap)[i].ID)) { MaxLayers = GetVarNLayers((*DMap)[i].ID, MaxSoilLayers, MaxVegLayers); if (!CopyInt(&((*DMap)[i].Layer), VarStr[map_layer], 1)) ReportError(KeyName[map_layer], 51); if ((*DMap)[i].Layer < 1 || (*DMap)[i].Layer > MaxLayers) ReportError("Input Options File", 20); } else (*DMap)[i].Layer = 1; (*DMap)[i].Resolution = MAP_OUTPUT; strncpy((*DMap)[i].FileName, Path, BUFSIZE); GetVarAttr(&((*DMap)[i])); CreateMapFile((*DMap)[i].FileName, (*DMap)[i].FileLabel, Map); if (!CopyInt(&((*DMap)[i].N), VarStr[nmaps], 1)) ReportError(KeyName[nmaps], 51); if ((*DMap)[i].N < 1) ReportError("Input Options File", 22); if (!((*DMap)[i].DumpDate = (DATE *)calloc((*DMap)[i].N, sizeof(DATE)))) ReportError(Routine, 1); for (j = 0; j < (*DMap)[i].N; j++) { sprintf(KeyName[map_date], "%s %d %d", KeyStr[map_date], j + 1, i + 1); GetInitString(SectionName, KeyName[map_date], "", VarStr[map_date], (unsigned long)BUFSIZE, Input); if (!SScanDate(VarStr[map_date], &((*DMap)[i].DumpDate[j]))) ReportError(KeyName[map_date], 51); } (*DMap)[i].MinVal = 0.0; (*DMap)[i].MaxVal = 0.0; } }
/******************************************************************************* Function name: InitImageDump() Purpose : Initialize the image dumps. This information is in the [OUTPUT] section of the input file Required : LISTPTR Input - Linked list with input strings int Dt - Model timestep in seconds MAPSIZE *MapDump - Information about areal extent int MaxSoilLayers - Maximum number of soil layers int MaxVegLayers - Maximum number of vegetation layers char *Path - Directory to write output to int NMaps - Number of maps to dump int NImages - Number of images to dump MAPDUMP **DMap - Array of maps and images to dump Returns : void Modifies : Members of DMap Comments : InitImageDump must be preceded by a call to InitMapDump, since the necessary memory is allocated there *******************************************************************************/ void InitImageDump(LISTPTR Input, int Dt, MAPSIZE * Map, int MaxSoilLayers, int MaxVegLayers, char *Path, int NMaps, int NImages, MAPDUMP ** DMap) { char *Routine = "InitImageDump"; DATE End; /* End of low resolution map dump period */ DATE Start; /* Start of low resolution map dump period */ int i; /* counter */ int j; /* counter */ int Interval; /* Interval between low resolution map dumps */ int MaxLayers; /* Maximum number of layers allowed for this variable */ char KeyName[image_lower + 1][BUFSIZE + 1]; char *KeyStr[] = { "IMAGE VARIABLE", "IMAGE LAYER", "IMAGE START", "IMAGE END", "IMAGE INTERVAL", "IMAGE UPPER LIMIT", "IMAGE LOWER LIMIT" }; char *SectionName = "OUTPUT"; char VarStr[image_lower + 1][BUFSIZE + 1]; float tmpInterval; for (i = NMaps - NImages; i < NMaps; i++) { /* Read the key-entry pairs from the input file */ for (j = 0; j <= image_lower; j++) { sprintf(KeyName[j], "%s %d", KeyStr[j], i - (NMaps - NImages) + 1); GetInitString(SectionName, KeyName[j], "", VarStr[j], (unsigned long)BUFSIZE, Input); } /* Assign the entries to the appropriate variables */ if (!CopyInt(&((*DMap)[i].ID), VarStr[image_variable], 1)) ReportError(KeyName[image_variable], 51); if (!IsValidID((*DMap)[i].ID)) ReportError("Input Options File", 19); if (IsMultiLayer((*DMap)[i].ID)) { MaxLayers = GetVarNLayers((*DMap)[i].ID, MaxSoilLayers, MaxVegLayers); if (!CopyInt(&((*DMap)[i].Layer), VarStr[image_layer], 1)) ReportError(KeyName[image_layer], 51); if ((*DMap)[i].Layer < 1 || (*DMap)[i].Layer > MaxLayers) ReportError("Input Options File", 20); } else (*DMap)[i].Layer = 1; (*DMap)[i].Resolution = IMAGE_OUTPUT; strncpy((*DMap)[i].FileName, Path, BUFSIZE); GetVarAttr(&((*DMap)[i])); (*DMap)[i].NumberType = NC_BYTE; strcpy((*DMap)[i].Format, "%d"); CreateMapFile((*DMap)[i].FileName, (*DMap)[i].FileLabel, Map); if (!SScanDate(VarStr[image_start], &Start)) ReportError(KeyName[image_start], 51); if (!SScanDate(VarStr[image_end], &End)) ReportError(KeyName[image_end], 51); if (!CopyFloat(&tmpInterval, VarStr[image_interval], 1)) ReportError(KeyName[image_interval], 51); Interval = SECPHOUR * tmpInterval; if (Interval % Dt != 0 || Interval <= 0) ReportError("Input Options File", 24); if (((*DMap)[i].N = NumberOfSteps(&Start, &End, Interval)) < 1) ReportError("Input Options File", 25); if (!((*DMap)[i].DumpDate = (DATE *)calloc((*DMap)[i].N, sizeof(DATE)))) ReportError(Routine, 1); CopyDate(&((*DMap)[i].DumpDate[0]), &Start); for (j = 1; j < (*DMap)[i].N; j++) (*DMap)[i].DumpDate[j] = NextDate(&((*DMap)[i].DumpDate[j - 1]), Interval); if (!CopyFloat(&((*DMap)[i].MaxVal), VarStr[image_upper], 1)) ReportError(KeyName[image_upper], 51); if (!CopyFloat(&((*DMap)[i].MinVal), VarStr[image_lower], 1)) ReportError(KeyName[image_lower], 51); } }