static void s_InitializeECNumberMaps(void) { CFastMutexGuard GUARD(s_ECNumberMutex); if (s_ECNumberMapsInitialized) { return; } string dir; const char* env_val = NULL; env_val = getenv("NCBI_ECNUM_USE_DATA_DIR_FIRST"); if (env_val != NULL && NStr::EqualNocase(env_val, "TRUE")) { string file = g_FindDataFile("ecnum_specific.txt"); if ( !file.empty() ) { dir = CDirEntry::AddTrailingPathSeparator(CDirEntry(file).GetDir()); } if (dir.empty()) { ERR_POST_X(2, Info << "s_InitializeECNumberMaps: " "falling back on built-in data."); } } #define LOAD_EC(x) s_LoadECNumberTable \ (dir, #x, kECNum_##x, sizeof(kECNum_##x) / sizeof(*kECNum_##x), \ CProt_ref::eEC_##x) s_ECNumSpecificStatus = LOAD_EC(specific); s_ECNumAmbiguousStatus = LOAD_EC(ambiguous); s_ECNumReplacedStatus = LOAD_EC(replaced); s_ECNumDeletedStatus = LOAD_EC(deleted); #undef LOAD_EC s_ECNumberMapsInitialized = true; }
static void s_InitializeECNumberMaps(void) { CFastMutexGuard GUARD(s_ECNumberMutex); if (s_ECNumberMapsInitialized) { return; } string dir; {{ string file = g_FindDataFile("ecnum_specific.txt"); if ( !file.empty() ) { dir = CDirEntry::AddTrailingPathSeparator(CDirEntry(file).GetDir()); } }} if (dir.empty()) { ERR_POST_X(2, Info << "s_InitializeECNumberMaps: " "falling back on built-in data."); } #define LOAD_EC(x) s_LoadECNumberTable \ (dir, #x, kECNum_##x, sizeof(kECNum_##x) / sizeof(*kECNum_##x), \ CProt_ref::eEC_##x) LOAD_EC(specific); LOAD_EC(ambiguous); LOAD_EC(replaced); LOAD_EC(deleted); #undef LOAD_EC s_ECNumberMapsInitialized = true; }
static void s_InitializeOrganelleProductRules(void) { CFastMutexGuard GUARD(s_OrganelleProductRulesMutex); if (s_OrganelleProductRulesInitialized) { return; } s_OrganelleProductRules.Reset(new CSuspect_rule_set()); string file = g_FindDataFile("organelle_products.prt"); if ( !file.empty() ) { auto_ptr<CObjectIStream> in; in.reset(CObjectIStream::Open(file, eSerial_AsnText)); string header = in->ReadFileHeader(); in->Read(ObjectInfo(*s_OrganelleProductRules), CObjectIStream::eNoFileHeader); } if (!s_OrganelleProductRules->IsSet()) { size_t num_lines = sizeof (s_Defaultorganelleproducts) / sizeof (char *); string all_rules = ""; for (size_t i = 0; i < num_lines; i++) { all_rules += s_Defaultorganelleproducts[i]; } CNcbiIstrstream istr(all_rules.c_str()); istr >> MSerial_AsnText >> *s_OrganelleProductRules; }