Changeset 71 for cpp


Ignore:
Timestamp:
02/05/11 00:53:44 (14 years ago)
Author:
sz
Message:

optional external validators for Geno

Location:
cpp/gdk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpp/gdk/geno.cpp

    r66 r71  
    55#include "geno.h"
    66#include "model.h"
     7
     8SListTempl<GenoValidator*> Geno::validators;
    79
    810void Geno::init(const SString& genstring,int genformat,const SString& genname,const SString& comment)
     
    206208SString Geno::getComment(void) const {return txt;}
    207209
     210class ModelGenoValidator: public GenoValidator
     211{
     212public:
     213        ModelGenoValidator();
     214        int testGenoValidity(Geno& g);
     215};
     216
     217ModelGenoValidator::ModelGenoValidator()
     218{
     219Geno::validators+=this;
     220}
     221
     222int ModelGenoValidator::testGenoValidity(Geno& g)
     223{
     224if (g.getFormat()=='0')
     225        {
     226        Model mod(g);
     227        return mod.isValid();
     228        }
     229else
     230        {
     231        Geno f0geno=g.getConverted('0');
     232        return f0geno.isValid();
     233        }
     234}
     235
     236static ModelGenoValidator default_validator;
     237
    208238void Geno::validate()
    209239{
    210240if (isvalid>=0) return;
    211241if (gen.len()==0) { isvalid=0; return; }
    212 if (getFormat()=='0')
    213         {
    214         Model mod(*this);
    215         isvalid=mod.isValid();
    216         }
    217 else
    218         {
    219         Geno f0geno=getConverted('0');
    220         f0geno.validate();
    221         isvalid=f0geno.isvalid;
    222         }
     242FOREACH(GenoValidator*,v,validators)
     243        if ((isvalid=v->testGenoValidity(*this))>=0)
     244                break;
    223245}
    224246
  • cpp/gdk/geno.h

    r66 r71  
    1010
    1111class MultiMap;
     12class Geno;
     13
     14class GenoValidator
     15{
     16  public:
     17virtual int testGenoValidity(Geno& g)=0;/// -1=no information  0=invalid  1=valid
     18};
    1219
    1320/// basic information about a single genotype.
     
    96103
    97104void* owner;
     105static SListTempl<GenoValidator*> validators;
    98106};
    99107
Note: See TracChangeset for help on using the changeset viewer.