Ignore:
Timestamp:
04/09/15 23:51:28 (9 years ago)
Author:
Maciej Komosinski
Message:
  • explicit c_str() in SString instead of (const char*) cast
  • genetic converters and GenMan? are now thread-local which enables multi-threaded simulator separation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/genetics/geno.cpp

    r346 r348  
    77#include <frams/model/model.h>
    88
    9 GenoConvManager *Geno::converters = NULL;
    10 
    11 THREAD_LOCAL_DEF(Geno::Validators, geno_validators);
    12 
    13 Geno::Validators& Geno::getValidators() {return tlsGetRef(geno_validators);}
     9THREAD_LOCAL_DEF_PTR(Geno::Validators, geno_validators);
     10THREAD_LOCAL_DEF_PTR(GenoConvManager, geno_converters);
     11
     12Geno::Validators* Geno::getValidators() {return tlsGetPtr(geno_validators);}
     13GenoConvManager* Geno::getConverters() {return tlsGetPtr(geno_converters);}
     14
     15Geno::Validators* Geno::useValidators(Validators* val)
     16{return tlsSetPtr(geno_validators,val);}
     17GenoConvManager* Geno::useConverters(GenoConvManager* gcm)
     18{return tlsSetPtr(geno_converters,gcm);}
    1419
    1520void Geno::init(const SString& genstring, char genformat, const SString& genname, const SString& comment)
     
    7883        if (!name.len()) name = genname;
    7984        if (!txt.len()) txt = comment;
    80         multiline = (strchr((const char*)gen, '\n') != 0);
     85        multiline = (strchr(gen.c_str(), '\n') != 0);
    8186        // mapoutshift...?
    8287}
     
    237242        if (isvalid >= 0) return;
    238243        if (gen.len() == 0) { isvalid = 0; return; }
    239         Validators& vals=getValidators();
    240         FOREACH(GenoValidator*, v, vals)
     244        Validators* vals=getValidators();
     245        if (vals!=NULL)
     246                {
     247        FOREACH(GenoValidator*, v, (*vals))
    241248                if ((isvalid = v->testGenoValidity(*this)) >= 0)
    242249                        return;
     250                }
    243251        isvalid = 0;
    244252        FMprintf("Geno", "validate", FMLV_WARN, "Wrong configuration? No genotype validators defined for genetic format f%c.", format);
     
    255263        if (otherformat == getFormat()) { if (converter_missing) *converter_missing = false; return *this; }
    256264#ifndef NO_GENOCONVMANAGER
     265        GenoConvManager *converters=getConverters();
    257266        if (converters)
    258267        {
Note: See TracChangeset for help on using the changeset viewer.