bool BuildHandler::DoInitialBuildOrders () { // initial build orders completed? assert (config.InitialOrders); if (initialBuildOrderTask) return true; for (int a=0;a<initialBuildOrderState.size();a++) { int &state = initialBuildOrderState[a]; if (state < config.InitialOrders->builds[a]->count) { int type=-1; int id=config.InitialOrders->builds[a]->def; BuildTable::UDef *cd = buildTable.GetCachedDef(id); CfgList* info = config.InitialOrders->builds[a]->info; const char *handler = info ? info->GetLiteral ("Handler") : 0; if (handler) { for (int h=0;h<NUM_TASK_TYPES;h++) { if(!STRCASECMP(handler, handlerStr[h])) { type=h; break; } } if (h == BTF_Force) { ChatMsgPrintf (ai->cb, "Error: No force units possible in the initial build orders.\n"); state=config.InitialOrders->builds[a]->count; return false; } } else { if(!cd->IsBuilder()) { ChatMsgPrintf (ai->cb, "Error in initial buildorder list: unit %s is not a builder\n", cd->name.c_str()); state=config.InitialOrders->builds[a]->count; return false; } } aiTask *t = initialBuildOrderTask = AddTask (buildTable.GetDef(id), type); t->MarkAllocated (); state ++; return true; } } // all initial build tasks are done if (!initialBuildOrdersFinished) { ChatDebugPrintf (ai->cb,"Initial build orders finished."); DistributeResources (); initialBuildOrdersFinished=true; } return false; }
Genome::Genome(std::string file) { filename = file; CfgList* d = CfgList::LoadFile(file); // read sequence data const char* seqfile = d->GetLiteral("SequenceFile"); std::string seqPath = GetDirPath(file) + seqfile; sequence = ReadTextFile(seqPath); std::transform(sequence.begin(), sequence.end(), sequence.begin(), ::tolower); // load global properties name = d->GetLiteral("LocusName"); topology = d->GetLiteral("LocusTopology"); modificationDate = d->GetLiteral("LocusModificationDate"); definition = d->GetLiteral("Definition"); source = d->GetLiteral("Source"); // load features CfgList* features = d->GetList("features"); mvec<FeatureProtein*> proteins = LoadFeatureList<FeatureProtein>(features->GetList("CDS")); members_ptr(proteins, &FeatureProtein::type) |= FeatureProtein::Type_Protein; mvec<Feature*> tRNA = LoadFeatureList<Feature>(features->GetList("tRNA")); members_ptr(tRNA, &Feature::type) |= Feature::Type_tRNA; mvec<Feature*> rRNA = LoadFeatureList<Feature>(features->GetList("rRNA")); members_ptr(rRNA, &Feature::type) |= Feature::Type_rRNA; mvec<Feature*> misc_RNA = LoadFeatureList<Feature>(features->GetList("misc_RNA")); members_ptr(misc_RNA, &Feature::type) |= Feature::Type_MiscRNA; mvec<Feature*> misc_feature = LoadFeatureList<Feature>(features->GetList("misc_feature")); members_ptr(misc_feature, &Feature::type) |= Feature::Type_MiscFeature; genes = tRNA & rRNA & misc_RNA & misc_feature & proteins; // sort genes std::sort(genes.begin(), genes.end(), GeneComparer); delete d; }