Changeset 346 for cpp/frams


Ignore:
Timestamp:
04/07/15 04:20:14 (9 years ago)
Author:
Maciej Komosinski
Message:

Each thread can use its own simulator's GenMan?

Location:
cpp/frams/genetics
Files:
3 edited

Legend:

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

    r286 r346  
    77#include <frams/model/model.h>
    88
    9 SListTempl<GenoValidator*> Geno::validators;
    109GenoConvManager *Geno::converters = NULL;
     10
     11THREAD_LOCAL_DEF(Geno::Validators, geno_validators);
     12
     13Geno::Validators& Geno::getValidators() {return tlsGetRef(geno_validators);}
    1114
    1215void Geno::init(const SString& genstring, char genformat, const SString& genname, const SString& comment)
     
    234237        if (isvalid >= 0) return;
    235238        if (gen.len() == 0) { isvalid = 0; return; }
    236         FOREACH(GenoValidator*, v, validators)
     239        Validators& vals=getValidators();
     240        FOREACH(GenoValidator*, v, vals)
    237241                if ((isvalid = v->testGenoValidity(*this)) >= 0)
    238242                        return;
  • cpp/frams/genetics/geno.h

    r286 r346  
    5454
    5555public:
     56        typedef SListTempl<GenoValidator*> Validators;
     57
    5658        /// create a genotype object from primitives
    5759        /// @param genstring pure genotype, without any comments
     
    116118
    117119        // managing global Geno-related objects (used for validation and conversion)
    118         static void addValidator(GenoValidator* gv) { validators += gv; }
    119         static void removeValidator(GenoValidator* gv) { validators -= gv; }
     120        static Validators& getValidators();
     121        static void addValidator(GenoValidator* gv,int at_position=9999) { getValidators().insert(at_position,gv); }
     122        static void removeValidator(GenoValidator* gv) { getValidators() -= gv; }
    120123        static void useConverters(GenoConvManager& gcm) { converters = &gcm; }
    121124        static GenoConvManager &getConverters() { return *converters; }
    122125protected:
    123126        static GenoConvManager *converters;
    124         static SListTempl<GenoValidator*> validators;
    125127};
    126128
  • cpp/frams/genetics/preconfigured.h

    r286 r346  
    3030};
    3131
     32/** Initialization procedure for applications adding their own validators */
     33class PreconfiguredGenetics_NoValidators
     34{
     35  public:
     36DefaultGenoConvManager gcm;
     37
     38PreconfiguredGenetics_NoValidators()
     39        {
     40        gcm.addDefaultConverters(); //without converters, the application would only handle "format 0" genotypes
     41        Geno::useConverters(gcm);
     42        }
     43};
     44
    3245#endif
    3346
Note: See TracChangeset for help on using the changeset viewer.