source: cpp/frams/vm/classes/genoobj.cpp @ 171

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

getObjectTarget is now the recommended way to retrieve object from ExtValue?, can post the standard warning message about missing object

  • Property svn:eol-style set to native
File size: 3.8 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#include "genoobj.h"
6#include <frams/util/extvalue.h>
7#include <frams/model/autoname.h>
8
9#define FIELDSTRUCT GenoObj
10ParamEntry geno_paramtab[]=
11{
12{"Geno",1,12,"Geno","All information about a single genotype.\nThis is a genetics-only object which does not contain any performance data. See also: Genotype class"},
13{"name",0,PARAM_NOSTATIC,"Name","s 0 40",GETSET(name),},
14{"rawgenotype",0,PARAM_NOSTATIC+PARAM_READONLY,"Raw genotype","s 1",GETONLY(genotype),"Genotype, excluding the format specifier"},
15{"info",0,PARAM_NOSTATIC,"Info","s 1",GETSET(info),"Additional information or comments",},
16{"format",0,PARAM_NOSTATIC+PARAM_READONLY,"Format","d",GETONLY(format),"Genotype format",},
17{"genotype",0,PARAM_NOSTATIC+PARAM_READONLY,"Genotype","s 1",GETONLY(string),},
18{"isValid",0,PARAM_NOSTATIC+PARAM_READONLY,"Valid","d 0 1",GETONLY(isvalid),},
19{"getConverted",0,PARAM_NOSTATIC,"get converted genotype","p oGeno(d format)",PROCEDURE(p_getconvert),},
20{"f0genotype",0,PARAM_NOSTATIC+PARAM_READONLY,"f0 genotype","s 1",GETONLY(f0genotype),"converted to f0 genotype",},
21{"new",0,0,"create new empty object","p oGeno()",PROCEDURE(p_new),},
22{"newFromString",0,0,"create new object from supplied string argument","p oGeno(s genotype)",PROCEDURE(p_newfromstring),},
23{"newFrom",0,0,"create new object","p oGeno(s genotype,d format,s name,s description)",PROCEDURE(p_newfrom),},
24{"autoname",0,PARAM_NOSTATIC+PARAM_READONLY,"Autogenerated name","s",GETONLY(autoname),},
25{0,0,0,},
26};
27#undef FIELDSTRUCT
28
29void GenoObj::get_isvalid(ExtValue *ret)
30{ret->setInt(isValid());}
31
32void GenoObj::get_genotype(ExtValue *ret)
33{ret->setString(getGene());}
34
35void GenoObj::get_name(ExtValue *ret)
36{ret->setString(getName());}
37
38void GenoObj::get_autoname(ExtValue *ret)
39{
40Model m(*this);
41ret->setString(AutoName::makeName(m));
42}
43
44int GenoObj::set_name(const ExtValue *v)
45{setName(v->getString());
46return PSET_CHANGED;}
47
48void GenoObj::get_info(ExtValue *ret)
49{ret->setString(getComment());}
50
51void GenoObj::get_string(ExtValue *ret)
52{ret->setString(shortString());}
53
54void GenoObj::get_format(ExtValue *ret)
55{ret->setInt(getFormat());}
56
57int GenoObj::set_info(const ExtValue *v)
58{setComment(v->getString());
59return PSET_CHANGED;}
60
61void GenoObj::get_f0genotype(ExtValue *ret)
62{ret->setString(getConverted('0').getGene());}
63
64void GenoObj::p_getconvert(ExtValue *args,ExtValue *ret)
65{*ret=makeDynamicObjectAndDecRef(new Geno(getConverted((char)args[0].getInt())));}
66
67void GenoObj::p_new(ExtValue *args,ExtValue *ret)
68{*ret=makeDynamicObjectAndDecRef(new Geno());}
69
70void GenoObj::p_newfromstring(ExtValue *args,ExtValue *ret)
71{*ret=makeDynamicObjectAndDecRef(new Geno(args[0].getString()));}
72
73void GenoObj::p_newfrom(ExtValue *args,ExtValue *ret)
74{*ret=makeDynamicObjectAndDecRef(new Geno(args[3].getString(),(char)args[2].getInt(),
75                                 args[1].getString(),args[0].getString()));}
76
77Param& GenoObj::getStaticParam()
78{
79#ifdef __CODEGUARD__
80static GenoObj static_genoobj;
81static Param static_genoparam(geno_paramtab,&static_genoobj);
82#else
83static Param static_genoparam(geno_paramtab);
84#endif
85return static_genoparam;
86}
87
88Param& GenoObj::getDynamicParam()
89{
90static Param dynamic_genoparam(geno_paramtab);
91return dynamic_genoparam;
92}
93
94ParamInterface* GenoObj::getInterface() {return &getStaticParam();}
95
96ExtObject GenoObj::makeStaticObject(Geno* g)
97{return ExtObject(&getStaticParam(),(void*)g);}
98
99ExtObject GenoObj::makeDynamicObject(Geno* g)
100{return ExtObject(&getDynamicParam(),(DestrBase*)g);}
101
102ExtObject GenoObj::makeDynamicObjectAndDecRef(Geno* g)
103{
104const ExtObject& o=makeDynamicObject(g);
105g->decref();
106return o;
107}
108
109Geno* GenoObj::fromObject(const ExtValue& v, bool warn)
110{
111return (Geno*)v.getObjectTarget(getStaticParam().getName(), warn);
112}
Note: See TracBrowser for help on using the repository browser.