#ifndef __MODELS_H__
#define __MODELS_H__
-#include <string>
-
class SortAction;
+class GeneOrder;
namespace Models {
+/**
+ * Basic implementation of a model. All sort actions are considered equal.
+ */
class ModelImpl {
public:
virtual ~ModelImpl();
- virtual double score(const SortAction& sa);
-
- virtual std::string name();
+ /**
+ * All actions return 1 in this model.
+ *
+ * \see Model::score
+ */
+ virtual double score(const SortAction& sa, const GeneOrder& go);
+
+ /**
+ * \see Model::name
+ */
+ virtual const char* name();
};
+/**
+ * A model that favors reversals.
+ */
+class Whirl : public ModelImpl {
+ public:
+ /**
+ * Returns a higher score for reversals and a lower score
+ * for all other actions.
+ *
+ * \see Model::score
+ */
+ double score(const SortAction& sa, const GeneOrder& go);
+
+ /**
+ * \see Model::name
+ */
+ const char* name();
+};
+/**
+ * A model that favors symmetric reversal, resulting in an X-like
+ * picture in a dot plot.
+ */
class X : public ModelImpl {
public:
- double score(const SortAction& sa);
-
- std::string name();
+ /**
+ * Returns a higher score for reversals around the center
+ *
+ * \see Model::score
+ */
+ double score(const SortAction& sa, const GeneOrder& go);
+
+ /**
+ * \see Model::name
+ */
+ const char* name();
};
+/**
+ * A model that favors short reversals, resulting in a zipper-like
+ * picture in a dot plot
+ */
class Zipper : public ModelImpl {
public:
- double score(const SortAction& sa);
-
- std::string name();
+ /**
+ * Returns higher score for shorter reversals.
+ *
+ * \see Model::score
+ */
+ double score(const SortAction& sa, const GeneOrder& go);
+
+ /**
+ * \see Model::name
+ */
+ const char* name();
};
+/**
+ * A model that favors single gene transpositions, resulting in a
+ * very scattered dot plot.
+ */
class Cloud : public ModelImpl {
public:
- double score(const SortAction& sa);
-
- std::string name();
+ /**
+ * \todo has to be implemented
+ * \see Model::score
+ */
+ double score(const SortAction& sa, const GeneOrder& go);
+
+ /**
+ * \see Model::name
+ */
+ const char* name();
};
+/**
+ * A model similar to X, but a wider X in the dot plot.
+ */
class FatX : public ModelImpl {
public:
- double score(const SortAction& sa);
-
- std::string name();
+ /**
+ * \todo has to be implemented
+ * \see Model::score
+ */
+ double score(const SortAction& sa, const GeneOrder& go);
+
+ /**
+ * \see Model::name
+ */
+ const char* name();
};
}