source: cpp/frams/genetics/genoconv.h @ 145

Last change on this file since 145 was 145, checked in by sz, 6 years ago

Genetics reorganization (affects ALL applications!):

  • Converters/Validators? are now configured/initialized in a more verbose but also less confusing way
  • At the same time, the PreconfiguredGenetics? object will help you avoid the increased complexity by creating the ready-to-use environment that is sufficient in 99% of cases (see the demos)
  • Format F genetics updated (work in progress)
  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1// This file is a part of the Framsticks GDK.
2// Copyright (C) 2002-2014  Maciej Komosinski and Szymon Ulatowski.  See LICENSE.txt for details.
3// Refer to http://www.framsticks.com/ for further information.
4
5#ifndef _GENCONV_H_
6#define _GENCONV_H_
7
8#include "geno.h"
9#include <frams/param/param.h>
10#include <frams/util/list.h>
11#include <frams/util/sstring.h>
12
13#include <string>
14#include <vector>
15
16
17class GenoConvManager;
18
19class GenoConvParam: public Param
20{
21GenoConvManager *gcm;
22std::vector<std::string> gcnames;
23char tmp_id[20];
24void freetab();
25public:
26GenoConvParam(GenoConvManager *g);
27~GenoConvParam();
28void *getTarget(int);
29const char* id(int i);
30void updatetab();
31};
32
33class MultiMap;
34
35/// Base class for all Geno Converters.
36/// In constructor you have to set public fields
37/// indicating your identity and supported formats.
38/// Each converter serves one in-out format pair.
39/// Instance of your converter should be registered
40/// in GenoConvManager.
41class GenoConverter
42{
43public:
44const char *name;       //< converter name (short)
45char in_format,         //< input format, eg. '1'
46        out_format;     //< output format, eg. '0'
47const char *info;       //< detailed info about converter, format or copyright
48long enabled;   //< don't touch this! (used by configuration module)
49long mapsupport; //< set to 1 if your converter supports genotype mapping
50
51/// You have to reimplement this method.
52/// If your converter cannot do its job, return empty string
53/// (return SString();), any other return value is assumed
54/// to be output genotype.
55/// @param map if not null, mapping informaton is requested, converter should add conversion map to this object
56virtual SString convert(SString &i,MultiMap *map) {return SString();}
57
58virtual ~GenoConverter() {}
59/// Don't forget to set public fields in your constructor
60GenoConverter():name(""),in_format(-1),out_format('0'),info(""),enabled(1),mapsupport(0) {}
61};
62
63/// This class gathers abilities of all converters and can
64/// convert a genotype to any other one, provided there is
65/// a path of GenoConverters between them.
66/// In most cases you don't use this class directly,
67/// Geno::getConverted(int) provides full converting functionality.
68/// Explicit GenoConvManager object is only needed for registering
69/// your GenoConverter.
70/// Use DefaultGenoConvManager to register the standard genotype converters automatically.
71class GenoConvManager
72{
73friend class GenoConvParam;
74SList converters;
75public:
76GenoConvManager();
77~GenoConvManager();
78class GenoConvParam param;
79/// make a genotype in other format. genotype will be invalid
80/// if GenoConvManager cannot convert it.
81Geno convert(Geno &in,char format,MultiMap *map=0);
82/// register GenoConverter, the added object will be automatically deleted when GenoConvManager is destructed (call removeConverter() if this is not desirable)
83void addConverter(GenoConverter *conv);
84/// unregister GenoConverter
85void removeConverter(GenoConverter *conv);
86
87char *getPath(char in,char out,char *path,int maxlen,int *mapavailable=0);
88char *getFormatPath(char in,char out,char *path,int maxlen,int *mapavailable=0);
89/// returns the list of converters meeting the specified criteria
90/// pass result=0 if you only need one result (by return value)
91/// default criteria values mean "don't care", pass anything else to narrow your search
92GenoConverter *findConverters(SListTempl<GenoConverter*>* result=0,char in=-1,char out=-1,int enabled=-1,char* name=0);
93};
94
95#endif
96
97
Note: See TracBrowser for help on using the repository browser.