if (safe.size() > 0){
priority_queue<pair<double,SortAction>,vector<pair<double,SortAction> >, ScoreCmp > pq;
for (ActionList::iterator sa = safe.begin(); sa != safe.end(); ++sa){
- pq.push(pair<double,SortAction>(m.score(*sa),*sa));
+ pq.push(pair<double,SortAction>(m.score(*sa,temp),*sa));
}
SortAction sa = pq.top().second;
sa(temp);
GeneSorter::ActionList al = so.sort(go,model);
for (GeneSorter::ActionList::iterator sa = al.begin(); sa != al.end(); ++sa){
- cout << "Action: " << sa->toString() << " model score: " << model.score(*sa) << endl;
+ cout << "Action: " << sa->toString() << " model score: " << model.score(*sa,go) << endl;
}
//TODO: Print result
return EXIT_SUCCESS;
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();
}
#define __MODEL_H__
#include <tr1/memory>
-#include <string>
class SortAction;
+class GeneOrder;
+
namespace Models {
class ModelImpl;
}
Model(Models::ModelImpl* model);
- double score(const SortAction& sa) const;
+ double score(const SortAction& sa, const GeneOrder& go) const;
- std::string name() const;
+ const char* name() const;
private:
ModelPointer _impl;
#include "models.h"
#include "reverseaction.h"
+#include "geneorder.h"
using namespace std;
ModelImpl::~ModelImpl(){}
-double ModelImpl::score(const SortAction& sa){
+double ModelImpl::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string ModelImpl::name(){
+const char* ModelImpl::name(){
return "Standard";
}
-double X::score(const SortAction& sa){
+double X::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string X::name(){
+const char* X::name(){
return "X";
}
-double Zipper::score(const SortAction& sa){
+double Zipper::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string Zipper::name(){
+const char* Zipper::name(){
return "Zipper";
}
-double Cloud::score(const SortAction& sa){
+double Cloud::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string Cloud::name(){
+const char* Cloud::name(){
return "Cloud";
}
-double FatX::score(const SortAction& sa){
+double FatX::score(const SortAction& sa, const GeneOrder& go){
return 1;
}
-string FatX::name(){
+const char* FatX::name(){
return "FatX";
}
#ifndef __MODELS_H__
#define __MODELS_H__
-#include <string>
-
class SortAction;
+class GeneOrder;
namespace Models {
public:
virtual ~ModelImpl();
- virtual double score(const SortAction& sa);
+ virtual double score(const SortAction& sa, const GeneOrder& go);
- virtual std::string name();
+ virtual const char* name();
};
class X : public ModelImpl {
public:
- double score(const SortAction& sa);
+ double score(const SortAction& sa, const GeneOrder& go);
- std::string name();
+ const char* name();
};
class Zipper : public ModelImpl {
public:
- double score(const SortAction& sa);
+ double score(const SortAction& sa, const GeneOrder& go);
- std::string name();
+ const char* name();
};
class Cloud : public ModelImpl {
public:
- double score(const SortAction& sa);
+ double score(const SortAction& sa, const GeneOrder& go);
- std::string name();
+ const char* name();
};
class FatX : public ModelImpl {
public:
- double score(const SortAction& sa);
+ double score(const SortAction& sa, const GeneOrder& go);
- std::string name();
+ const char* name();
};
}
std::string toString() const{
return _action->toString();
}
+
+ /**
+ * Gives access to the implementation
+ */
+ const SortActionImpl& impl(){
+ return *_action;
+ }
private:
ActionPointer _action;
GeneOrder axis(_1axis.begin(),_1axis.end());
priority_queue<modelpair> pq = mi.identify(axis);
- CPPUNIT_ASSERT_EQUAL(string("X"),pq.top().second.name());
+ CPPUNIT_ASSERT_EQUAL(string("X"),string(pq.top().second.name()));
GeneOrder uniform(_uniform.begin(),_uniform.end());
pq = mi.identify(uniform);
- CPPUNIT_ASSERT_EQUAL(string("Standard"),pq.top().second.name());
+ CPPUNIT_ASSERT_EQUAL(string("Standard"),string(pq.top().second.name()));
GeneOrder zipper(_zipper.begin(),_zipper.end());
pq = mi.identify(zipper);
- CPPUNIT_ASSERT_EQUAL(string("Zipper"),pq.top().second.name());
+ CPPUNIT_ASSERT_EQUAL(string("Zipper"),string(pq.top().second.name()));
GeneOrder transpos(_transpos.begin(),_transpos.end());
pq = mi.identify(transpos);
- CPPUNIT_ASSERT_EQUAL(string("Cloud"),pq.top().second.name());
+ CPPUNIT_ASSERT_EQUAL(string("Cloud"),string(pq.top().second.name()));
}
};