X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fmodel.cpp;h=efd5c5f4d9ae6fc85d2b1e8cb6ac0177a32c0aa3;hb=dcd966c5fca7dca53ca1f605f70f13f019d29771;hp=12bee4bddafc7084cdf0a60a4bfe383d92bf7a92;hpb=f8575ea6c0982bba5ccf42771b2994d19500c0a3;p=germs.git diff --git a/src/model.cpp b/src/model.cpp index 12bee4b..efd5c5f 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -21,17 +21,34 @@ #include "model.h" #include "models.h" +#include + Model::Model(Models::ModelImpl* model): _impl(model){ } -double Model::score(const SortAction& sa) const{ - return _impl->score(sa); +double Model::score(const SortAction& sa, const GeneOrder& go) const{ + return _impl->score(sa, go); } -std::string Model::name() const{ +const char* Model::name() const{ return _impl->name(); } bool operator<(const Model& lh,const Model& rh){ return &lh < &rh; } + +Model Model::modelFactory(const std::string& name){ + if (name == "X"){ + return Model(new Models::X()); + }else if(name == "Whirl" || name == "Standard"){ + return Model(new Models::ModelImpl()); + }else if(name == "Zipper"){ + return Model(new Models::Zipper()); + }else if(name == "FatX"){ + return Model(new Models::FatX()); + }else if(name == "Cloud"){ + return Model(new Models::Cloud()); + } + throw std::invalid_argument(name + " is not a valid model"); +}