From d7c119fefaf9cce07974afbefb4b6a017689a961 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Fri, 3 Aug 2007 13:58:02 +0000 Subject: [PATCH] a little more refactoring, name might just as well return const char* since it's a string constant, also score now takes a gene order too --- src/genesorter.cpp | 2 +- src/main.cpp | 2 +- src/model.cpp | 6 +++--- src/model.h | 7 ++++--- src/models.cpp | 21 +++++++++++---------- src/models.h | 23 +++++++++++------------ src/sortaction.h | 7 +++++++ src/test/modelidentifiertest.cpp | 8 ++++---- 8 files changed, 42 insertions(+), 34 deletions(-) diff --git a/src/genesorter.cpp b/src/genesorter.cpp index 602a6dd..81b9da5 100644 --- a/src/genesorter.cpp +++ b/src/genesorter.cpp @@ -49,7 +49,7 @@ GeneSorter::ActionList GeneSorter::sort(const GeneOrder& go, const Model& m){ if (safe.size() > 0){ priority_queue,vector >, ScoreCmp > pq; for (ActionList::iterator sa = safe.begin(); sa != safe.end(); ++sa){ - pq.push(pair(m.score(*sa),*sa)); + pq.push(pair(m.score(*sa,temp),*sa)); } SortAction sa = pq.top().second; sa(temp); diff --git a/src/main.cpp b/src/main.cpp index 90d3564..94109b4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -77,7 +77,7 @@ int main(int argc, char** argv){ 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; diff --git a/src/model.cpp b/src/model.cpp index 12bee4b..715d7c2 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -24,11 +24,11 @@ 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(); } diff --git a/src/model.h b/src/model.h index 9ebcb23..52e4d74 100644 --- a/src/model.h +++ b/src/model.h @@ -22,9 +22,10 @@ #define __MODEL_H__ #include -#include class SortAction; +class GeneOrder; + namespace Models { class ModelImpl; } @@ -35,9 +36,9 @@ class Model{ 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; diff --git a/src/models.cpp b/src/models.cpp index 0a7577a..9c13090 100644 --- a/src/models.cpp +++ b/src/models.cpp @@ -20,6 +20,7 @@ #include "models.h" #include "reverseaction.h" +#include "geneorder.h" using namespace std; @@ -27,40 +28,40 @@ namespace Models{ 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"; } diff --git a/src/models.h b/src/models.h index 6a61506..8d7f9e8 100644 --- a/src/models.h +++ b/src/models.h @@ -21,9 +21,8 @@ #ifndef __MODELS_H__ #define __MODELS_H__ -#include - class SortAction; +class GeneOrder; namespace Models { @@ -31,38 +30,38 @@ class ModelImpl { 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(); }; } diff --git a/src/sortaction.h b/src/sortaction.h index c56d0ee..faec98a 100644 --- a/src/sortaction.h +++ b/src/sortaction.h @@ -101,6 +101,13 @@ class SortAction{ std::string toString() const{ return _action->toString(); } + + /** + * Gives access to the implementation + */ + const SortActionImpl& impl(){ + return *_action; + } private: ActionPointer _action; diff --git a/src/test/modelidentifiertest.cpp b/src/test/modelidentifiertest.cpp index 96c3587..7a0cedd 100644 --- a/src/test/modelidentifiertest.cpp +++ b/src/test/modelidentifiertest.cpp @@ -63,19 +63,19 @@ protected: GeneOrder axis(_1axis.begin(),_1axis.end()); priority_queue 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())); } }; -- 2.39.2